2015-07-25 3 views
-2

Я сделал страницу, где пользователи могут зарегистрироваться. По какой-то причине, код, который должен проверять, если электронная почта еще не используется. Не работает.Почему мой SQL-запрос всегда возвращает тот же результат?

Вы можете предположить, что соединение с базой данных является хорошим. Как пользователь может зарегистрироваться, когда этот фрагмент отсутствует.

 @ $db = new mysqli('localhost', 'USERAME', 'PASSWORD', 'DATABASE'); 

     if ($db->query("SELECT * FROM members WHERE email = '$email'")) { 
      echo "<p id=\"signup_confirmed\">This e-mail is already in use, please try again with another e-mail.</p>"; 
      exit; 
     } 

редактировать:

Это мой первый раз на этом сайте. Так голый со мной.

Я использовал расширение mysqli, которое поставляется с самой php. Дело в том, что это использовалось для работы над предыдущими версиями. Но по какой-то причине это уже не так.

Код, который я использовал, чтобы проверить, отправил ли запрос более 0 строк, также не работал.

+0

с запятой в 'WHERE электронной = '$ электронной почты',' <= является концом символа заявления для одной вещи; убери это. Кроме того, вам нужно показать нам больше кода. вы ничего не делаете и не получаете важной функции. Вам нужно запрограммировать запрос. Мы также не знаем, с каким MySQL API вы используете для связи. –

+0

ваш 'if()' просто проверяет, был ли ваш запрос успешно выполнен, а не если он возвратил строку. Таким образом, даже возвращенные строки будут приводить к успешному запросу. – Sean

+0

показать объявление этого метода: $ db-> query ( – M0rtiis

ответ

1
if ($db->query("SELECT * FROM members WHERE email = '$email'")) { 

Да правой , который всегда будет возвращать TRUE, если запрос не имеет синтаксических ошибок, и вы подключены к базе данных, даже если строки не возвращаются. Отсюда проблема, с которой вы сталкиваетесь.

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

  1. Выполнение запроса.
  2. Проверьте, не возвращается ли запрос any rows.
+0

Я получаю «Catchable fatal error: Object of class mysqli_result не может быть преобразован в строку», когда я пытаюсь повторить количество строк, которые я получаю. Я посмотрел на ручную ссылку, которую вы отправляете. Все еще дает мне ошибку после копирования кода из – Berkan

+0

Это должно быть в вашем новом коде, как вы его используете. –

0

То, что я бы лично сделать, это определить сообщение об ошибке в качестве переменной, то эхо переменной в HTML:

PHP:

if ($db->query("SELECT * FROM members WHERE email = '$email';")) { 
     $errMsg = 'Email is taken, please use another' 
     exit; 
    } 

HTML:

<h1> <?php echo $errMsg; ?> </h1> 

В этом случае , вы можете использовать elseif для каждой возможной ошибки, такой как «Пароль слишком короткий» и т. д. ... и просто установите ваш $ errMsg = 'x слишком короткий, должно быть от 4 до 16 символов и т. д. ...

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

Кроме того, если вы держите этот скрипт отдельно от HTML, вы можете просто включить этот сценарий проверки, просто помещая это в верхней части HTML документа:

<?php require ' PATH TO SCRIPT '; ?> 
-1

попробовать этот

"SELECT COUNT(*) FROM members WHERE email = '$email'" 
+0

интересный .. ответ сделан, он помогает (несмотря на качество вопроса). Почему downvotes настолько регулярный? :) – M0rtiis

+0

Я могу попытаться дать одну причину, почему этот ответ могут быть проголосованы. Этот запрос ничего не меняет и ничего не помогает. Его все тот же результат для OP, даже если он использует этот запрос. Мы не можем сказать, что имя пользователя не существует, просто проверяя выполнение запроса или нет. Поэтому для ответа нужны другие изменения, а не изменение запроса. Затем OP говорит, что «сделал это для меня», что опять неверно. Это просто невозможно. Поэтому для будущих читателей это может путать их с мыслью, что это решение, когда это не так. Недостаток понимания OP не означает, что он правильный. –

Смежные вопросы