【问题标题】:PHP - Username Already Exists Stays On Screen [duplicate]PHP - 用户名已经存在留在屏幕上[重复]
【发布时间】:2015-08-06 03:11:35
【问题描述】:

所以我一直在寻找许多关于 php 注册页面的参考资料,但是我遇到了麻烦。重新加载页面后,“用户名已存在”行始终存在。我知道我的代码有问题,但是看到我不是 PHP Savvy,我真的不知道如何解决它;我已经环顾了几个小时,似乎仍然无法解决这个问题,并且尝试了许多不同的方法来注册帐户。也许你们中的一个可以帮助我。这是我的代码:

            <html>
                <body>
                    <form method="post" action=""> 
                        Username: <input type="text" name="username" value="" /><br/> 
                        Password: <input type="password" name="pass" value="" /><br/> 
                        Repeat Password: <input type="password" name="pass2" value=""/><br/> 
                        <input type="submit" name="submit" value="Submit" /> 
                    </form> 
                </body>
            </html>

            <?php 
                $con = mysql_connect("localhost", "root", "123"); 
                $db = mysql_select_db("cq3"); 

                $Username = isset($_POST['Username']);
                $sql = "SELECT * FROM accounts WHERE Username = '$Username'";
                $result = mysql_query($sql, $con);
                if(mysql_num_rows($result)){
                    echo "Username already exists!";
                }
                else
                {
                    if(isset($_POST['submit'])) 
                    {   
                        $sql = "INSERT INTO `accounts` (Username, Password) VALUES ('".$_POST['username']."', '".$_POST['pass']."')"; 
                        $sql = mysql_query($sql);
                    }
                }
            ?>

【问题讨论】:

  • 比较 name="username"$_POST['Username'] - 那么这将不起作用 $Username = isset($_POST['Username']); 有两个原因。使用错误报告和更安全的方法来存储密码以及 MySQL API。
  • @Fred-ii- 我不认为他想询问未定义的索引错误。他在问为什么即使用户没有按下提交按钮,他的代码仍然显示出来。
  • @Script47 你最好再看看我对他们的第一条评论。
  • @Fred-ii- 我遇到了麻烦。重新加载页面后,“用户名已存在”行始终存在。我知道我的代码有问题,但是看到我不是 PHP Savvy,我真的不知道如何解决它; 我做了并查看。这是他的问题,而不是他代码中的其他问题,甚至认为可能存在。
  • @Script47 他们的代码是关闭它的全部基础。再次检查他们的代码,并用细齿梳子,包括我对他们的第一条评论,说明他们的代码为什么会失败。好了,不能再聊天了。你需要调整你的答案,因为它并不完全正确。编辑:代码比文字更响亮更清晰;-)

标签: php html registration


【解决方案1】:

您应该将用户名检查放在 $_POST['submit'] if 语句中,以便它仅在用户单击提交按钮时运行。这应该可以解决您的问题。

编辑 1

正如弗雷德指出的那样,

&lt;input type="text" name="username" value="" /&gt;

但你出于某种原因正在这样做,

$Username = isset($_POST['Username']);

应该是,

$username = isset($_POST['username']);

注意$_POST['username']中的小写u

还解决了您在不应该显示错误消息时出现的其他问题,

    $con = mysql_connect("localhost", "root", "123"); 
    $db = mysql_select_db("cq3"); 

    $username = isset($_POST['username']) ? htmlspecialchars($_POST['username'], ENT_QUOTES) : false;
    $sql = "SELECT * FROM accounts WHERE Username = '$Username'";
    $result = mysql_query($sql, $con);

    if(isset($_POST['submit'])) {
        $sql = "SELECT * FROM accounts WHERE Username = '$Username'";
        $result = mysql_query($sql, $con);

        if(mysql_num_rows($result)){
            echo "Username already exists!";
        } else {
            $sql = "INSERT INTO `accounts` (Username, Password) VALUES ('".$_POST['username']."', '".$_POST['pass']."')"; 
            $sql = mysql_query($sql);
        }
    }

您需要确保所有输入名称与$_POST 中的键匹配。

只有在按下提交按钮并且用户名不存在时才插入用户,现在用户名检查将在用户按下提交后运行。

编辑 2 + 3

如果可以,您应该stop using mysql_* functions。它们不再被维护并且是officially deprecated。改为了解 prepared statements,并考虑使用 PDO,it's really not hard


看来您可能正在以纯文本形式存储密码。如果是这种情况,强烈建议不要这样做。

建议您使用CRYPT_BLOWFISH 或PHP 5.5 的password_hash() 函数。对于 PHP password_hash() compatibility pack

【讨论】:

  • “这应该可以解决您的问题。” - 我不想在这里成为坏消息的承担者,但它不会。请记住,在大多数或所有编码/编程语言中,变量都区分大小写,POST 数组也是如此。另外,他们的isset() 也失败了。
  • $username = isset($_POST['username']); 关闭,但没有雪茄。这是不正确的。参考:php.net/manual/en/function.isset.phpphp.net/manual/en/language.operators.comparison.php
  • @Fred-ii-gah,他的代码,我错过了。立即编辑。
  • 你明白我为什么关闭这个问题了吗?我认为 99.9% 的社区成员会同意我的观点;-)
  • @Fred-ii- 我现在同意你的看法。这就是为什么我对你的评论投了赞成票。 :P
猜你喜欢
  • 2015-03-04
  • 1970-01-01
  • 2013-08-27
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多