2017-02-19 6 views
0

Я работаю с PHP и mysqli, что делает программа, так это то, что он запрашивает код возврата и адрес электронной почты, если код добавления и сброса электронной почты находится в база данных он устанавливает пароль, эта часть функции работает,Проверьте, успешно ли выполнен запрос на обновление [PHP, mysqli]

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

Что я работаю над:

$uinsert = "UPDATE member SET password = '$password' WHERE emailadd = '$emailadd' AND resetCode = '$resetcode'"; 

    $update = mysqli_query($mysqli, $uinsert) or die(mysqli_error($mysqli)); 

    if(mysqli_affected_rows($update) == 1){ //ifnum 
     header("location: ../index.php"); // Redirecting To Other Page 
    } 
    else{ 
     echo "<script> alert('Incorrect code, try again!');</script>"; 
    } 

Примечание: $ MySQLi моя строка соединения

+1

А что именно ваш вопрос или проблема вы столкнулись с? – JustBaron

+0

Ваш код уязвим для [SQL-инъекций] (https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php). Пожалуйста, начните использовать подготовленные, параметризованные запросы. –

+0

Не связанный с реальным вопросом, но, из любопытства, могу я спросить, откуда взялись переменные '$ password',' $ emailadd' и '$ resetcode'? На вопрос: «Итак, вместо перенаправления вы хотите получить обратную связь для успеха? Затем вместо того, чтобы делать переадресацию, сделайте что-то похожее на javascript ниже. –

ответ

3

«@ Fred-II- Спасибо так много, что работает! - Кофе кодировщик 58 секунд назад»

Использование if(mysqli_affected_rows($mysqli) >0) или нет сравнения вообще

Sidenote: ==1 сравнивает только для 1, в отличие от >0 который вы пытаетесь обновить более одной строки. . Однако и в тех редких случаях, >0 необходимо, где это также случилось со мной раньше, что является причиной моего ответа

affected_rows() использует соединение, а не один для запроса

..

Плюс, если вы храните незашифрованные пароли, используйте password_hash(), так как это намного безопаснее:

Sidenote: Если вы решили переместить перед этой функцией убедитесь, что вы вообще не манипулируете паролем. Хеширование/проверка этого позаботится об этом, и вы можете принести больше вреда, чем пользы, и ограничить пароли.

I.e .: Действующий пароль test'123 будет интерпретирован как test\'123 и рендеринг FALSE при использовании real_escape_string().

Или вы все еще можете использовать hash_hmac как на ваш другой вопрос Comparing/check if correct Password from mysqli database [hash_hmac]

и подготовленное заявление:

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

header("location: ../index.php"); 
exit; 
+2

@ Кофейный кодер Вы обновляете несколько паролей за раз? Вы уверены, что это то, что вы хотите? Я думаю, что это пахнет ложноположительным. Сколько строк вы фактически обновляете? Обеспечение наличия только одного обновления пароля кажется логичным (без всякой необходимой информации, заметьте). – mickmackusa

+1

@mickmackusa Я с тобой. –

+0

@mickmackusa до определенного момента, согласно [комментарию] (http://stackoverflow.com/questions/42327938/check-if-update-query-was-successful-php-mysqli#comment71809118_42327977) Я оставил вас под вашим ответом , и мне интересно, почему вы сейчас это задаете. –

1
if(mysqli_affected_rows($mysqli) == 1){ 

mysqli_affected_rows() не использует запрос $update это использует соединение $mysqli

+0

Спасибо, я пробовал, но это не сработало –

+0

Вы можете написать более подробную информацию о своем? Сообщение об ошибке отсутствует? Успешно ли это в вашем phpmyadmin? Сколько строк затронуто? Нуль? Два? – mickmackusa

+0

Спасибо за помощь. Я решил это, применив то, что @ Fred-ii- сказал –

2

Изменение параметра mysqli_affected_rows(), параметрами должно быть соединение mysql

mysqli_affected_rows($update) 

в

mysqli_affected_rows($mysqli) 

Пожалуйста, смотрите эту ссылку https://www.w3schools.com/php/func_mysqli_affected_rows.asp

+0

Спасибо, я попробовал, но это не сработало –

1

передать свой объект соединения MySQLi ($ подключение) к mysqli_affected_rows (connection_object) для проверки затронутых строк.

connection_object, как - $con=mysqli_connect("localhost","bd_user","db_password","your_db_name");

Таким образом, код будет

if(mysqli_affected_rows($con)== 1){ 
    header("location: ../index.php"); 
} 

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

  • Нет связанных вопросов^_^