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に関するSOの質問をいくつか読みましたが、私の場合はわかりません。ブラケットは問題ないようで、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、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 に答える