mysql_num_rows的PHP配置文件更新错误


PHP profile update error with mysql_num_rows

我有一个简单的PHP页面,您可以在其中更新您的网站配置文件。有几个可更新的输入,如电话号码、MSN访问等。有一个特定的字段,即电子邮件地址字段。由于这不是一个注册,而是一个更新页面,用户当前的电子邮件添加。应显示为字段的值。但当用户将电子邮件更改为另一封时,我遇到了一个问题,只要它不在使用中,它就可以正常工作,但当他不更改电子邮件并更新其他内容时,它就不起作用。

$email = mysql_real_escape_string($_POST['email']);
if(mysql_num_rows(mysql_query("SELECT * FROM users WHERE email='$email'")) > 0)
{
    echo "The e-mail is already in use.";
}

我应该如何修复这些行,因为每当用户更改电子邮件以外的内容时,都会执行相同的表单操作,当然,用户会收到错误,因为他实际上又将电子邮件更改为自己的电子邮件,这给mysql_num_rows()带来了1的值。

试试这样的东西:

$email = mysql_real_escape_string($_POST['email']);
$username =  mysql_real_escape_string($_POST['username']); // You can also get it from the session or wherever you want
$row = mysql_query("SELECT * FROM users WHERE email='$email'");
if(mysql_num_rows($row) > 0)
{
    if ($username != $row["username"]) {
        echo "The e-mail is already in use.";
    }
}

它可以是用户名或标识当前用户的任何其他信息。

我建议在会话中获取当前用户的电子邮件地址,然后您可以添加一个条件来验证所选电子邮件是否与当前用户的邮件不同

"SELECT * FROM users WHERE email='$email' AND email !=" . $_SESSION['user_email'] 

你也可以使用像这个这样的子请求

"SELECT * FROM users WHERE email='$email' AND email != (select email FROM users WHERE id= $id_of_current_user)"