【问题标题】:Unexpected elseif in simple form validation简单表单验证中的意外 elseif
【发布时间】:2013-09-16 00:26:58
【问题描述】:

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

这是我得到的错误: 解析错误:语法错误,C:\xampp\htdocs\Signup\includes\signup.php 中的意外 'elseif' (T_ELSEIF) 在第 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']);

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

【问题讨论】:

  • if 语句和 elseif 语句之间不能有代码
  • $query_username="SELECT username FROM users WHERE username='$username'"; $result_username=mysql_query($query_username) or die (mysql_error()); 这两行需要移动
  • PSA: mysql_* 函数是 deprecated in PHP 5.5。不建议编写新代码,因为它会阻止您将来升级。相反,请使用 MySQLiPDObe a better PHP Developer
  • 是的,我知道我应该使用 MySQLi。我这样做只是为了练习,如果我在网络上使用此表单,我会跳到它。非常感谢您提供的“成为更好的 PHP 开发人员链接”。我看了看,它确实提供了很多信息。

标签: php if-statement


【解决方案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 并使用准备好的语句来清理输入。

【讨论】:

  • 非常感谢您的回答。这确实是一个替代方案。但是我设法通过简单地在第一个“if”之前移动变量来修复它,这样它和“elseif”之间就没有任何东西了。
  • 您也可以这样做。无论哪种方式,关键是您的条件之间存在代码,而 else if 在这种情况下无法正常工作
  • 是的。我正在使用 mysql_real_escape_string 以防止 SQL 注入。这还不够吗?
  • 这还不够,因为 mysql_ 已被弃用。切换到 mysqli 或 PDO 并使用准备好的语句是快速更新的最简单和最佳选择。两者都不是特别难切换,但您可能会发现 mysqli 在语法上与 mysql_ 函数几乎相同。
  • 我知道这与这个问题无关,但是我的 db_connect.php 与 mysqli 的外观如何?
猜你喜欢
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 2013-05-19
  • 2011-03-12
  • 2013-11-16
  • 2012-01-15
  • 1970-01-01
  • 2013-12-07
相关资源
最近更新 更多