我正在编辑用户登录系统的一部分,我对一个问题非常困惑。我正在尝试允许用户使用他们的电子邮件更改其用户名作为查找的参考。出于某种原因,我无法正确设置$ 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());
}
}
?>
此外,当我更改查询语句以使引用值为userid时,将正确插入用户名。由此我知道$ email没有正确设置。
mysql_query("UPDATE users SET username='$newuser' WHERE userid = '$userid'") or die(mysql_error());
答案 0 :(得分:0)
if(isset($username)) {
mysql_query("UPDATE users SET username='$newuser' WHERE email = '$email'") or die(mysql_error());
}
您的代码中的哪个位置设置了$username
变量?如果未设置,则不会运行更新。您应该回过头来检查您的变量名称,并确保它们在整个页面的其余部分保持一致(和设置)。
答案 1 :(得分:0)
听起来你的get_email()函数返回了一个错误的地址。 您确定您的身份验证系统在其他所有方面都正常运行吗?
执行此操作时会发生什么:
echo "UPDATE users SET username='$newuser' WHERE email = '$email'";
此外,您需要清理$ newuser的输入以避免SQL注入。就像其中一条评论所说,您应该使用用户ID而不是电子邮件。我不确定您使用的是哪种身份验证类,但您应该能够找到类似$ user-&gt; returnID()的内容并使用它进行更新。
答案 2 :(得分:0)
无论如何,建议添加
$email = mysql_real_escape_string($email);
也许这就是问题
答案 3 :(得分:0)
我应该使用以下内容:
<?
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$email = $user->get_email($username); // where does $username come from anyway? and where are you initiating the $user object?
$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($newuser)) {
$newuser = mysql_real_escape_string($newuser);
$email = mysql_real_escape_string($email);
mysql_query("UPDATE users SET username='" . $newuser . "' WHERE email = '". $email ."'") or die(mysql_error());
}
}
?>
mysql_real_escape_string()创建一个新字符串。它将转义在插入时可能会损坏数据库的字符。(称为:SQL注入)
有关SQL注入的示例,可以让您了解它是什么,以及如何使用和保护它: http://www.unixwiz.net/techtips/sql-injection.html