Как изменить проверку хеш-пароля на обычный пароль? - PullRequest
0 голосов
/ 14 октября 2019

Я создаю новый веб-сайт с формами регистрации и входа. Как начинающий, я в основном часть кода, который я нахожу в Интернете и в книгах. Я закончил регистрационную форму, и она отлично работает, но теперь у меня проблема с формой входа в систему, потому что все коды, которые я могу найти, основаны на хешированном пароле, а форма входа, которую я должен создать, не нуждается в ней. Можете ли вы помочь преобразовать скрипт, который у меня сейчас есть, в скрипт, который будет работать без пароля (вместо пароля ему просто нужен 6-значный цифровой номер, который не хэшируется).

Я пробовал check_login, но он не работал.

     $sql = "SELECT id, email, pin FROM users WHERE email = ?";

    if($stmt = $mysqli->prepare($sql)){
        // Bind variables to the prepared statement as parameters
        $stmt->bind_param("s", $param_email);

        // Set parameters
        $param_email = $email;

        // Attempt to execute the prepared statement
        if($stmt->execute()){
            // Store result
            $stmt->store_result();

            // Check if username exists, if yes then verify password
            if($stmt->num_rows == 1){                    
                // Bind result variables
                $stmt->bind_result($id, $username, $numerpin);
                if($stmt->fetch()){
                   if($stmt->num_rows == 1){
                        // Password is correct, so start a new session
                        session_start();

                        // Store data in session variables
                        $_SESSION["loggedin"] = true;
                        $_SESSION["id"] = $id;
                        $_SESSION["email"] = $email;                            

                        // Redirect user to welcome page
                        header("location: dashboard.php");
                    } else{
                        // Display an error message if password is not valid
                        $numerpin_err = "The password you entered was not valid.";
                    }
                }
            } else{
                // Display an error message if username doesn't exist
                $email_err = "No account found with that username.";
            }
        } else{
            echo "Oops! Something went wrong. Please try again later.";
        }
    }

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Как и другие. Лучше всего использовать хеш-пароль, но так как вы этого не хотите. Вы можете пойти дальше с этим. Попробуйте код ниже

    <?php
           $mysqli = new mysqli('localhost', 'your username', 'your password', 'your db name');
      if($mysqli->connect_error){
        echo "cannot connect to database";
      }

    // assuming your post variable is set as follows
          $email = $_POST['email'];
          $pin = $_POST['pin'];

          $stmt = $mysqli->prepare("SELECT id, email, pin FROM users WHERE email = ? AND pin = ?");

/* i is for integer and s is for string. I suspect that your pin must be integer so I set the bind to i
*/

          $stmt->bind_param("si", $email, $pin);
          if($stmt->execute()){
            $stmt->store_result();
            $result = $stmt->get_result();
            $num_rows = $result->num_rows;
          }
          if($num_rows == 1){

     // Password is correct, so start a new session
                            session_start();

                            // Store data in session variables
                            $_SESSION["loggedin"] = true;
                            $_SESSION["id"] = $id;
                            $_SESSION["email"] = $email;                            

                            // Redirect user to welcome page
                            header("location: dashboard.php");


          }else{
            echo "Error: Either Email or Pin number is wrong";
          }
        ?>
0 голосов
/ 14 октября 2019

У вас есть этот запрос:

"SELECT id, email, pin FROM users WHERE email = ?"

Вы проверяете правильность адреса электронной почты. Вы можете изменить его на

"SELECT id, email, pin FROM users WHERE email = ? and pin = ?"

, конечно же, передавая пин-код. Кроме того, ваше сообщение об ошибке вводит в заблуждение:

               if($stmt->num_rows == 1){
                    // Password is correct, so start a new session
                    session_start();

                    // Store data in session variables
                    $_SESSION["loggedin"] = true;
                    $_SESSION["id"] = $id;
                    $_SESSION["email"] = $email;                            

                    // Redirect user to welcome page
                    header("location: dashboard.php");
                } else{
                    // Display an error message if password is not valid
                    $numerpin_err = "The password you entered was not valid.";
                }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...