0

特定のユーザー資格情報が使用されているかどうかを確認するために PHP で条件を作成しており、if....elseif....else条件付きメソッドを使用してそれを実行しています。各ステートメントでは、そのステートメントが真である場合に変数の値を定義しています。何があっても、else値は常に使用されています。

また、ブラウニーポイントが欲しい場合は、switchステートメントで行う方が簡単ですか?

$username = $_POST['username'];
$password = strong_crypt($_POST['password'] . $username );
$name = $_POST['name'];
$email = $_POST['email'];

while($row = mysqli_fetch_array($query))
{
    $allEmails = $row['email'];
    $allUnames = $row['uname'];
}

if($allEmails === $email)
{
    $message = "That email already exists. You can only have one account per email address.";
}
elseif($allUnames === $username)
{
    $message = "That username has already been taken. Please choose a different one.";
}
elseif($username === null || $email === null || $password === null || $name === null) 
{
    $message = "Please fill out all fields to register";
}
else
{
    mysqli_query($conn, "INSERT INTO login (name, uname, pword, email, lat, lon, it) VALUES ('$name', '$username', '$password', '$email', '$lat', '$lon', '$it')");
    $message = "goodtogo";
}
4

4 に答える 4

1

ここでの問題は、while ループの外でチェックを行っているため、常にクエリの LAST 行の値に対してチェックが行われるようになっているようです。おそらく、このコードはあなたが目指していたものではないでしょうか?

$username = $_POST['username'];
$password = strong_crypt($_POST['password'] . $username );
$name = $_POST['name'];
$email = $_POST['email'];
$message = '';

if($username === null || $email === null || $password === null || $name === null) 
{
    $message = "Please fill out all fields to register";
}
else
{
    while($row = mysqli_fetch_array($query))
    {
        $allEmails = $row['email'];
        $allUnames = $row['uname'];

        if($allEmails === $email)
        {
            $message = "That email already exists. You can only have one account per email address.";
            break;
        }
        else if($allUnames === $username)
        {
            $message = "That username has already been taken. Please choose a different one.";
            break;
        }
    }
}
if (!$message)
{
    mysqli_query($conn, "INSERT INTO login (name, uname, pword, email, lat, lon, it) VALUES ('$name', '$username', '$password', '$email', '$lat', '$lon', '$it')");
    $message = "goodtogo";
}
于 2013-06-26T15:20:58.640 に答える