【问题标题】:PHP profile update error with mysql_num_rowsmysql_num_rows 的 PHP 配置文件更新错误
【发布时间】:2013-06-21 22:45:30
【问题描述】:

我有一个简单的 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 值。

【问题讨论】:

    标签: php html mysql forms input


    【解决方案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 username !=$_postusername
    • 是的,最好把它放在查询中;o
    【解决方案2】:

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

    "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)"
    

    【讨论】:

    • 我实际上在会话中有用户的用户名,所以...这个也可以!