0

我刚刚制作了一个注册表单,当我添加最终验证(MySQL 验证)时遇到了问题。

这是我得到的错误: Parse error: syntax error, unexpected 'elseif' (T_ELSEIF) in C:\xampp\htdocs\Signup\includes\signup.php on line 72

已标记第 72 行以帮助您弄清楚。

else
        {
            require_once("db_connect.php");

            // Email validation
            $query_email="SELECT email FROM users WHERE email='$email'";
            $result_email=mysql_query($query_email) or die (mysql_error());
            if (mysql_num_rows($result_email)>0)
            {
                echo "You already have an account registered on this email.";
            }

            // Username validation
            $query_username="SELECT username FROM users WHERE username='$username'";
            $result_username=mysql_query($query_username) or die (mysql_error());
            elseif (mysql_num_rows($result_username)>0) /* !!! ROW 72 !!! */
            {
                echo "Username already registered. Pick something else";
            }

            // Add new user to database
            else
            {
                $query="INSERT INTO users VALUES ('', '$username', '$password', '$email', '$first_name', '$last_name', '$birthday', '$sex', '', '$registered', '')";
                mysql_query($query) or die (mysql_error());
                echo "User created!";
            }

        }

如果我评论之间的所有内容// Username validation并且// Add new user to database一切正常(除了我没有用户名验证的事实)。

如果您想知道 $username 是什么:

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

我已经阅读了一些关于意外 elseif 的问题,但我只是不明白。括号看起来没问题,并且 elseif 提供了一个条件。请在降级之前让我知道,以便我可以编辑我的问题。谢谢!

4

1 回答 1

1

改变这个:

// Username validation
            $query_username="SELECT username FROM users WHERE username='$username'";
            $result_username=mysql_query($query_username) or die (mysql_error());
            elseif (mysql_num_rows($result_username)>0) /* !!! ROW 72 !!! */
            {
                echo "Username already registered. Pick something else";
            }

对此:

// Username validation
            $query_username="SELECT username FROM users WHERE username='$username'";
            $result_username=mysql_query($query_username) or die (mysql_error());
            if (mysql_num_rows($result_username)>0) /* !!! ROW 72 !!! */
            {
                echo "Username already registered. Pick something else";
            }

这是出乎意料的,因为它是else if初始if条件的 else 条件,由标准格式的花括号顺序连接。您在此处的示例代码没有初始 if 条件。

您的最后一条else语句将需要其他类型的检查以确定是否需要插入。

这是一个替代方案:

// Email validation
            $query_email="SELECT * FROM users WHERE email='$email' OR username='$username'";
            $result_email=mysql_query($query_email) or die (mysql_error());
            if (mysql_num_rows($result_email)>0)
            {
                echo "There is already an account registered on this email or that username is already taken.";
            }
            else
            {
                // Add new user to database
                $query="INSERT INTO users VALUES ('', '$username', '$password', '$email', '$first_name', '$last_name', '$birthday', '$sex', '', '$registered', '')";
                mysql_query($query) or die (mysql_error());
                echo "User created!";
            }

另外,请注意,您需要清理此输入。我不知道您目前正在做什么以确保 $username 或 $email 不是劫持尝试。此外,不推荐使用 mysql_ 函数。切换到 PDO 或 mysqli 并使用准备好的语句来清理输入。

于 2013-09-11T20:14:26.743 回答