Просто разбираюсь с SQL и PHP и пытаюсь создать простую систему учетных записей пользователей - по электронной почте с забытым паролем.
У меня есть скрипт ниже, который я пытаюсь использовать для обновления пароляПользователь.Они получают электронное письмо со ссылкой.Ссылка выглядит так: http://localhost:8887/email-password-reset.php?id=1
.
Я знаю, что это небезопасно и легко взломать!Я планирую использовать случайно сгенерированную строку чисел, как только у меня получится!
Я пытаюсь использовать функцию $_GET
, чтобы получить id
.Однако я не верю, что $_GET["id"]
передается в переменную $param_id
.
Я новичок в этом, поэтому не знаю, как это исправить!
Как я могу получить этот параметр, устанавливающий param_id в значение $_GET
?
По крайней мере, я думаю, что проблема связана с ошибкой в консоли (Undefined variable: param_id!)
Заранее спасибо!
<?php
//session_start();
require_once "config.php";
// Define variables and initialize with empty values
$new_password = $confirm_password = "";
$new_password_err = $confirm_password_err = "";
$param_id = '';
// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
// Validate new password
if(empty(trim($_POST["new_password"]))){
$new_password_err = "Please enter the new password.";
} elseif(strlen(trim($_POST["new_password"])) < 6){
$new_password_err = "Password must have atleast 6 characters.";
} else{
$new_password = trim($_POST["new_password"]);
}
// Validate confirm password
if(empty(trim($_POST["confirm_password"]))){
$confirm_password_err = "Please confirm the password.";
} else{
$confirm_password = trim($_POST["confirm_password"]);
if(empty($new_password_err) && ($new_password != $confirm_password)){
$confirm_password_err = "Password did not match.";
}
}
// Check input errors before updating the database
if(empty($new_password_err) && empty($confirm_password_err)){
// Prepare an update statement
$sql = "UPDATE users SET password = ? WHERE id = ?";
if($stmt = mysqli_prepare($link, $sql)){
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "si", $param_password, $param_id);
// Set parameters
$param_password = password_hash($new_password, PASSWORD_DEFAULT);
$param_id = (isset($_GET['id']) ? $_GET['id'] : '');
// 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);
}
?>