Застрял в PHP-запросе

Я создал страницу, которая позволяет пользователям изменять свой пароль и электронную почту. Все это работает, но по какой-то причине, когда я просто хочу изменить свой адрес электронной почты, я также получаю поле Current Password is wrong .

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

введите описание изображения здесь

Мой код:

<title>Honda |</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <link href='http://fonts.googleapis.com/css?family=Julius+Sans+One' rel='stylesheet' type='text/css'> <link href="../css/style.css" rel="stylesheet" type="text/css" media="all" /> <?php session_start(); $username = $_SESSION['sess_user']; echo '<div class="search1"><h2>'.$username.'</h2><div class="search12"><h2><a href="index2.php">Home</a></h2></p></div></div>'; if (isset($_SESSION['sess_user'])) { //user is logged in if (isset($_POST['submit'])) { //start changing password //check fields $oldpassword = md5($_POST['oldpassword']); $newpassword = md5($_POST['newpassword']); $email = $_POST['email']; $repeatnewpassword = md5($_POST['repeatnewpassword']); //check password against db include('../includes/config.php'); $queryget = mysql_query("SELECT password FROM login WHERE username='$username'") or die ("change password failed"); $row = mysql_fetch_assoc($queryget); $oldpassworddb = $row['password']; //check passwords if ($oldpassword==$oldpassworddb) { if (isset($_POST['repeatnewpassword']) AND isset($_POST['newpassword']) AND $_POST['newpassword'] != '') { if ($newpassword==$repeatnewpassword) { $querychange = mysql_query("UPDATE login SET password='$newpassword' WHERE username='$username'"); echo "<div class='successmate'><br><br><br><br><hr>Password has been changed!</hr></div><div class='successmate'><br><hr><br><h2><p><a href='index2.php'><br><br></a></p></h2></div>"; } else {echo "<div class='results'>new password(s) dont match</div><div class='successmate'><br><br><h2><p><a href='changepassword.php'>try again?</a></p></h2></div>";} } } else {echo "<div class='results'>current password doesnt match</div><div class='successmate'><h2><p><a href='changepassword.php'><br><br>Try again?</a></p></h2></div>";} if (isset($_POST['email']) AND $_POST['email'] != '') { $querychange = mysql_query("UPDATE login SET email='$email' WHERE username='$username'"); echo "<div class='successmate'><br><br><br><br><hr>Your email has been changed</hr></div><div class='successmate'><br><hr><br><h2><p><a href='index2.php'><br><br></a></p></h2></div>"; }} else { echo" <form class='search1' action='changepassword.php' method='POST'> <label>Current Password:</label> <input type='password' id='password' name='oldpassword'><p> <label>New Password:</label> <input type='password' id='password' name='newpassword'><p> <label>Repeat New Password:</label> <input type='password' name='repeatnewpassword'><p> <label>Email:</label> <input type='email' name='email'><p> <input type='submit' name='submit' class='submit' value='submit'><br><br><br> <h2><p><a href='index2.php'>Back</a></p></h2> </form> "; }} else die ("You must be logged in to change your password"); ?> <img src="../images/main.jpg"> 

Вы проверяете, что значения post заданы для пароля (который они всегда будут, потому что этот элемент формы всегда будет отправлен). Вместо того, чтобы просто проверять, установлены ли эти значения, убедитесь, что он не пуст. use empty () Кроме того, при проведении сравнений не используйте слово «AND», используйте оператор «&&».

  if (!empty($_POST['repeatnewpassword']) && !empty($_POST['newpassword'])) { if ($newpassword==$repeatnewpassword) { $querychange = mysql_query("UPDATE login SET password='$newpassword' WHERE username='$username'"); echo "<div class='successmate'><br><br><br><br><hr>Password has been changed!</hr></div><div class='successmate'><br><hr><br><h2><p><a href='index2.php'><br><br></a></p></h2></div>"; } else {echo "<div class='results'>new password(s) dont match</div><div class='successmate'><br><br><h2><p><a href='changepassword.php'>try again?</a></p></h2></div>";} } 

Я смотрю на неправильный кусок кода. Вышеупомянутый совет – хороший совет, но ваша проблема здесь:

Если поля пароля пустые, то они никогда не будут одинаковыми, поэтому if ($oldpassword==$oldpassworddb) всегда будет оценивать значение false.

Пытаться

 if ($oldpassword==$oldpassworddb && !empty($_POST['oldpassword'])) 

Ваш запрос, вероятно, выплескивает массив. Попробуйте сделать print_r($row) и проанализировать вывод. У меня такое чувство, что вы получаете ассоциативный массив здесь, и вам нужно получить доступ к старому паролю по-разному. Поместите print_r после этой строки:

 $row = mysql_fetch_assoc($queryget); 

Ответ, вероятно, $row[0]['password'];

Кроме того, не используйте MD5 для хеширования, используйте Scrypt или что-то подобное с солью и, возможно, перцем .