Сообщение об ошибке при смене пароля с помощью 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

Другие вопросы по тегам