Ошибка со скриптом смены пароля в PHP

Я создал PHP-скрипт, который позволяет пользователю на моем веб-сайте изменять свой пароль после регистрации, но при попытке открыть его на сайте появляется ошибка. Я полагаю, что это связано с синтаксической ошибкой с моей стороны, но я не могу определить ее. Может кто-нибудь взглянуть и посмотреть, что вы можете найти? Вот сценарий:

<?php

session_start();

$user = $_SESSION['username'];

if ($user)
{
//user is logged in

if ($_POST['submit'])
{
//start changing password
//check fields

$oldpassword = md5($_POST['oldpassword']);
$newpassword = md5($_POST['newpassword']);
$repeatnewpassword = md5($_POST['repeatnewpassword']);

//check password against db
include('connection.php');

$queryget = mysql_query("SELECT password FROM Users WHERE username='$user'") or die ("change password failed");
$row = mysql_fetch_assoc($queryget);
$oldpassworddb = $row['password'];

//check passwords
if ($oldpassword==$oldpassworddb)
{
//check two new passwords
if ($newpassword==$repeatnewpassword)
{
//successs
//change password in db

$querychange = mysql_query("UPDATE Users SET password='$newpassword' WHERE   username='$user'");
session_destroy();
die("Your password has been changed. <a href='homepage.php'> Return</a>");
}
else 
die("Old password doesn't match!");
}
else

echo"
<form action='changepassword.php' method='POST'>
Old Password: <input type='text' name='oldpassword'><p>
New Password: <input type='password' name='newpassword'><p>
Repeat New Password: <input type='password' name='repeatnewpassword'><p>
<input type='submit' name ='submit' value='submit'>
</form>
";
 }
 else 
die ("You must be logged in to change your password");
}
 ?>

Я получаю следующую ошибку:

Примечание: неопределенный индекс: отправьте в /var/www/localhost/htdocs/changepassword.php в строке 11. Вы должны войти в систему, чтобы изменить свой пароль.

Заранее спасибо за помощь.

2 ответа

Решение

Ну, во-первых, вы должны заметить, что mysql устарел, вместо этого использовать mysqli или PDO. Дополнительная информация или, как указывал NullPointer, более полезная информация:)

измените конец своего кода следующим образом, чтобы получить правильные результаты, которые вы хотите получить в случае неудачи:

 }else 
die ("Nothing came from the $_POST variable");

}else 
die ("You must be logged in to change your password");

Ошибка, которую вы получаете, может быть из-за того, что ваша переменная $_POST не установлена, используйте isset(), чтобы проверить, было ли установлено значение $_POST.example:

if (isset($_POST['submit']))
{
//submit post was set 
}else
{
//submit post wasn´t set
}

Если вы все еще не получаете никакой ценности, проверьте свою форму.

ОБНОВИТЬ:

чтобы увидеть фактическую форму, вы должны завершить isset до того, как форма вашего кода останется такой:

<?php
session_start();

$user = $_SESSION['username'];

if (isset($_SESSION['username']))
{
//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('connection.php');

$queryget = mysql_query("SELECT password FROM Users WHERE username='$user'") or die ("change password failed");
$row = mysql_fetch_assoc($queryget);
$oldpassworddb = $row['password'];

//check passwords
if ($oldpassword==$oldpassworddb)
{
//check two new passwords
if ($newpassword==$repeatnewpassword)
{
//successs
//change password in db

$querychange = mysql_query("UPDATE Users SET password='$newpassword' WHERE   username='$user'");
session_destroy();
die("Your password has been changed. <a href='homepage.php'> Return</a>");
}
else 
die("New password doesn't match!");

}else 
die("Old password doesn't match!");

}
else
{

echo"
<form action='changepassword.php' method='POST'>
Old Password: <input type='text' name='oldpassword'><p>
New Password: <input type='password' name='newpassword'><p>
Repeat New Password: <input type='password' name='repeatnewpassword'><p>
<input type='submit' name ='submit' value='submit'>
</form>
";
 }

 }else 
die ("You must be logged in to change your password");


?>

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

$user = $_SESSION['username'];

echo 'Here it shold show the user: '.$user.'';

если это не покажет, что вы не передали значение сеанса правильно.

Еще одна вещь, если ваша форма указывает на ту же страницу, вот как она выглядит, измените вашу строку на эту строку:

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, "utf-8");?>" method='POST'>

Ваша входная HTML-форма содержит дополнительный пробел

<input type='submit' name ='submit' value='submit'>

Измените это на

<input type='submit' name='submit' value='submit'>

Вы также должны убедиться,

   if (isset($_POST['submit']))
Другие вопросы по тегам