在PHP注册表单中防止重复的电子邮件地址

时间:2012-02-28 02:02:17

标签: php mysql forms duplicate-data

我环顾了一下董事会,但我找不到完整的答案。我正在使用PHP和MySQL来创建和管理志愿者注册表单。

我需要确保没有重复的电子邮件地址(电子邮件密钥是独一无二的)

这是我正在使用的代码,但是我需要帮助来理解放置函数的位置,因为我还使用check_input去除斜杠等。

结果是使用重复电子邮件的测试条目不会发布到数据库,但是在流程页面上它仍然向用户提供确认而不是错误。

以下代码位于process.php页面上,在数据库连接PHP和INSERT代码之后:

      <?php

  function createUser($email)
  {
       $sql = "SELECT * FROM vols2012 WHERE email='$email'" ;

       $result = mysql_query( $sql ) ;

       if( mysql_num_rows( $result ) > 0 )
       {
   die( "There is already a user with that email!" ) ;
       }//end if


  function check_input($data, $problem='')
  {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      if ($problem && strlen($data) == 0)
      {
          show_error($problem);
      }
      return $data;
  }

  function show_error($myError)
  {

  }

  ?>

4 个答案:

答案 0 :(得分:2)

检查此代码,您需要类似的东西:

// Code of your database connection here

function checkEmail($email) {
    $email = mysql_real_escape_string($email);

    $sql = mysql_query("SELECT * FROM vols2012 WHERE email='$email'");

    if (mysql_num_rows($sql) == 0) {
        return true;
    }

    return false;
}

if (checkEmail($_POST['email'])) {
    // Continue insert
} else {
    // Warning for e-mail already exists
}

使用checkEmail的验证正是您所需要的,当前不在代码中使用。

答案 1 :(得分:0)

您要做的第一件事是将数据库表的电子邮件地址字段设置为唯一索引。

您可以使用以下类型的功能来检查电子邮件地址是否已经可用。

function isAvailable($email)
  {
       $sql = "SELECT email FROM vols2012 WHERE email='$email'" ;

       $result = mysql_query( $sql ) ;

       if( mysql_num_rows( $result ) > 0 )
       {
            return true;
       }
       return false;
}

修改

根据您在http://pastebin.com/bYRvLX94处放置的代码,此验证需要在第15行$sql之前完成。

答案 2 :(得分:0)

function createUser($email){
   $sql = "SELECT count(email) FROM vols2012 WHERE email='$email'" ;

   $result = mysql_result(mysql_query($sql),0) ;

   if( $result > 0 ){
    die( "There is already a user with that email!" ) ;
   }//end if
}

这可能对您更有效。我需要查看更多代码以进一步帮助您。

答案 3 :(得分:0)

您没有在代码中的任何位置调用createUser函数。我认为这个会有所帮助:

function check_input($data, $problem='')
  {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      if ($problem && strlen($data) == 0)
      {
          show_error($problem);
      }
      else
      {
         if(createUser($data))
         {
           //insert in database
         }
         else
         {
           die('Email already exists');
         }
      }
  }


function createUser($email)
  {
       $sql = "SELECT * FROM vols2012 WHERE email='$email'" ;

       $result = mysql_query( $sql ) ;

       if( mysql_num_rows( $result ) > 0 )
       {
          return false;
       }
       else
       {
          return true;
       }

   }