【问题标题】:How to avoid duplicate input and empty input?如何避免重复输入和空输入?
【发布时间】:2014-02-18 11:15:25
【问题描述】:

这将是我的一段代码。

$name = $_POST['UserNames'];
$pw = sha1($_POST['Passwords']);
$mail = $_POST['Emails'];
$pc = $_POST['Postcodes'];
$status = "0";
mysql_query("INSERT INTO userinfo 
               (Username,Password,Email,Postcode,status,valid) 
               VALUES 
               ('$name','$pw','$mail','$pc','$status','$validate')
");

我如何确保每个输入都不会为空,并且电子邮件永远不会重复。

【问题讨论】:

标签: php sql


【解决方案1】:

试试这个,

mysql_query("INSERT INTO userinfo (Username,Password,Email,Postcode,status,valid) VALUES ('$name','$pw','$mail','$pc','$status','$validate')  ON DUPLICATE KEY UPDATE status='0'");

更多详情请参考https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

【讨论】:

    【解决方案2】:

    对帖子字段使用empty 函数来检查它是否包含某些内容。

    对于电子邮件,您必须在数据库中为此字段使用 UNIQUE 子句

    【讨论】:

      【解决方案3】:

      关于email:设置userinfo表中Email的列唯一,在insert just do on duplicate ignore上

      关于字段,按照您的工作方式,只需执行 isset($_POST['XXX']) && !empty($_POST['XXX'])。更好的方法是使用一些输入验证类,like this one。

      【讨论】:

        【解决方案4】:

        对于空输入,您可以执行以下操作:

        $name = (isset($_POST['UserNames']) && !empty($_POST['UserNames'])) ? $_POST['UserNames'] : FALSE;
        

        对于重复电子邮件检查,您需要在执行 INSERT 语句之前执行 SELECT 查询。

        【讨论】:

          【解决方案5】:

          mysql查询前先检查值:

          $valid = true;
          foreach($_POST AS $key=>$value)
          {
             if($value == null){
                 echo "Please provide ".$key;
                 $valid = false;
             }
          }
          if($valid == true)
          {
              // check if email is in DB
              $result = mysql_query("SELECT email FROM user info WHERE Email = '".addslashes($_POST['email'])."'");
              if(mysql_num_rows($result) == 1)
              {
                 echo "Email is already registered in our DB";
              }
              else
              {
                 mysql_query("INSERT INTO userinfo (Username,Password,Email,Postcode,status,valid) VALUES ('$name','$pw','$mail','$pc','$status','$validate')");
              }
          }
          

          【讨论】:

          • select email 的查询方式不对。正确的方法是将电子邮件列设置为唯一。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-17
          • 2013-09-05
          • 2017-02-12
          • 2021-07-27
          • 2015-04-25
          • 1970-01-01
          相关资源
          最近更新 更多