0

ユーザーがデータベースに存在するかどうかを確認するサインアップフォームを作成しようとしています。サンプルユーザーを挿入しましたが、そのユーザーでサインアップしようとすると、既に使用されているとは表示されませんでした。私は何を間違えましたか?

JavaScript:

function formSubmit()
    {
    document.getElementById('email_valid').innerHTML = '';

    var temail=document.forms["signup_form"]["temail"].value.replace(/^\s+|\s+$/g, '');


      var atpos=temail.indexOf("@");
        var dotpos=temail.lastIndexOf(".");
        if (atpos<1 || dotpos<atpos+2 || dotpos+2>=temail.length)
          {
          //alert("Not a valid e-mail address");
          setTimeout(function(){document.getElementById('email_valid').innerHTML = '<br/>Email must be valid...';},1000);
          var temailsub=0;
          }
          else
          {
          $.post('/resources/forms/signup/email.php',{email: temail}, function(data){
            document.getElementById('email_valid').innetHTML = data;
            if(data.exists){
                    document.getElementById('email_valid').innetHTML = '<br/>The email address you entered is already in use.';
                    var temailsub=0;
                }else{
                    var temailsub=1;
                }
            }, 'JSON');
          }
    if(temailsub==1e)
      {
        setTimeout(function(){document.getElementById("signup_form").submit();},1000);
      }
      else
      {

        return false;
      }
    }

PHPファイル(email.php):

<?php
header('content-type: text/json');
require_once $_SERVER['DOCUMENT_ROOT']."/resources/settings.php";
$query = $pdo->prepare("SELECT * FROM users WHERE email=:email");
$query->execute(array(
    ":email"=> $_POST['email']
));
echo json_encode(array('exists' => $query->rowCount() > 0));
?>

コードを確認して再確認しましたが、電子メールがすでに使用されていることを検出しない理由がまだわかりません...これを修正して将来これを回避するにはどうすればよいですか?

4

1 に答える 1

2

問題は、PDOStatement :: rowCount()が最後のSQLステートメントの影響を受けた行数を返すことです。実行しているSELECTので、この値は常にになります0SELECT行には影響しません。代わりに、行数を数える必要があります。

$query = $pdo->prepare("SELECT COUNT(*) FROM users WHERE email=:email");
$query->execute(array(
    ":email"=> $_POST['email']
));
$rows = $query->fetchColumn();

echo json_encode(array('exists' => $rows);

また、上記のjthemanのコメントから、JavaScriptinnetHTMLinnerHTMLに置き換える必要があります。

于 2012-12-03T23:31:37.103 に答える