简单形式验证时出现意外的其他问题

时间:2013-09-11 20:12:43

标签: php if-statement

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

这是我得到的错误: 解析错误:语法错误,第72行的C:\ xampp \ htdocs \ Signup \ includes \ signup.php中的意外'elseif'(T_ELSEIF)

第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']);

我已经阅读了一些有关其他意外事件的问题,但我只是在我的案例中没有得到它。括号似乎没问题,而且提供条件。请低估之前告诉我,以便我可以编辑我的问题。谢谢!

1 个答案:

答案 0 :(得分: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语句需要进行其他类型的检查以确定是否需要插入。

这是另一种选择:

// 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并使用预准备语句来清理输入。