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

与其获取所有行,不如只取其中之一。它将节省大量内存。

$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'";

但是,通过这种方式,您可以检查结果而不用担心结果为空,而不是检查结果中的行数。但是同样,由于您的数据库的逻辑是只有一封电子邮件,因此检查其中有多少是没有意义的,因为结果将是 0 或 1 :)

于 2012-09-11T10:45:28.653 回答
0
  1. 确保您的代码没有任何错误
  2. 作为你的条件

    if ( mysql_num_rows ($result) == 1 )

这意味着如果你有更多然后>1重新编码,false所以将其更改为

if ( mysql_num_rows ($result) >0 )
于 2012-09-11T10:43:32.703 回答
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() 来执行此操作。IE:

$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 回答