将变量设置为$ _GET值时遇到问题

时间:2018-10-05 00:20:10

标签: php mysql mysqli

只需掌握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!)

2 个答案:

答案 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.";
  }