【问题标题】:Limiting URL entry with a PHP variable使用 PHP 变量限制 URL 输入
【发布时间】:2012-04-19 18:26:03
【问题描述】:

我试图限制用户只能看到他/她自己的详细信息。我通过 URL 栏传递一个 PHP 变量,所以它只显示他们自己的信息,但是如果他们编辑 ID 号,他们可以查看其他人的详细信息吗?

我目前拥有的代码如下所示:

$managerID = preg_replace('#[^0-9]#i', '', $_SESSION["id"]);
$manager = preg_replace('#[^A-Za-z0-9]#i', '', $_SESSION["manager"]);
$password = preg_replace('#[^A-Za-z0-9]#i', '', $_SESSION["password"]);

include "../adminscripts/connect_to_mysql.php";
$sql = mysql_query("SELECT * FROM Users WHERE id='$managerID' AND username='$manager' AND password='$password' AND role='Student' LIMIT 1");
$existCount = mysql_num_rows($sql);
if ($existCount == 0) {
header("location: http://www.zuluirminger.com/SchoolAdmin/index.php");
exit();
}
?>

<?php
// Get a list of all items and display them in alphabetically
include "../adminscripts/connect_to_mysql.php";

//Check to see the URL variable exists in the database
$dynamicList = "";
if (isset($_GET['id'])) {
include "../adminscripts/connect_to_mysql.php";
$id = preg_replace('#[^0-9]#i', '', $_GET['id']);

***********************************************************************************
***********************************************************************************

// If the ID does not exist the display this message.
$sql = mysql_query("SELECT * FROM StudentAttendance WHERE StudentID='$id' ORDER BY AttendanceDate DESC");
$productCount = mysql_num_rows($sql);
if ($productCount > 0) {
    while ($row = mysql_fetch_array($sql)) {
        $AttendanceDate = $row["AttendanceDate"];
        $AttendanceStatus = $row["AttendanceStatus"];
        $Notes = $row["Notes"];
        $dynamicList .= '<tr style="font-size:15px;">
  <td>' . $AttendanceDate . '</td>
  <td>' . $AttendanceStatus . '</td>
  <td>' . $Notes . '</td>
</tr>';
    }
} else {
    $AttendanceDate = "nil";
    $AttendanceStatus = "nil";
    $Notes = "nil";
}
} else {
echo "Something is missing which means we can't display this page! Sorry for the inconvenience and please try again later!";
exit();
}
mysql_close();
?>

我尝试将以下 if 语句放在上面代码中我放置星号的位置...

if ($id != $managerID) {
    $id = $managerID;
}

但这似乎不起作用......我把它放在正确的地方了吗?据我所知,我使用了正确的变量?

任何帮助将不胜感激!

【问题讨论】:

  • 嗯,所有这些明星可能会给您带来一些问题......
  • 我只是为了这个问题而将它们放入@Neal - 它们实际上并不存在于代码中:)
  • 你能加密/解密ID吗?

标签: php url variables


【解决方案1】:

您似乎已经拥有登录用户和 ID,那么为什么不直接使用 $_SESSION["id"] 而不是 $_GET['id']

【讨论】:

  • 感谢您的回答 @jeroen - 我尝试使用 $_SESSION["id"] 而不是 $_GET['id'] 但是,虽然它显示正确的数据,但用户仍然可以更改 URL 中的值,它会导航到另一个学生的数据...
  • 我想我可能会对您要更改的地方感到困惑!
  • @Zulu Irminger Everywhere,如果$_SESSION["id"]包含当前登录学生的id,他/她只能更改他/她自己的数据,则根本不需要$_GET['id']
  • 非常感谢您的帮助。我想我已经在这方面太久了,而且有隧道视野!再次感谢:)
【解决方案2】:

你只需要稍微改变一下你的想法。当他们登录时,设置一个会话变量作为他们的用户 ID,并使用它而不是查询字符串。或者继续使用查询字符串,但根据会话用户 ID 对其进行验证,并确保这是他们试图访问的信息。

【讨论】:

    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2020-12-03
    • 2012-11-10
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    相关资源
    最近更新 更多