Предотвратить дублирование адреса электронной почты в форме регистрации PHP - PullRequest
3 голосов
/ 28 февраля 2012

Я осмотрел доски объявлений, но не могу найти полных ответов. Я использую 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 ]

2 голосов
/ 28 февраля 2012

Проверьте этот код, вам нужно что-то похожее:

// 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 именно то, что вам нужно, и вы не используете в своем коде в настоящее время.

0 голосов
/ 28 февраля 2012

Вы нигде не вызывали функцию 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;
       }

   }
0 голосов
/ 28 февраля 2012
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
}

Это может работать лучше для вас. Мне нужно было бы увидеть больше вашего кода, чтобы помочь вам.

0 голосов
/ 28 февраля 2012

Первое, что вам нужно сделать, это установить в поле адреса электронной почты таблицы базы данных уникальный индекс.

И вы можете использовать следующую функцию, чтобы проверить, доступен ли адрес электронной почты.

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;
}

EDIT

И в соответствии с кодом, который вы указали в http://pastebin.com/bYRvLX94 Эту проверку необходимо выполнить до номера строки 15 $sql.

...