以两页形式覆盖php中的会话数据

g2ieeal7  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(313)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

两年前关门了。
改进这个问题
为了注册一个用户,我使用了一个由两页组成的表单。第一个表单(adduser.php)通过post将数据发送到第二个表单(plz.php)。例如,在第二种形式中,我将上一页的post值保存在session变量中

$_SESSION['phone1'] = $_POST['telnr'];

我已经检查过了,数据正确地发送到了第二张表格。第二个表单只有一个下拉列表,在选择一个选项后,它应该保存数据库中的所有数据。问题是,当我发送第二个表单时,所有会话变量都被覆盖,并收到一条错误消息“email cannot be 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 -->
uidvcgyl

uidvcgyl1#

使用第三页保存 plz.php 会话中的内容(列表)和值。
很明显,当您将第二个表单元素提交到同一页时,会话数据会被空值重写。
因此,您可以按以下方式更改窗体操作:

<form action="third.php" method="post" class="text-center col-md-
  offset-0.5 ">

或者你可以寄第二张表格 plz 使用get方法并将其请求值从 $_POST$_GET . 但要记住检查 $_POST 空到不设置会话!

csga3l58

csga3l582#

正在覆盖您的$\u会话数组,因为您正在表单提交时覆盖它。仅当会话数组未提交时才将值分配给它。。。

if (! isset($_POST['submit'])) {
   $_SESSION['email1'] = $_POST['email'];
   $_SESSION['passwort1'] = $_POST['passwort'];
   // ...
}

因此,当表单被提交时,您的会话不会被覆盖,您只会获取sql查询的值,并执行location头和exit

相关问题