1

コードにif関数を記述する方法を理解するのに苦労しています。PHPフォームでMySQLデータベースに重複を送信できないようにしようとしています。フォームに入力されたメールアドレスに基づく送信を防止したいのですが。誰かが私を正しい方向に導くことができますか?ありがとう。

<?php
  $dbc = mysqli_connect('n/a', 'n/a', 'n/a', 'n/a')
    or die('Error connecting to MySQL server.');

  $store_name = $_POST['storename'];
  $full_name = $_POST['fullname'];
  $address = $_POST['address'];
  $city = $_POST['city'];
  $state = $_POST['state'];
  $zip = $_POST['zip'];
  $phone = $_POST['phone'];
  $fax = $_POST['fax'];
  $email = $_POST['email'];
  $url = $_POST['url'];

  $query = "INSERT INTO store_location (store_name, full_name, address, city, state, zip,     phone, fax, email, url)  VALUES ('$store_name', '$full_name', '$address', '$city',     '$state', '$zip', '$phone', '$fax', '$email', '$url')";
  mysqli_query($dbc, $query)
or die('Error querying database.');

  echo 'New TeachPro store added.';
   echo '<br/><br/>';

  mysqli_close($dbc);
    ?>
4

2 に答える 2

1

データベース テーブルの email 列には一意のキーを使用する必要があります。同じメール アドレスを 2 回挿入しようとすると、MySQL はそれに応じたエラー メッセージを返します。これらのエラー メッセージをキャッチし、有用なエラー メッセージ テキストをユーザーに提示できます。

ユーザー名をチェックするためにそのアプローチを使用しました:

try
{
    /** @var $userInsertUpdateStmt PDOStatement */

    $userInsertUpdateStmt->execute();
}
catch(PDOException $e)
{
    if($e->errorInfo[1] == 1062)
    {
        /* username already used */
        return User::ERR_USERNAME_ASSIGNED;
    }
    return User::ERR_SQL;
}
于 2012-12-10T15:34:03.027 に答える
1
SELECT count(*) FORM ... WHERE store_name = ... OR full_name=...

このクエリの結果として 0 行があれば、問題ありません。

また、クエリは SQL インジェクションに対して脆弱です (google that)。

于 2012-12-10T15:36:56.417 に答える