0

こんにちは、私は php と mysql を初めて使用します。現在、データベースに同じユーザー名が既に存在するかどうか、およびユーザー入力 $email と同じかどうか、ユーザー入力とユーザー名を確認しようとしています。

以下のコードがあります。ユーザー入力をエコーし​​て比較し、データベースから行/データをフェッチする行を試しました。line echo $email."COMPARE".$result2; まで到達していることが確認できました。どちらも同じですが、条件 $email == $result2 を渡します。ここで、result2 はデータベースからのメール フェッチです。何が悪いのか教えてください。前もって感謝します。

$extract= mysql_query("SELECT * FROM users");
$resultq = mysql_num_rows($extract);
while($row= mysql_fetch_array($extract))
{

    $result = $row['username'];
    $result2 = $row['email'];

    echo $email."COMPARE".$result2;

    if($username == $result) 
    {
         echo "<script type=\"text/javascript\">alert('Username Already Taken')</script>";
         echo "<meta http-equiv=\"refresh\" content=\"0;url=6signup.html\" />";
         break;

    }
    else if ($email == $result2)
    {
         echo "<script type=\"text/javascript\">alert('Email Already Registered')</script>";
         echo "<meta http-equiv=\"refresh\" content=\"0;url=6signup.html\" />";
         break;
    }
    else
    {
        //continues to execute the loop until no more to fetch
    }
4

1 に答える 1

1

別のアプローチを使用して、SQL クエリで検索を行います。その種の検索では、SQL の方が優れています (そしてパフォーマンスも優れています)。

このクエリには while ループは必要ありません。

SELECT *
FROM users
WHERE username = '<input username here>'
OR email = '<input email here>'

結果が得られた場合は、ユーザー名またはメールアドレスが既に登録されていることを意味します。ユーザー名かメールアドレスかはif文で確認してください。

mysql_*新しいコードで関数を使用しないでください。それらはもはや保守されておらず、公式に非推奨です赤いボックスがか? 代わりにプリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事はどちらを使用するかを決めるのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。

完全な PHP コードは次のようになります (PDO の場合):

// Database connection
// -------------------
// I usually put this in a seperate file and include it.
try {
    $dbconn = new PDO('mysql:dbname=database;host=localhost', 'username', 'password');
} catch (PDOException $e) {
    die('Connection failed: ' . $e->getMessage());
}

// Prepare statement
// -----------------
// Build query using question mark parameters
$sql = "SELECT * FROM users WHERE username = ? OR email = ?";
// Create prepared statement
$sth = $dbconn->prepare($sql);

// Execute statement
// -----------------
// The parameters are automatically changed into your input data
$sth->execute(array($username, $email));

// Put all affected rows in $result (array!)
$result = $sth->fetchAll();

// Check array contents
// --------------------
if (count($result) > 0) {
    // Loop through results
    foreach ($result as $row) {
        if ($username == $row['username']) {
            echo "<script type=\"text/javascript\">alert('This username is already taken!')</script>";
            echo "<meta http-equiv=\"refresh\" content=\"0;url=6signup.html\" />";
        } else { // If username doesn't match, it has to be the e-mailaddress
            echo "<script type=\"text/javascript\">alert('This e-mailaddress has already registered!')</script>";
            echo "<meta http-equiv=\"refresh\" content=\"0;url=6signup.html\" />";
        }
    }
} else {
    /* Code to execute when not registered yet */
}
于 2013-08-23T17:48:01.927 に答える