Сообщение об ошибке при смене пароля с помощью php
Я использовал скрипт для моего пользователя, чтобы изменить свой пароль при входе в систему, и когда я проверял его, я показал это сообщение об ошибке
Примечание: неопределенный индекс: имя пользователя в /home/www/sitename/directory/changepw.php в строке 8 Примечание: неопределенный индекс: введите /home/www/sitename/directory/changepw.php в строке 9 Примечание: неопределенный индекс: newpassword в /home/www/sitename/directory/changepw.php в строке 10 Примечание: неопределенный индекс: repeatnewpassword в /home/www/sitename/directory/changepw.php в строке 11
Это то, что я имею в строке 8,9,10 и 11
$username = $_POST['username'];
$pin = $_POST['pin'];
$newpassword = $_POST['newpassword'];
$repeatnewpassword = $_POST['repeatnewpassword'];
это мой HTML код ниже
<style type="text/css">
a:link {
text-decoration: none;
}
a:visited {
text-decoration: none;
}
a:hover {
text-decoration: none;
}
a:active {
text-decoration: none;
}
</style>
<div id="inlogscherm">
<form name="form1" method="post" action="changepw.php">
<div class="textm">Change password</div><br>
<div class="text">Username:</div><div class="invulbalkje"><? echo "{$_SESSION['username']}"; ?></div><br />
<input name="username" type="text" id="username" value="<? echo "{$_SESSION['username']}"; ?>">
<div class="text">Password:</div><input name="pin" type="password" id="pin" class="invulbalkje"><br />
<div class="text">New Password:</div><input name="newpassword" type="password" id="newpassword" class="invulbalkje"><br />
<div class="text">Repeat New Password:</div><input name="repeatnewpassword" type="password" id="repeatnewpassword" class="invulbalkje"><br />
<input type="submit" name="Submit" value="Change" class="button">
<a href="logout.php">LOGOUT</a>
</form>
Это мой PHP-код ниже
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
session_start();
include 'db.php';
$username = $_POST['username'];
$pin = $_POST['pin'];
$newpassword = $_POST['newpassword'];
$repeatnewpassword = $_POST['repeatnewpassword'];
$encrypted_password=md5($pin);
$encrypted_newpassword=md5($newpassword);
$wtbusers = '`wtbusers`';//this should be defined (change this to your whatever table name)
$result = mysql_query("SELECT pin FROM $wtbusers WHERE username='$username' and pin = '$pin'");
if(!$result)
{
echo"<script>alert('Please Fill Form Correctly')</script>"; }
if(mysql_num_rows($result) != 0){
if($newpassword == $repeatnewpassword){
$sql=mysql_query("UPDATE $wtbusers SET pin='$pin' where username='$username'");
if($sql)
{
echo"<script>alert('Successful')</script>";
}
else
{
echo"<script>alert('error')</script>";
}
} else {
echo"<script>alert('error_password_not_matched')</script>";
}
} else {
echo"<script>alert('Please Fill Form Correctly')</script>";
}
?>
Благодарю вас.
2 ответа
Это не то, как вы присваиваете значение текстовому полю, используя сеансы в PHP. Имеет синтаксическую ошибку:
<input name="username" type="text" id="username" value="<? echo "{$_SESSION['username']}"; ?>">
Я надеюсь, что вы написали session_start();
в начале вашего кода (в каждом файле, в котором вы используете сеансы) или все это (связанное с сеансами) будет бесполезным.
Попробуйте это вместо этого:
<?php
session_start();
$_SESSION['username'] = "mk";
?>
<input name="username" type="text" id="username" value="<?php echo $_SESSION['username'];?>">
Теперь вы должны использовать isset
таким образом, чтобы он не запускал php, если он не пришел из формы.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
session_start();
include 'db.php'; // you might want to make corresponding changes here
if(isset($_POST['Submit'])){
$username = $_POST['username'];
$pin = $_POST['pin'];
$newpassword = $_POST['newpassword'];
$repeatnewpassword = $_POST['repeatnewpassword'];
$encrypted_password=md5($pin);
$encrypted_newpassword=md5($newpassword);
// the rest of your code
}
?>
РЕДАКТИРОВАТЬ:
Если двигаться дальше от комментариев, то это упрощенный / незначительный исправленный код ошибки:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
session_start();
include 'db.php';
$servername = "localhost";
$username = "your_user_name_here";
$password = "your_pass_here";
$dbname = "your_db_name_here";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if(isset($_POST['Submit'])){
$username = $_POST['username'];
$pin = $_POST['pin'];
$newpassword = $_POST['newpassword'];
$repeatnewpassword = $_POST['repeatnewpassword'];
$encrypted_password=md5($pin);
$encrypted_newpassword=md5($newpassword);
$wtbusers = '`your_table_name_here`'; //this should be defined (change this to your whatever table name)
$result = mysqli_query($conn, "SELECT pin FROM $wtbusers WHERE username= '$username' and pin = '$pin'");
if(!$result)
echo"<script>alert('Please Fill Form Correctly')</script>";
if(mysqli_num_rows($result) > 0){
if($newpassword == $repeatnewpassword){
$sql=mysqli_query($conn, "UPDATE $wtbusers SET pin= '$pin' WHERE username='$username'");
if($sql)
echo"<script>alert('Successful')</script>";
else
echo"<script>alert('error')</script>";
}
else
echo"<script>alert('error_password_not_matched')</script>";
}
else
echo"<script>alert('Please Fill Form Correctly')</script>";
?>
Все остальные проблемы в стороне и решение вашего актуального вопроса; Там нет проверки, чтобы увидеть, делается ли POST, что я могу сказать, поэтому добавление символа @ к ним, как $username = @$_POST['username'];
в вашем контексте это самое быстрое решение, чтобы избавиться от них, но я бы порекомендовал сначала проверить сообщение. Исет очень хорош для этого.
Кроме того, вы можете отключить отчеты об ошибках для уведомлений, выполнив это
error_reporting(E_ALL & ~E_NOTICE);
Смотрите error_reporting