要注册用户,我使用的是包含两个页面的表单。第一个表单(addUser.php)通过post将数据发送到第二个表单(plz.php)。在第二种形式中,我在会话变量中保存上一页的帖子值,例如
$_SESSION['phone1'] = $_POST['telnr'];
我已检查并将数据正确发送到第二个表单。 第二种形式只有一个下拉列表,选择一个选项后,它应该保存数据库中的所有数据。 问题是,当我发送第二个表单时,所有会话变量都被覆盖,我收到一条错误消息“email不能为null”。我假设其他变量也被覆盖了。 到目前为止,我已尝试将会话数据保存在一个数组中,然后将其解压缩但没有运气。 第二种形式看起来像这样。是的,会话从每个文件的顶部开始。
$_SESSION['email1'] = $_POST['email'];
$_SESSION['passwort1'] = $_POST['passwort'];
$_SESSION['vname1'] = $_POST['vname'];
$_SESSION['fname1'] = $_POST['fname'];
$_SESSION['phone1'] = $_POST['telnr'];
$_SESSION['firma1'] = $_POST['firmen_name'];
$_SESSION['ad11'] = $_POST['adresse1'];
$_SESSION['ad21'] = $_POST['adresse2'];
$_SESSION['kr1'] = $_POST['kreis'];
//$_SESSION["plz1"] = $_POST['plz'];
if(isset($_POST['submit'])){
// Passwort wird gehasht und in der Datenbank gespeichert, bcrypt
algorithm, cost = 10, salt wurde automatisch generiert und ist unique
$hash = password_hash($_SESSION['passwort1'], PASSWORD_DEFAULT);
$insert = "INSERT INTO users
(email,passwort,vname,fname,firmen_name,telnr, userlevel, active,
adresse1, adresse2, kreis, plz) VALUES
(:email,:hash,:vname,:fname,:firma,:phone,1,0, :adresse1, :adresse2,
:kreis, :plz)";
$prepStmt = $pdo->prepare($insert);
$prepStmt ->bindParam("email", $_SESSION['email1']);
$prepStmt ->bindParam("hash", $hash);
$prepStmt ->bindParam("vname", $_SESSION['vname1']);
$prepStmt ->bindParam("fname", $_SESSION['fname1']);
$prepStmt ->bindParam("firma", $_SESSION['firma1']);
$prepStmt ->bindParam("phone", $_SESSION['phone1']);
$prepStmt ->bindParam("adresse1", $_SESSION['ad11']);
$prepStmt ->bindParam("adresse2", $_SESSION['ad21']);
$prepStmt ->bindParam("kreis", $_SESSION['kreis1']);
$prepStmt ->bindParam("plz", $_POST["plz1"]);
$prepStmt ->execute();
header("Location: users.php");
exit();
}else{
?>
<div class="container">
<div class="col-md-offset-3 col-md-7">
<form action="plz.php" method="post" class="text-center col-md-
offset-0.5 ">
<!-- more form -->
答案 0 :(得分:0)
使用第三页在会话中保存plz.php
内容(列表)和值。
很明显,当您将第二个表单元素提交到同一页面时,会话数据会被空值重写。
因此,您可以更改表单操作,如下所示:
<form action="third.php" method="post" class="text-center col-md-
offset-0.5 ">
或者您可以使用GET方法发送第二个表单plz
,并将其请求值从$_POST
更改为$_GET
。但请记住检查$_POST
是否为空以设置会话!
答案 1 :(得分:0)
您的$ _SESSION数组正在被覆盖,因为您在表单提交时会覆盖它。仅在会话数组未提交时才将值分配给会话数组...
if (! isset($_POST['submit'])) {
$_SESSION['email1'] = $_POST['email'];
$_SESSION['passwort1'] = $_POST['passwort'];
// ...
}
因此,当提交表单时,您的会话不会被覆盖,您只需获取sql查询的值并执行位置标题并退出