1

新しいユーザーを作成する前に、入力フィールドのユーザー名と電子メールがデータベースに既に存在するかどうかを確認しようとしました。

これは login.php です:

<?php
session_start();
$pseudo = $_POST['pseudo'];
$mail = $_POST['mail'];

$pseudo=mysql_real_escape_string($pseudo);
$pseudo=ltrim($pseudo);
$pseudo=rtrim($pseudo);

$mail=mysql_real_escape_string($mail);
$mail=trim($mail);

$sql=mysqli_connect('localhost','root','','bdd_name');
$query=("SELECT COUNT(*) FROM t_people WHERE 'PEO_PSEUDO'='".$pseudo."' OR 'PEO_MAIL'='".$mail."'");
$result = mysqli_prepare($sql,$query);

    mysqli_stmt_execute($result);
    mysqli_stmt_store_result($result);

if (mysqli_stmt_num_rows($result) == 0) {
  echo 1;
 }
 else {
 echo 2;
 }
mysqli_stmt_free_result($result);
mysqli_stmt_close($result);
?>

そして、これは私の JavaScript の一部です:

var pseudo=$("#pseudo").val();
var mail=$("#mail").val();
    $.ajax({
        type: "POST",
        url: "login.php",
        data: {pseudo:pseudo, mail:mail}
        }).done(function(result) {
            if (result==1) {
                good();
            }
            else if (result==2) {
                bad();
            }
        });

誰がこれの何が悪いのか教えてもらえますか?

私は何時間も前からこれに取り組んでいますが、私は無知です...

4

2 に答える 2

1

このようにクエリでバックティック演算子を使用してエスケープするために間違った演算子を使用しています

"SELECT COUNT(*) FROM t_people WHERE `PEO_PSEUDO`='".$pseudo."' OR `PEO_MAIL`='".$mail."'"
于 2013-05-05T12:08:07.557 に答える
1

うまくいかないことがいくつかあります。mysql_real_escape_stringを使用している原因を使用しないでくださいmysqli_*mysqli_real_escape_string代わりに使用してください。ただしmysqli_stmt_bind_param、準備済みステートメントを使用しているため、より適切に使用してください。そして、あなたが働くなら、COUNT(*)あなたは常に1行を得ます。

$pseudo = $_POST['pseudo'];
$mail = $_POST['mail'];

$query = "SELECT * FROM t_people WHERE PEO_PSEUDO = ? OR PEO_MAIL = ? LIMIT 1";
$stmt = mysqli_prepare($sql, $query);
mysqli_stmt_bind_param($stmt, 'ss', $pseudo, $mail);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$numRows = mysqli_stmt_num_rows($stmt);
mysqli_stmt_close($stmt);

COUNT(*)(より効率的です)を使用すると、次のようになります。

$query = "SELECT COUNT(*) as numrows FROM t_people WHERE PEO_PSEUDO = ? OR PEO_MAIL = ?";
...
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $numRows);
mysqli_stmt_fetch($stmt);
mysqli_stmt_close($stmt);

// work with $numRows
于 2013-05-05T12:26:42.583 に答える