Я в основном заполнил форму смены пароля. У меня только одна проблема. Когда пользователь хочет изменить свой пароль, он запрашивает «Текущий пароль», «Новый пароль» и «Новый пароль еще раз». Итак, вот моя ошибка: когда я вхожу в «Текущий пароль», и он прав в базе данных, а затем я попал в submit, ничего не появляется в «ошибках», если вы это сделаете. Я хочу, чтобы это в основном показывают: 'Пожалуйста, заполните всю форму'PHP if else echo issue
Изображение 1:
Изображение 2:
На изображении 2 должно отображаться при home 'Пожалуйста, заполните формуляр'
Это мой код:
<?php
session_start();
$username = $_SESSION['sess_user'];
echo '<div class="search1"><h2>'.$username.'</h2><div class="search12"><h2><a href="index.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']);
$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 && !empty($_POST['oldpassword']))
else {echo "<div class='results'>Please fill out the whole form</div><div class='successmate'><h2><p><a href='changepassword.php'><br><br></a></p></h2></div>";}
{
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' required><p>
<label>New Password:*</label> <input type='password' id='password' name='newpassword'><p>
<label>Repeat New Password:*</label> <input type='password' name='repeatnewpassword'><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");
?>
«MD5» криптографически сломан. Посмотрите на использование 'password_hash()', доступного в PHP 5.5+. Там есть прокладка, которую вы можете использовать и для более ранних версий. –
@MikeW Спасибо, я загляну в него :) – Sarah
Человек это трудно читать. Во-первых, почему вы проверяете, является ли md5 oldpassword == md5 в db и их, является ли oldpassword «пустым»? Также почему вы предполагаете, что существует sess_user, сбрасывая результаты (приводя к возможному вектору атаки XSS), а затем проверяя, является ли он пустым? Кроме того, почему вы вводите имя пользователя (вслепую из сеанса), не избегая его вообще в SQL-инструкции, что приводит к уязвимости SQL-инъекции? Я серьезно пытался выяснить, что вы делаете, чтобы ответить на ваш реальный вопрос, но это беспорядок, чтобы пройти. –