【问题标题】:Using variable from different $_POST使用来自不同 $_POST 的变量
【发布时间】: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_PDO API 中使用prepared parameterized statements
  • $_POST$_SESSION 数据转储到屏幕上,向我们展示您所看到的。如有疑问,请打印出来。

标签: php session mysqli session-variables


【解决方案1】:
<?php
if ( isset( $_POST['submit'] ) ) {
    $emailid = $_POST['email'];
    echo "email - ". $emailid;
}
?>
<form class="form-horizontal" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="email" name="email" class="form-control" placeholder="Email"> 
<button type="submit" name="submit" class="btn btn-primary">submit</button>
</form>

【讨论】:

  • 解释你的代码总是一个好主意,而不是直接转储它。这是一个相当糟糕的答案。
  • 这对我来说没有任何意义,因为在我的提交表单中我只有密码输入。电子邮件是第一种形式。
  • 实际上它只是为一个字段单独发布,所以它工作正常。因此您可以根据需要添加字段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
相关资源
最近更新 更多