2013-08-15 4 views
-1

У меня есть форма, которая требует, чтобы пользователь вводил свой адрес электронной почты, чтобы получить электронное письмо с возвратом пароля. Я пытаюсь сравнить электронную почту с существующими электронными письмами в базе данных перед отправкой электронной почты; если письмо не существует, сценарий не должен отправлять сброс электронной почты. Я читал опубликованные вопросы/ответы и разыгрывал свои мозги в течение нескольких часов, а также менял код, чтобы удалить пустое пространство или настроить синтаксис, но ничто не избавило меня от этого сообщения об ошибке # 1064 ... «Бои отбрасывают ...Проверка, совпадает ли адрес электронной почты пользователя с существующими адресами электронной почты в базе данных

Ошибка, которую я получаю: У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с '@ rocketmail.com' в строке 1 SQL: SELECT customer_id FROM клиента WHERE customer_email = [email protected]

$sql = "SELECT customer_id FROM customer WHERE customer_email = ".$_POST['email']; 
$result = mysqli_query($db, $sql) or die(mysqli_error($db)."<br />SQL: $sql"); 
$num_rows = mysql_num_rows($result); 

if($num_rows < 1) { 
$problem = TRUE; 
$error_message .= '<p class="errorctr">Email was not found in our database.</p>'; 
} 
+2

также, ваш код уязвим для SQL-инъекции, используйте параметризованный запрос (используя myqli prepare или PDO). –

ответ

1

Вы должны заключить строковое значение в кавычки, иначе это, безусловно, будет синтаксической ошибкой, которую вы получите. Ваш синтаксис PHP отлично, MySQL не

$sql = "SELECT customer_id FROM customer WHERE customer_email = '".mysqli_real_escape_string($db,$_POST['email'])."'"; 

Также позже вниз в вашем коде у вас есть mysql_num_rows, которые shuld быть mysqli_num_rows как этот

$num_rows = mysqli_num_rows($result); 
+0

http://php.net/mysqli_real_escape_string В соответствии с этой страницей MAN описание этого параметра является «Только процедурный стиль: идентификатор ссылки, возвращаемый mysqli_connect() или mysqli_init()' –

+1

. Я никогда в жизни не пойму, почему пользователи PHP настолько склонны к количеству строк. –

+0

lol, очень хорошо сказано –

-1

Try This:

  $email = $_POST['email']; 
     $sql = "SELECT customer_id FROM customer WHERE customer_email = '".mysqli_real_escape_string($db,$email)."'"; 
    $result = mysqli_query($db, $sql) or die(mysqli_error($db)."<br />SQL: $sql"); 

    while($row = mysqli_fetch_array($result)){ 

     if(!$row['customer_email']){ 
     echo '<p class="errorctr">Email was not found in our database.</p>'; 
       } 

     } 
+0

er. попробуй что? –

+0

снова здравый смысл? –

0

Говоря из чего вы действительно необходимо попробовать, это PDO:

$sql = "SELECT customer_id FROM customer WHERE customer_email = ?"; 
$stm = $pdo->prepare($sql); 
$stm->execute(array($_POST['email'])); 
$id = $stm->fetchColumn(); 
if(!$id) { 
    ... 
Смежные вопросы