使用$ _GET传递会员ID

时间:2011-10-07 02:26:18

标签: php mysql membership

我在尝试创建成员登录系统时遇到问题,其中每个用户都被定向到他们自己的可编辑配置文件。我现在正处于登录阶段,并试图将用户的ID从登录页面安全地传递到他们的个人资料页面,以便我可以显示他们的个人资料信息。

现在,我被重定向到'mydomain.com/index.php?test=Resource%20id%20#8',(我想要,例如'mydomain.com/index.php?test=1111' )在这段代码之后:

$user_id = mysql_query("SELECT `id` FROM `users` WHERE `username` = '$user' AND `active`='1'");  
header("location: profile.php?test='$user_id'");
exit();

其中$ user已使用trim,htmlspecialchars和mysql_real_escape_string进行清理。在用户到达'profile.php'后,我计划在确定如何正确传递用户ID之后实现类似的内容:

$user_id=(int)$_GET['$user_id'];
mysql_real_escape_string($user_id);
if (isset($user_id)) {
   $user_id = preg_replace('#[^0-9]#i', '', $user_id); // filter everything but numbers

代码还有更多内容,但我相信我已经包含了所有相关信息。任何建议,智慧,想法和评论总是非常感激。非常感谢您的支持。

2 个答案:

答案 0 :(得分:2)

您无法立即查询并获得结果。

尝试修复上面的部分。

$user_id = mysql_query("SELECT `id` FROM `users` WHERE `username` = '$user' AND `active`='1'");
$user_id = mysql_result($user_id, 0, 'id');  
header("location: profile.php?test='$user_id'");
exit();

答案 1 :(得分:0)

你的代码很糟糕。

  1. isset毫无意义,$user_id总是设置在那里。
  2. preg_replace毫无意义 - 在(int)后,只有数字会变量
  3. mysql_real_escape_string毫无意义 - 在(int)之后将没有不良角色
  4. 所以用单行替换整个块

    $user_id = isset($_GET['user_id']) ? (int)$_GET['user_id'] : 0;