【发布时间】:2011-12-29 18:58:08
【问题描述】:
我正在编辑用户登录系统的一部分,但我对一个问题感到非常困惑。我试图允许用户使用他们的电子邮件作为查找参考来更改他们的用户名。由于某种原因,我无法正确设置 $email 变量。当我将变量 $email 更改为我知道在我的数据库中的地址时(意味着我删除 $email 并将其更改为存在的地址),用户名已正确更改。当我把它换回 $email 时,什么也没有发生。
奇怪的是,当我回显 $email 时,会显示正确的电子邮件地址。我不明白为什么它不会让我这样做,尽管它得到了正确的回响。尽管显示了电子邮件地址,但是否可能不是字符串?
我了解 sql 注入。我现在只是想让代码尽可能简单,这样我就可以先让功能正常工作。
<?
if (isset($_POST['submit'])) {
$email = $user->get_email($username);
$newuser = $_POST['newusername'];
$server = 'localhost';
$usern = 'root';
$pass = '';
$connection = mysql_connect($server, $usern, $pass) or die(mysql_error());
mysql_select_db(testdb, $connection) or die(mysql_error());
if(isset($username)) {
mysql_query("UPDATE users SET username='$newuser' WHERE email = '$email'") or die(mysql_error());
}
}
?>
另外,当我更改查询语句以使参考值为用户 ID 时,用户名被正确插入。由此我知道 $email 没有正确设置。
mysql_query("UPDATE users SET username='$newuser' WHERE userid = '$userid'") or die(mysql_error());
【问题讨论】:
-
为什么不使用
WHERE中的id字段?这不仅更简单,而且更安全、更快捷。 -
这里到处都是SQL注入!请清理您的输入!
-
这就是我要做的。我只是想弄清楚为什么电子邮件不起作用。这真的让我很烦恼,将来可能会对我有所帮助。
-
@user1104854 再次嗨。请不要在 Stack Overflow 上重新提问。它很可能作为副本关闭。相反,请编辑您之前的问题以澄清它。这样做会将其移动到活动问题中,并且会再次被其他人看到。
-
迈克尔,我试图删除该帖子,但我不得不标记它并要求版主删除它。我发现了这个问题的一部分,但我觉得添加更多只会导致更多的混乱和更少的找到原因的机会。