【发布时间】:2018-10-20 17:49:03
【问题描述】:
假设我的代码如下所示:
if (isset($_POST["reset"])){
//selects email and phoneNo from database based on values entered in form
$_SESSION['email'] = $_POST['email'];
}else if (isset($_POST["submit"])) {
//line 68 -- $rePas = "UPDATE user SET 'password' = '" .password_hash($_POST['password'], PASSWORD_DEFAULT) . "' WHERE email = '$_SESSION[email]'";
}
我在页面的开头有session_start();,在任何 if 等之外。
我进入页面看到一个要求我输入电子邮件和电话号码的表单,然后单击Reset 按钮,如果 sql 代码返回某些内容,则该表单将更改为另一个要求我输入密码的表单。一旦我这样做了,我按下Submit按钮,我得到$_POST['submit'],我得到Notice: Undefined index: email in ... on line 68
我不明白为什么在按下提交按钮后会话变量设置为空,是否有通过两种形式传递一个变量,如果这有意义吗? 我已经查看了 stackoverflow 类似的问题,但找不到可行的解决方案。
看起来这段代码和解释还不够,因此这里是完整文件代码的链接:https://pastebin.com/fDEBCakp
【问题讨论】:
-
检查您是否确实收到了 $_POST['email'],该字段可能未提交,或者其名称的拼写可能不同。
-
$_SESSION['email']是否设置在 if 语句之前/其他任何地方?因为如果不是......那你为什么期望它在 else if 语句中保持一个值? -
@ThisGuyHasTwoThumbs
$_SESSION['email']我在第一个 if 语句中设置。然后我尝试在第二个中使用它。 -
除非您的脚本对SQL Injection Attack 开放,甚至if you are escaping inputs, its not safe! 在
MYSQLI_或PDOAPI 中使用prepared parameterized statements -
将
$_POST和$_SESSION数据转储到屏幕上,向我们展示您所看到的。如有疑问,请打印出来。
标签: php session mysqli session-variables