使用php会话使表单变得粘稠

时间:2017-04-18 13:12:51

标签: php forms session sticky

我正在尝试创建php多页表单,我为此目的使用PHP会话。 但是,当用户输入出错并且我希望表单要求用户使用正确的输入再次填写表单时,表单字段将不会保存用户已经放入的数据,因此用户必须启动一遍又一遍。 如何使用php会话粘贴表单? 感谢

我的代码如下:

<?php
// Session starts here.
          if (!isset($_SESSION)) session_start();
?>
<form action="registration.php" method="post">
  <center><h8>Please create your user name and password</h8></center>
  <div class="imgcontainer">

    <img src="phone.gif" alt="Welcome" class="avatar">
  </div>

  <div class="container">

           <label><b>Username</b></label>
           <input type="text" placeholder="Enter Username" name="username" required value="<?php if(isset($_POST['username'])) echo $_POST['username'];?>">

            <label><b>Password</b></label>
              <input type="Password" placeholder="Enter Password" name="password" required>

              <label><b>Confirm Password</b></label>
    <input type="Password" placeholder="Confirm Password" name="confirm" required>
    <span id="error" width=100%>
     <!---- Initializing Session for errors --->
     <?php
     if (!empty($_SESSION['error'])) {
                echo "<error>".$_SESSION['error']."</error>";
                unset($_SESSION['error']);
      }

  if (isset($_POST['username'])){ 
       $_SESSION['username'] = $_POST['username'];
       echo $_SESSION['username'];
       echo $_POST['username'];
        }
 ?>
 </span>
<br>

    <input type="reset" value="Reset" />
 <input type="submit" value="Next" />

  </div>

并且注册php包含

<?php
if (!isset($_SESSION)) session_start();
// Checking first page values for empty,If it finds any blank field then redirected to first page.
if (isset($_POST['username']))
{
      if (($_POST['password']) === ($_POST['confirm'])) 
                 {
                     foreach ($_POST as $key => $value) 
                         {
                             $_SESSION['post'][$key] = $value;
                          }
                 }
       else 
                 {
                    $_SESSION['error'] = "Password does not match with Confirm Password.";
                    if (isset($_POST['username'])){ 
                               $_SESSION['username'] = $_POST['username'];
                               echo $_SESSION['username'];
                              echo $_POST['username'];
                    }
                    header("location: createlogin.php"); //redirecting to first page
                 }
}

4 个答案:

答案 0 :(得分:1)

这样的事情:

<input name="var" value="<?= isset($_SESSION['var']) ? $_SESSION['var'] : null  ?>" />

答案 1 :(得分:0)

尝试相反的方式。将表单操作链接到当前页面,如果所有字段都有效;将其重定向到下一页( registration.php )。通过这种方式,您仍然拥有所有后期数据,您可以处理需要在会话中保存的所有内容,并且可以在完成所有逻辑后重定向。

答案 2 :(得分:0)

我的两分钱将保持同一页面以验证内容和表格 您可以在单个页面中包含其他PHP文件,具体取决于表单是否有效 这样,您在两个页面之间保持相同的$ _POST,并且不需要将发布的数据存储在会话变量中。

否则,如果您想保持相同的架构,则需要在输入值中使用$_SESSION变量而不是$_POST变量,例如delboy的答案。

替换:

<?php if(isset($_POST['username'])) echo $_POST['username'];?>

使用:

<?php if(isset($_SESSION['username'])) echo htmlspecialchars($_SESSION['username']); ?>

^注意:如果用户输入"作为用户名,htmlspecialchars用于防止反映的XSS。

答案 3 :(得分:0)

问题是,您的数据发布到registration.php,因此您无法在原始文件中获取发布的值。您正在尝试使用$ SESSION,但不建议这样做,而且不对。你的整个解决方案都是错误的。

忘记会话和分隔文件,将所有内容放在registration.php文件中。

您可以使用$ _SERVER ['REQUEST_METHOD']变量检查用户是否已发布。

if($_SERVER['REQUEST_METHOD'] == 'POST'){
  print 'Something just posted';
}

PS:在存储密码之前不要忘记密码! :)