У меня серьезная проблема на нашем веб-сайте, и мне требуется решение.
Итак, в основном в приведенном ниже коде мы принимаем электронную почту пользователя в качестве имени пользователя в базе данных и вместе с ним случайный пароль, взятый из файла MOCK_DATA.csv и сохраняющий его в БД.
Но он выполняет проверку, поэтому, если имя пользователя еще не существует в базе данных, введите имя пользователя и пароль. Если имя пользователя уже существует, просто обновите пароль.
Теперь вот проблема ниже:
Описание проблемы:
После того, как пользователь совершил покупку, если имя пользователя уже существует в базе данных, происходит то, что пароль для этого пользователя и ВСЕХ других пользователей в базе данных обновляется до этого пароля.
Чтобы уточнить, это не произойдет, если это новый пользователь. Поэтому, если электронная почта abc@gmail.com отсутствует в базе данных, abc@gmail.com и пароль 123456 вставляются в базу данных, и ни один из других пользователей в базе данных не затрагивает их пароль.
Однако, если я сделаю При покупке с тем же адресом электронной почты abc@gmail.com снова пароль будет обновлен для этого пользователя (скажем, 654321), но для всех паролей других пользователей в базе данных также будет установлено значение 654321.
Ожидается результат:
Пароль должен обновляться только для одного этого пользователя, если имя пользователя уже существует
Фактический результат:
Обновление пароля для всех пользователи.
$email_address = $_GET['email'];
$email_address_metis = "xxx@xxx.com.test-google-a.com";
//Get Access Code
$csv = array_map('str_getcsv', file('MOCK_DATA.csv'));
// get random index from array $arrX
$randIndex = array_rand($csv[0]);
// Define variables and initialize with empty values
$username = $password = $confirm_password = "";
$username_err = $password_err = $confirm_password_err = "";
// Processing form data when form is submitted
//if($_SERVER["REQUEST_METHOD"] == "POST"){
// Prepare a select statement
$sql = "SELECT id FROM users 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 = $email_address;//trim($_POST["username"]);
// Attempt to execute the prepared statement
if(mysqli_stmt_execute($stmt)){
/* store result */
mysqli_stmt_store_result($stmt);
if(mysqli_stmt_num_rows($stmt) == 1){
$username_err = "exists";
}
} else{
$username = $email_address;//trim($_POST["username"]);
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
// Close statement
mysqli_stmt_close($stmt);
//}
// output the value for the random index
// Validate password
$password = $csv[0][$randIndex];
if($username_err!=="exists"){
// Prepare an insert statement
$sql = "INSERT INTO users (username, password) VALUES (?, ?)";
if($stmt = mysqli_prepare($link, $sql)){
// Set parameters
$param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "ss", $param_username, $param_password);
// Attempt to execute the prepared statement
if(mysqli_stmt_execute($stmt)){
// Redirect to login page
// header("location: login.php");
} else{
// echo "Something went wrong. Please try again later.";
}
// Close statement
mysqli_stmt_close($stmt);
}
}
else {
// Prepare an update statement
$sql = "UPDATE users SET password = ? WHERE username = ?";
if($stmt = mysqli_prepare($link, $sql)){
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "si", $param_password, $param_username);
// Set parameters
$param_password = password_hash($password, PASSWORD_DEFAULT);
$param_username = $username;
// Attempt to execute the prepared statement
if(mysqli_stmt_execute($stmt)){
// Password updated successfully. Destroy the session, and redirect to login page
session_destroy();
header("location: login.php");
exit();
} else{
echo "Oops! Something went wrong. Please try again later.";
}
// Close statement
mysqli_stmt_close($stmt);
}
}
// Close connection
mysqli_close($link);