Как обновить MySql столбец с -1 до 1 после входа из скрипта PHP

0

Прежде чем задать вопрос, я знаю, что есть проблемы с SQL Injection, я собираюсь позаботиться об этом, скорее всего, с PDO, я просто пытаюсь понять это на данный момент.

Я хочу, чтобы PHP читал столбец статуса из MySql, и если столбец статуса читает -1, где $ username = ($ _POST ["username"]), я хочу, чтобы PHP первоначально отправлял их на экран смены пароля, а затем после изменил отправку сценария обновления на MySql, чтобы обновить столбец "статус" от значения по умолчанию -1 до 1.

Если его 1, я хочу, чтобы он регистрировался как обычно, и если его -1 я хочу, чтобы они были вынуждены менять свой пароль в основном, и мне трудно найти способ сделать это.

Я предполагаю, что мой запрос на обновление будет выглядеть примерно так

$query = "UPDATE login SET status= 1 WHERE user_id='".$username ."' LIMIT 1";

Мой php-скрипт регистрации до сих пор

<?php
// Include config file
require_once 'LoginConn.php';

// Define variables and initialize with empty values
$username = $password = "";
$username_err = $password_err = "";

// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){

    // Check if username is empty
    if(empty(trim($_POST["username"]))){
        $username_err = 'Please enter username.';
    } else{
        $username = trim($_POST["username"]);
    }

    // Check if password is empty
    if(empty(trim($_POST['password']))){
        $password_err = 'Please enter your password.';
    } else{
        $password = trim($_POST['password']);
    }

    // Validate credentials
    if(empty($username_err) && empty($password_err)){
        // Prepare a select statement
        $sql = "SELECT username, password FROM scorecardusers WHERE username = ?";

        if($stmt = mysqli_prepare($link, $sql)){
            // Bind variables to the prepared statement as parameters
            mysqli_stmt_bind_param($stmt, "s", $param_username);

            // Set parameters
            $param_username = $username;

            // Attempt to execute the prepared statement
            if(mysqli_stmt_execute($stmt)){
                // Store result
                mysqli_stmt_store_result($stmt);

                // Check if username exists, if yes then verify password
                if(mysqli_stmt_num_rows($stmt) == 1){                    
                    // Bind result variables
                    mysqli_stmt_bind_result($stmt, $username, $hashed_password);
                    if(mysqli_stmt_fetch($stmt)){
                        if(password_verify($password, $hashed_password)){
                            /* Password is correct, so start a new session and
                            save the username to the session */


                            session_start();

                            $value= $sql['password'];


                            $_SESSION['username'] = $username;      
                            header("location: Test.php");
                        } else{
                            // Display an error message if password is not valid
                            $password_err = 'The password you entered was not valid.';
                        }
                    }
                } else{
                    // Display an error message if username doesn't exist
                    $username_err = 'No account found with that username.';
                }
            } else{

                echo "Oops! Something went wrong. Please try again later.";
            }
        }

        // Close statement
        mysqli_stmt_close($stmt);
    }

    // Close connection
    mysqli_close($link);
}
?>

ОБНОВЛЕНО: я добавил это в свой запрос, и он обновляется корректно.

mysqli_query ($link, "UPDATE Users SET Status = '1' WHERE Status ='-1'and username ='".$username ."' LIMIT 1");

Если бы кто-нибудь мог помочь мне понять, как вытащить область статуса из моего sql и перенаправить их на страницу смены пароля, если статус = -1 был бы потрясающим.

Я просто пытаюсь выяснить, как перенаправить сменить пароль, если Status = -1 в mysql..

ВТОРОЕ ОБНОВЛЕНИЕ: Ive сделал второй запрос, который проверяет информацию и отправляет вас в журнал изменений пароля, но я знаю, что это неверно. Я чувствую себя так, как будто я намного ближе к ответу. Код работает до того, как я попал на правый экран, но не получал правильную информацию. Мне нужно, чтобы имя пользователя было переменной, основанной на том, что агент вводит. Опять же, любая помощь здесь будет действительно оценена.

        $id_get = "SELECT Status, username FROM scorecardusers WHERE Status = '-1' and username='MyName' LIMIT 1";


        if ($result=mysqli_query($link, $id_get))
        {   

      // Fetch one and one row// check if first time log in
  while ($row = mysqli_fetch_assoc($result))
    {
   $Status=$row["Status"];
   $username=$row["MyName"];
      if ($Status== "-1" && $username =="MyName");
      var_dump($result);
        header("location: ChangePW.php");

    }
  // Free result set
  mysqli_free_result($result);
}
  • 0
    Какие проблемы с SQL-инъекцией? При этом используются подготовленные операторы со значениями-заполнителями, если вы следуете этому шаблону в своем реальном коде, у вас все в порядке в этом отношении, но есть и другие серьезные проблемы.
  • 0
    ВНИМАНИЕ : написать свой собственный уровень контроля доступа нелегко, и есть много возможностей сделать его неправильно. Пожалуйста, не пишите свою собственную систему аутентификации, когда любая современная среда разработки, такая как Laravel, оснащена встроенной надежной системой аутентификации .
Показать ещё 6 комментариев
Теги:

1 ответ

0

Я добавил запрос на обновление, указанный выше, после следующего кода. Это решило мою проблему и точно проверило, был ли пользователь ранее зарегистрирован, если у них есть веб-сайт, который перенаправляет их на пароль изменения, если они вошли в систему, отправьте их на веб-сайт. Я создал отдельный запрос, чтобы выбрать статус и имя пользователя, чтобы он не мешал паролю. Я предполагаю, что это будет работать с любым именем пользователя, учитывая, что оно полностью изменено до тех пор, пока оно не войдет в систему, прежде чем оно должно их направить. Если есть какие-либо проблемы с этим кодом, я хочу знать, но он работает правильно для меня.

$id_get = "SELECT Status, username FROM Users WHERE Status = '-1' and username = ?";




 if($Check = mysqli_prepare($link, $id_get)){
        // Bind variables to the prepared statement as parameters
        mysqli_stmt_bind_param($Check, "s", $param2_username);

        // Set parameters
        $param2_username = $username;
        $param_status=$status;

        // Attempt to execute the prepared statement
        if(mysqli_stmt_execute($Check)){
            // Store result
            mysqli_stmt_store_result($Check);

            if(mysqli_stmt_num_rows($Check) == 1){                    
                // Bind result variables


                mysqli_stmt_bind_result($Check, $username, $param2_status);
                if(mysqli_stmt_fetch($Check)){

                   if ($param_status== "-1" && $param2_username == '?');
                        header("location: ChangePassword.php");
                    }
                }


        }

 }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню