2015-08-16 6 views
0

Я создал базу данных, где хранится идентификатор электронной почты и соответствующее имя и пароль. Я успешно получил данные формы ... где пользователь вводит обновленное имя и пароль. Но проблема встречающаяся с запросом, который является следующимЯвляется ли это заявление о обновлении отсутствующим?

$db = mysqli_connect(all details)... 
$name = $_POST['name']; 
$password = $_POST['password']: 
$email = $_POST['email']; 

$query = "UPDATE mytable SET name='$name',password='$password' WHERE emailid='$email'"; 
$result = mysqli_query($db,$query); 

Хотя я получаю все значения формы succesffuly и до, и если я не поставил «где» clause.It works.But, очевидно, обновляет все значения. я хочу работать с where..but до сих пор безуспешными :(

+1

Таким образом, echo $ query; а затем посмотреть об использовании не устаревшего API, такого как mysqli/PDO, и подготовленных операторов – Strawberry

+0

Установить перед ** $ query ** 'var_dump ($ email); умереть();. Какое значение в ** $ email **? 'В mytable есть это значение в столбце ** emailid **. –

+0

Сервер MySQL отвечает на все запросы, даже если что-то не так. Вам нужно проверить ответ сервера, потому что он точно сообщает, что не так с помощью функции ['mysql_error'] (http://php.net/manual/ro/function.mysql-error.php). –

ответ

-1

Вы должны убедиться, что emailid существует в mytable, вы действительно хотите фильтровать его, и в вашей схеме базы данных он имеет тип, который поддерживает опубликованные данные. Кажется, что вы отправляете строки, например '[email protected]', а ваш emailid - это int или что-то в схеме базы данных. Проверьте это, запустив

desc mytable; 

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

Если все не удается, видеть то, что создается, по вторя из строки запроса, попробуйте запустить что непосредственно увидеть, что ошибка и не исправить, пока ...

... до тех пор, пока не будет устранена.

Кроме того, вы не шифруете пароль, и ваш код также уязвим для SQL-инъекции. Пожалуйста, прочтите о password encryption и SQL injection, а затем защитите свой проект от этих опасностей.

+0

Вместо того, чтобы вслепую попробовать разные вещи, которые «могут или не могут решить проблему», не лучше ли исследовать, в чем проблема? –

+0

Спрашивание сервера MySQL «почему вы вернули false в мой последний запрос» всегда работает, сервер MySQL скажет вам, что «вы использовали столбец, который я не знаю», или «вы использовали таблицу, о которой я не знаю», или «в вашем запросе есть синтаксическая ошибка». –

+0

эй, спасибо. Хотя фигурные скобки не помогли, но ваша идея печати вопроса была полезной .. n это успешно сейчас :) – Lincoln

0

вам нужно положить {} вокруг переменных, если его окружают цитатой «»

так что ваш запрос должен выглядеть следующим образом

$query = "UPDATE mytable SET name='{$name}',password='{$password}' WHERE emailid='{$email}'"; 
$result = mysqli_query($db,$query); 

EDIT: также перед сохранением данных в базу данных убедитесь, что для фильтрации и проверки данных

+0

Нет необходимости в фигурных скобках, когда переменные окружены кавычками. Скобки полезны, когда у вас есть буквы непосредственно после имени переменной (и имя переменной может быть неверно истолковано). –

+0

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

+0

Он не работал с предложением where, потому что идентификатор электронной почты не сопоставляется ....Поместив {} фигурные скобки правильное значение для электронной почты передано @mihai – user3091574

-1

Вы можете написать свое заявление как:

$ query = "UPDATE mytable SET name = '". $ Name. "', Password = '". $ Password. "' WHERE emailid = '". $ Email. "' «;

используя. как оператор конкатенации строк

+0

попробовал это .. но не работает – Lincoln

+0

Я также предпочитаю конкатенацию, потому что цель кода более понятная и легкая для отладки. В таких случаях, как выше, где у вас есть много элементов для объединения 'sprintf', было бы гораздо удобнее использовать. –

+0

С другой стороны, использование подготовленных операторов выглядит и выглядит как 'sprintf', но имеет гораздо больше преимуществ, таких как защита от SQL-инъекций. –

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