如何正确地在会话中存储值

时间:2016-02-08 11:35:27

标签: php forms session post

我有这些页面要求用户输入值。当我尝试使用以前页面的链接时,会话值消失了,它要求用户返回第一个并重复该过程。

以下是基于原始代码的示例代码:

page1.php中

<?php
 session_start();
 echo "<form method='POST' action='page2.php'>";
    echo "<input type='text' name='date1'>";
    echo "<input type='text' name='date2'>";
    echo "<input type='submit'>"
 echo "</form>";
?>

使page2.php

<?php
 session_start();
 $_SESSION['date1'] = $_POST['date1'];
 $_SESSION['date2'] = $_POST['date2'];
      echo "<form method='POST' action='page3.php'>";
        echo "<input type='text' name='info1'>";
        echo "<input type='text' name='info2'>";
        echo "<input type='submit'>"
     echo "</form>";
echo "<a href='page1.php'>Change value in page 1</a>";
?>

page3.php

<?php
 session_start();
 $_SESSION['info1'] = $_POST['info1'];
 $_SESSION['info2'] = $_POST['info2'];
 if(isset($_POST['confirm'])){
$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_pass = '';
$db = 'sampDB';

$conn = mysqli_connect($mysql_host, $mysql_user, $mysql_pass, $db);

$query = mysqli_query($conn, 'INSERT INTO info(date1, date2, info1, info2)
                               VALUE ('$_SESSION[date1]', '$_SESSION[date2]', '$_SESSION[info1]', '$_SESSION[info2]')');

}
      echo "<form method='POST'>";
        echo $_SESSION['date1'];
        echo $_SESSION['date2'];
        echo $_SESSION['info1'];
        echo $_SESSION['info2'];
        echo "<input type='submit' name='confirm'>"
     echo "</form>";
echo "<a href='page1.php'>Change value in page 1</a>";
echo "<a href='page2.php'>Change value in page 2</a>";
?>

如何在不破坏会话中的值的情况下返回主页?

3 个答案:

答案 0 :(得分:3)

只要您没有$_POST将值重新设置回其他页面,您就可以在覆盖值之前检查是否设置了$_POST,如下所示:

session_start();
if(isset($_POST["date1"])) $_SESSION['date1'] = $_POST['date1'];
if(isset($_POST["date2"])) $_SESSION['date2'] = $_POST['date2'];

参考:PHP isset

答案 1 :(得分:0)

每次,你都会覆盖SESSION的值。

您需要检查会话是否已设置。

如果已经设置,则应该没有更改。

此外,只有在过帐表单时才应用过帐值。

添加检查会话是否已经存在,如下所示:

$_SESSION['date1'] = !isset($_SESSION['date1']) ? $_POST['date1'] : 
$_SESSION['date1'];

$_SESSION['date2'] = !isset($_SESSION['date2']) ? $_POST['date2'] : $_SESSION['date2'];

其他会话值相同。

答案 2 :(得分:0)

您应该以这种方式编写查询

$query = mysqli_query($conn, "INSERT INTO info(date1, date2, info1, info2) 
VALUE ('{$_SESSION['date1']}', '{$_SESSION['date2']}', 
    '{$_SESSION['info1']}', '{$_SESSION['info2']}')");