会话数据以两页形式覆盖PHP

时间:2018-01-19 22:15:10

标签: php mysql forms session

要注册用户,我使用的是包含两个页面的表单。第一个表单(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 -->

2 个答案:

答案 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查询的值并执行位置标题并退出