Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用php将变量插入数据库_Php_Mysql_Function_Object - Fatal编程技术网

用php将变量插入数据库

用php将变量插入数据库,php,mysql,function,object,Php,Mysql,Function,Object,我正在编辑一个用户登录系统的一部分,有一个问题我很困惑。我试图允许用户使用他们的电子邮件作为查找的参考来更改用户名。由于某些原因,我无法正确设置$email变量。当我将变量$email更改为我知道存在于数据库中的地址时(意味着我删除$email并将其更改为存在的地址),用户名将正确更改。当我把它换回$email时,什么也没发生 奇怪的是,当我回显$email时,会显示正确的电子邮件地址。我不明白为什么它不让我这样做,尽管它得到了正确的回应。即使显示电子邮件地址,也可能不是字符串吗 我了解sql注

我正在编辑一个用户登录系统的一部分,有一个问题我很困惑。我试图允许用户使用他们的电子邮件作为查找的参考来更改用户名。由于某些原因,我无法正确设置$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());
}
}
?>
您在代码的何处设置
$username
变量?如果未设置,您的更新将不会运行。您可能应该返回并检查变量名,确保它们在页面的其余部分都是一致的(并已设置)。

听起来您的get\u email()函数返回的地址不正确。 您确定您的身份验证系统在所有其他方面都工作正常吗

当您这样做时会发生什么:

echo "UPDATE users SET username='$newuser' WHERE email = '$email'";

此外,您还需要清理$newuser的输入,以避免SQL注入。正如其中一条评论所说,您应该使用用户id而不是电子邮件。我不确定您使用的是什么身份验证类,但您应该能够找到类似$user->returnID()的内容并使用它进行更新

无论如何,建议添加

$email = mysql_real_escape_string($email);

也许这就是问题所在

我应该使用以下方法:

<?
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());
    }
}
?>

为什么不在
的WHERE
中使用
id
字段?它不仅更简单,而且更安全、更快。SQL注入到处都是!请清理您的输入!这就是我要做的。我只是想弄明白为什么电子邮件不起作用。这真的很困扰我,将来可能会对我有所帮助。@user1104854你好。请不要再次询问有关堆栈溢出的问题。它很可能作为副本关闭。相反,编辑前面的问题以澄清它。这样做会将其移动到活动问题中,并再次被其他人看到。Michael,我试图删除该帖子,但我不得不将其标记,并要求版主将其删除。我发现了问题的一部分,但我觉得添加更多只会导致更多的混乱,减少找到原因的机会。我没有注意到这一点,但将其更改为$newuser仍然不会影响结果。我理解,我将使用userid作为参考。我最初是这样的,我意识到我应该使用ID,现在我只是很恼火,我不明白为什么我不能使用电子邮件。
$email = mysql_real_escape_string($email);
<?
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());
    }
}
?>