1

電子メールアドレスがデータベースに既に存在するかどうか(Web登録フォーム)をチェックするための以下のコードがあります

ページをロードすると、電子メールが既に存在することが示されます。しかし、それはフォームを処理し続け、同じ電子メールをmysqlデータベースに入力しますか?

電子メール アドレスが既に存在する場合、フォームの送信を停止するにはどうすればよいですか?

以下の私のコード:

$email = $_POST["email"];

$query = mysql_query("SELECT * FROM users WHERE email='$email'");

if(mysql_num_rows($query) != 0)
{
echo "email already exists";
}
4

4 に答える 4

1

フォームを送信する前に、つまりクライアント フォームの検証状態で AJAX チェックを実行することをお勧めします。したがって、ユーザーはフォームを投稿する前に、メールが既に追加されていることを知ることができます...

AJAX ソリューションは次のようになります。

FORM ページに、次のような jQuery 関数があります。

バリデータ プラグインを使用して jQuery を追加します。

<script type="text/javascript" src="/js/jquery.1.7.2.min.js"></script>
<script type="text/javascript" src="/js/jquery.validate.min.js"></script>
<script type="text/javascript">
jQuery.validator.addMethod("emailunique",function(value){
  return eval($.ajax({
    url: 'phptocheckunique.php',
    data: "email="+value,
    type: 'post',
    async: false
  }).responseText);
}, 'Email address already exists, must be unique!');

$(function() {
   $('#yourform').validate();
});
</script>

次に、フォームのメール入力フィールドにクラスを追加します。

<input type="text" name="email" value="" size="30" class="required email emailunique" />

次に、DBをチェックするためだけに別のPHPスクリプトを作成します($ _POST ['email']で投稿されたメールアドレス、上記の関数(しかし安全です!)と同様に、電子メールが既にある場合はTRUEを返します。

phptocheckunique.php:

<?php 
$dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
$sth = $dbh->prepare("SELECT FROM users WHERE email = ?");
$sth->execute(mysql_real_escape_string($_POST['email']));
if ($sth->rowCount() > 0):
   return true;
else:
   return false;
endif;

ただし、この方法を引き続き使用する場合は、最後の if ルーチンに ELSE ステートメントを追加すると、電子メールが一意である場合にのみ人を追加します... また、コードは非常に安全ではないため、PDO の使用を検討する必要があります。

于 2012-09-06T06:32:23.373 に答える
0

あなたはこのように与える必要があります、

if(isset($_POST["email"])
{
$email = $_POST["email"];

$query = mysql_query("SELECT * FROM users WHERE email='$email'");

if(mysql_num_rows($query) != 0)
{
echo "email already exists";
}
}

フォームを送信した後に実行されます。

于 2012-09-06T06:44:02.360 に答える
0

おそらく、フォームの送信をそのまま停止するのではなく、フォームを送信し、(コードのように) チェックを実行し、一致する場合は、エラーとともにユーザーをフォーム ページにリダイレクトします。メールアドレスが既に存在することを知らせるメッセージ。

そうすれば、フォームは送信されますが、電子メール アドレスが一意になるまでデータベースに処理されません。

コードを借用するには:

$email = $_POST["email"];
$query = mysql_query("SELECT * FROM users WHERE email='$email'");
if(mysql_num_rows($query) != 0)
{
    echo "email already exists";
    // redirect back to form and populate with 
    // data that has already been entered by the user
}
else
{
    // insert form contents into the database.
}

その点で、コードはインジェクション攻撃に対してかなり脆弱です。このようなフォーム データを処理する場合は、PDO または mysqli の準備済みステートメントに切り替える必要があります。

于 2012-09-06T06:31:05.217 に答える
0
if(mysql_num_rows($query) != 0)
{
echo "email already exists";
}
else
{
  mysql_query($ur_query);
}

データベースの「INSERT INTO ...」クエリをelse部分に入れるだけです。

于 2012-09-06T06:34:32.290 に答える