2

経験がないので、助けてください。

ユーザーの登録に一意のメールアドレスがあることを確認するためにPHPを構築しようとしています。一意の場合は、SQLデータベースに追加し、それぞれの値をエコーアウトします。

これは私が持っているものです-電子メールアドレスが重複している場合はエコー値が生成されますが、エコー値は生成されず、一意の場合はデータベースが更新されません。

<?php
$email= $_GET["email"];
$firstname = $_GET["firstname"];
$lastname = $_GET["lastname"];

$con = mysql_connect("user","db","pass");
mysql_select_db("db");

$query1 = "SELECT * FROM `db` WHERE `Email` = '$email'";

$result = mysql_query($query1);



if ( mysql_num_rows ($result) == 1 )
{$value="Already registered";

}
else
{
 mysql_query("INSERT INTO db (Email, FirstName, LastName) VALUES ('$email','$firstname','$lastname')");
mysql_close($con);

$value="Confirmed";


}

echo $value;
4

4 に答える 4

1

すべての行を取得する代わりに、このように 1 つだけ取得します。それは多くのメモリを節約します。

$query1 = "SELECT 1 FROM `db` WHERE `Email` = '$email' LIMIT 1";

次に、次の行

if ( mysql_num_rows ($result) == 1 )

論理的に正しいでしょう。それ以外の場合、データベースに 2 つ以上のレコードがある場合、結果は false になります。私の修正では、これifは論理的になります。

他の解決策は行数を選択することですが、電子メールはデータベース内で一意であるため、次のようなことをしても意味がありません

$query1 = "SELECT COUNT(*) FROM `db` WHERE `Email` = '$email'";

ただし、この方法では、結果の行数をチェックする代わりに、結果が空であることを恐れずに結果をチェックできます。しかし、繰り返しますが、データベースのロジックは 1 つの電子メールを 1 回だけ持つことであるため、結果が 0 または 1 になるため、電子メールの数を確認しても意味がありません :)

于 2012-09-11T10:45:28.653 に答える
0
$query1 = mysql_query("SELECT COUNT(*) AS num FROM `db` WHERE `Email` = '$email'");
$result = mysql_fetch_assoc($query1);

if ($result['num'] == 1)
{
   // already registered
}
else
{

}

また、SQLインジェクションを完全に忘れています。ユーザーが指定したすべての値がデータベースを安全に実行できることを確認する必要があります。これは、mysql_real_escape_string()を使用して実行できます。すなわち:

$email = mysql_real_escape_string($_GET['email']);
于 2012-09-11T10:50:52.730 に答える
0

この問題を解決するには、Ajax を使用します。

php check_email.php

$email= $_POST["email"];
$firstname = $_GET["firstname"];
$lastname = $_GET["lastname"];
...
$query1 = "SELECT * FROM `db` WHERE `Email` = '$email'";
$result = mysql_query($query1);
if (mysql_num_rows ($result)){
  echo "yes";
} else {
  mysql_query("INSERT INTO db (Email, FirstName, LastName) VALUES ('$email','$firstname','$lastname')");
  echo "no";
}

HTML :

    <form method="post" action=""/>
      <input name="email" type="text" id="email" value=""/>
      <input name="firstname" type="text" id="firstname" value=""/>
      <input name="lastname" type="text" id="lastname" value=""/>
      <input name="Submit" type="button" id="submit" value="Go"/>
      <div id="msg"></div>
    </form>
    <!--load latest version of jquery-->
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
    <script>
    //JS (use jquery):
    $("#submit").click(function () {
        $.ajax({
          type: "POST",
          url: "check_email.php",
          dataType: "text",
          //send data to php
          data: {email:$("#email").val(),firstname:$("#firstname").val(),lastname:$("#lastname").val()},
          //get answers
          success: function (response) {
            if(responce=="yes") $("#msg").html("email exists!")
            else if (responce=="no") $("#msg").html("Email was successfully added to the database!")
          },
          error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.status);
            alert(thrownError);
          }
        });
    });
</script>
于 2012-09-11T10:58:12.257 に答える
0
  1. コードでエラーが発生しないことを確認してください
  2. あなたのif条件として

    if ( mysql_num_rows ($result) == 1 )

つまり、より多くのものがあり、それを>1再コード化した場合は、次のfalseように変更します

if ( mysql_num_rows ($result) >0 )
于 2012-09-11T10:43:32.703 に答える