Прежде чем задать вопрос, я знаю, что есть проблемы с 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);
}
Я добавил запрос на обновление, указанный выше, после следующего кода. Это решило мою проблему и точно проверило, был ли пользователь ранее зарегистрирован, если у них есть веб-сайт, который перенаправляет их на пароль изменения, если они вошли в систему, отправьте их на веб-сайт. Я создал отдельный запрос, чтобы выбрать статус и имя пользователя, чтобы он не мешал паролю. Я предполагаю, что это будет работать с любым именем пользователя, учитывая, что оно полностью изменено до тех пор, пока оно не войдет в систему, прежде чем оно должно их направить. Если есть какие-либо проблемы с этим кодом, я хочу знать, но он работает правильно для меня.
$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");
}
}
}
}