只需掌握SQL和PHP并尝试构建一个简单的用户帐户系统-忘记密码电子邮件链接即可。
下面有一个脚本,我试图使用该脚本来更新用户密码。他们收到一封带有链接的电子邮件。链接看起来像这样:@ECHO OFF
setlocal EnableDelayedExpansion
rem | Banned character List (Must be in A,B,C format)
set "BAN=m,1,4,)"
rem | TEST strings we want to remove symbols from (Can be any name)
SET "STRING1=H$4jm)k@14+d^j"
SET "STRING2=money"
rem | Use (CALL) (:FIX) (STRING NAME)
echo BEFORE FIX: %STRING1%
call :FIX STRING1
echo AFTER FIX: %STRING1%
pause
goto :eof
:FIX
Rem | Create %1 into raw string & string data
set "VAR1=%1"
Rem | Create a Findstr for each banned character
for /F "delims=" %%a in ("%BAN%") do (
set "output="
for /F "delims=" %%b in ('cmd /U /C echo %%a^| find /V ","') do (
set "output=!output! | find /V "%%b""
)
set "B1=!output:~1!"
)
Rem | Edit string without banned words
for /F "delims=" %%a in ("!%VAR1%!") do (
set "output="
for /F "delims=" %%b in ('cmd /U /C echo %%a^| find /V ""!B1!') do (
set "output=!output! %%b"
)
set "B2=!output:~1!"
)
Rem | Remove spaces & finish
set %VAR1%=!B2: =%!
goto :eof
。
我知道这是不安全且容易被黑客入侵的!一旦开始运行,我计划使用随机生成的数字字符串!
我正在尝试使用http://localhost:8887/email-password-reset.php?id=1
函数来获取$_GET
。但是我不相信id
会传递给$_GET["id"]
变量。
我是这个新手,所以不确定如何纠正它!
如何将param_id设置为$param_id
值?
至少我认为问题出在控制台错误($_GET
,谢谢!
Undefined variable: param_id!)
答案 0 :(得分:0)
快速浏览:
只有if
类型才进入您的POST
,根据定义它将是GET
类型。您可能需要删除/更改。
第二,在将$param_id
分配给$param_id
变量之前,您正在使用GET
构建查询。
如果是唯一的地方(看起来如此),那么您正在设置$param_id
,为什么不只在将其声明为''
的第一行中声明它?
答案 1 :(得分:0)
他们收到一封带有链接的电子邮件。链接如下所示:
http://localhost:8887/email-password-reset.php?id=1
我假设如果用户单击链接,将有一个“新密码”表格。然后,表单将数据发布到包含您使用的密码的某个网址。
要使用$_GET['id']
,您需要确保表单上的网址(可能看起来像action="http://localhost:8887/process.php"
)有GET参数。所以看起来像action="http://localhost:8887/process.php?id=1"
错误Undefined variable: param_id!
是因为在声明之前使用了param_id
。因此,它看起来像:
if($stmt = mysqli_prepare($link, $sql)){
// Set parameters
$param_password = password_hash($new_password, PASSWORD_DEFAULT);
$param_id = (isset($_GET['id']) ? $_GET['id'] : '');
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "si", $param_password, $param_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.";
}