Intereting Posts
Как проверить Google reCaptcha в форме Submit JQuery: Как я могу объединить два объекта данных json и опубликовать их? Убедитесь, что значение iset и null Как получить последние видео с нескольких каналов Youtube в одном API-интерфейсе Symfony2 REST API – частичное обновление Как Doctrine 2 извлекает объекты без вызова конструктора объекта? Вызов неопределенной функции curl_init () ошибка с WAMP SilverStripe сохраняет данные во внешней таблице Преобразование (doublebyte) строки в шестнадцатеричный Как изменить имя изображения, которое загружается на мой сервер? Почему этот вызов PHP для json_encode бесшумно терпит неудачу – неспособность обрабатывать одиночные кавычки? Разделить массив дат в зависимости от месяца или года Преобразование национальных символов в их латинские эквиваленты в PHP проблемы с регулярными выражениями Google OAuth 2.0 обновляет токен для веб-приложения с открытым доступом

позволить пользователю изменить свой собственный пароль?

Я только начинаю изучать php и sql, поэтому, пожалуйста, успокойся, я знаю, что в некоторых местах я ошибаюсь. Я пытаюсь разрешить пользователю входить в систему и изменять свой пароль. Я сделал попытку сценария, который, как я считаю, должен работать, но я думаю, что я делаю что-то не так, поскольку он просто свяжется с страницей функций php и вообще не изменяет пароль. Вот мой сценарий:

Форма HTML:

<form method="POST" action="includes/changepassword.php"> <p><input type="password" name="oldpasswd" id="oldpasswd" maxlength="30" placeholder="Old Password"></p> <p><input type="password" name="newpsswd1" id="newpsswd1" maxlength="30" placeholder="New Password"></p> <p><input type="password" name="newpsswd2" id="newpsswd2"maxlength="30" placeholder="Confirm Password"></p> <input type="submit" name="submit" id="submit" value="change password"> 

Файл changepassword.php:

  <?php require_once("session.php"); require_once("functions.php"); require('_config/connection.php'); function changepassword ($oldpasswd, $newpasswd1, $newpasswd2) { /* * RETURNS * 0 - if password changed * 1 - if new passwords are not equal * 2 - if user authentification problems */ $oldpasswd = ($_POST['oldpasswd']); $newpasswd1 = ($_POST['newpasswd1']); $newpasswd1 = ($_POST['newpasswd2']); if ($newpasswd1 != $newpasswd2) { return 1; } //check user logged in changes OWN passwd $sql = "SELECT password FROM ptb_users WHERE id = ".$_SESSION['user_id']; $result = mysql_query($sql)or die('User not found: ' . mysql_error()); if (md5($oldpasswd)==$result) { //Encrypt $emailpassword in MD5 format for the database $md5_np=md5($newpasswd1); // Make a safe query $query = sprintf("UPDATE `ptb_users` SET `password` = '%s' WHERE `id` = ".$_SESSION['user_id'], mysql_real_escape_string($md5_np)); mysql_query($query)or die('Could not update password: ' . mysql_error()); return 0; } else { return 2; } } ?> 

Что я сделал не так?

он будет просто ссылаться на страницу функций php и вообще не изменять пароль

Вы сказали HTML-форме, чтобы сделать именно это: <form method="POST" action="includes/changepassword.php"> . Но, с другой стороны, вы никогда не называете свою функцию.

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

 echo changepassword($_POST['oldpasswd'], $_POST['newpasswd1'], $_POST['newpasswd2']); 

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

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

 //check user logged in changes OWN passwd $sql = "SELECT password FROM ptb_users WHERE id = ".$_SESSION['user_id']; $result = mysql_query($sql)or die('User not found: ' . mysql_error()); if (md5($oldpasswd)==$result) { 

Вы напрямую используете результат функции mysql_query (), которая фактически возвращается как ресурс, а не значение.

Вам необходимо будет обновить код:

 //check user logged in changes OWN passwd $sql = "SELECT password FROM ptb_users WHERE id = ".$_SESSION['user_id']; $result = mysql_query($sql)or die('User not found: ' . mysql_error()); $row=mysql_fetch_assoc($result); if (md5($oldpasswd)==$row['password']) { 

См. Эту функцию – mysql_fetch_assoc () .

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

formchangepassword.html

 <form action="formchangepassword.html" method="post"> 

В начале формы обычно есть код, который решает, была ли форма вызвана с post (после нажатия кнопки), или если она была вызвана с get . В этом коде вы можете вызвать функцию, которую вы написали в файле CHANGEPASSWORD.PHP. Этот файл является только библиотекой, он содержит функции, вы можете вызвать эту функцию, но они не запускают себя, их нужно вызывать.

 <?php require_once("CHANGEPASSWORD.PHP"); if(count($_POST) > 0) { // button was clicked, do what is necessary changepassword(...); ... } ?> <form action="formchangepassword.html" method="post"> ... </form> 

Имя полей формы не соответствует тому, что указано в файле changepassword.php. Вам не хватает «а» в том, что должно быть «newpasswd1» и «newpasswd2» – name=newpsswd1 должно быть newpasswd1 и т. Д.

Также вы дважды указываете «newpasswd1»

  $oldpasswd = ($_POST['oldpasswd']); $newpasswd**1** = ($_POST['newpasswd1']); $newpasswd**1** = ($_POST['newpasswd2']); 

… Я думаю, вы, вероятно, имели в виду это …

  $oldpasswd = ($_POST['oldpasswd']); $newpasswd**1** = ($_POST['newpasswd1']); $newpasswd**2** = ($_POST['newpasswd2']); 

Я также включил изменения, предложенные Пастором Боунсом и Абхишеком Бхатой, и теперь он отлично работает. (Также я закрываю тег формы для HTML)

Вот что все должно выглядеть (как изменено для моего сайта):

HTML-форма

 <form method="POST" action="changepassword.php"> <p><input type="password" name="oldpasswd" id="oldpasswd" maxlength="30" placeholder="Old Password"></p> <p><input type="password" name="newpasswd1" id="newpasswd1" maxlength="30" placeholder="New Password"></p> <p><input type="password" name="newpasswd2" id="newpasswd2"maxlength="30" placeholder="Confirm Password"></p> <input type="submit" name="submit" id="submit" value="change password"> </form> 

changepassword.php

 function changepassword ($oldpasswd, $newpasswd1, $newpasswd2) { $oldpasswd = ($_POST['oldpasswd']); $newpasswd1 = ($_POST['newpasswd1']); $newpasswd2 = ($_POST['newpasswd2']); if ($newpasswd1 != $newpasswd2) { return 1; } $sql = "SELECT Password FROM users WHERE UserID = ".$_SESSION['UserId']; $result = mysql_query($sql)or die('User not found: ' . mysql_error()); $row=mysql_fetch_assoc($result); if (md5($oldpasswd)==$row['Password']) { $md5_np=md5($newpasswd1); $query = sprintf("UPDATE `users` SET `Password` = '%s' WHERE `UserID` ".$_SESSION['UserId'],mysql_real_escape_string($md5_np)); mysql_query($query)or die('Could not update password: ' . mysql_error()); return 0; } else { return 2; } } echo changepassword($_POST['oldpasswd'], $_POST['newpasswd1'], $_POST['newpasswd2']);