【问题标题】:PHP: looking to query if email is unique, then if so, query to add the record to databasePHP:查询电子邮件是否唯一,如果是,则查询以将记录添加到数据库
【发布时间】:2012-09-11 10:37:10
【问题描述】:

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

我希望构建一个 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;

【问题讨论】:

标签: php mysql


【解决方案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 :)

【讨论】:

  • 理解逻辑,有道理。 Aciu...;)
  • 如果这有帮助,请投票并标记为答案 :) Prašom :)
【解决方案2】:
  1. 确保您的代码没有任何错误
  2. 作为你的 if 条件

    如果 (mysql_num_rows ($result) == 1)

这意味着如果您有更多 &gt;1 重新编码它 false 所以将其更改为

if ( mysql_num_rows ($result) >0 )

【讨论】:

    【解决方案3】:
    $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']);
    

    【讨论】:

      【解决方案4】:

      为了解决这个问题,我会使用 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>
      

      【讨论】:

      • 在成功之前一直运行良好:函数(响应)。由于某种原因,无法将回显响应转换为#msg div。并修复了从响应到响应的错字。
      • 对不起,你需要写$_POST["firstname"]而不是$_GET["firstname"]$_POST"lastname"]而不是$_GET["lastname"]
      • 你也可以在success: function (response) {...之后写alert(response)来看看php返回什么...
      猜你喜欢
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 2014-04-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      相关资源
      最近更新 更多