PHP:查询查询电子邮件是否唯一,如果是,则查询将记录添加到数据库

时间:2012-09-11 10:37:11

标签: php mysql

没有经验,所以感谢任何帮助。

我希望构建一个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 个答案:

答案 0 :(得分:2)

不是获取所有行,而是只选择其中一行。它会节省大量内存。

$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:)

答案 1 :(得分:0)

  1. 确保您的代码不会出现任何错误
  2. 作为你的if条件

    if(mysql_num_rows($ result)== 1)

  3. 这意味着如果您有一个>1重新编码false,那么请将其更改为

    if ( mysql_num_rows ($result) >0 )
    

答案 2 :(得分: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']);

答案 3 :(得分: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>