【问题标题】:Dropdown selected value in a SESSION variable accross different pages doesn't persist跨不同页面的 SESSION 变量中的下拉选定值不会持续存在
【发布时间】:2017-09-23 21:04:04
【问题描述】:

在我的list.php 页面上,用户可以从下拉列表中选择一个国家,以显示 SQL 服务器的数据以供选择。在此选择中,用户可以选择更新/编辑edit.php 页面上的值。当用户在edit.php 页面上提交更改时,他们将被重定向到save.php 页面,然后返回到初始list.php 页面。我想知道是否可以使用SESSION 变量来存储初始国家/地区选择,以便用户在重定向到list.php 时获得相同的选择。我尝试使用session_start ();,但无法使用。

已编辑

这是我的代码片段:

list.php顶部:

<?php session_start(); ?>

表格:

<form name="frmname" id="frmid" action="list.php" method="POST" >
<h4>From: <input type="text" size="6" name="start_date" pattern="[0-9/]+" 
placeholder=" 00/00/0000" />
To: <input type="text" size="6" name="end_date" pattern="[0-9/]+" 
placeholder=" 00/00/0000" />
<select name="RegioSelect" onchange="this.form.submit();" ><option><?php echo $_SESSION['RegioSelect']; ?></option>

下拉列表填充:

$query1 = "SELECT DISTINCT CountryRegionName FROM tKein23 ORDER BY CountryRegionName";
$stmt1 = $conn->query( $query1 );
while ($data = $stmt1->fetch(PDO::FETCH_ASSOC)){
    echo '<option value="'.$data['CountryRegionName'].'">';
    echo $data['CountryRegionName']; 
    echo "</option>";
}

然后我尝试了SESSION_START()

<h4><input type="submit" value="Show" name="Selection" />
</select>
</form>

<?php

    if(isset($_POST["RegioSelect"])){
        $_SESSION['RegioSelect'] = $_POST["RegioSelect"];
    }

现在,在其他页面上,我确实得到了 $_SESSION['RegioSelect'] 变量。在list.php 上,我在下拉列表中获得了变量,但没有提交。

【问题讨论】:

  • session_start() 必须在任何输出到浏览器之前调用
  • 我将 session_start() 代码放在页面顶部,在 html 标记之前,但是当我被重定向到 list.php 时它似乎不起作用 没有得到所选国家 &lt;?php session_start(); if(isset($_POST["RegioSelect"])){ $_SESSION['RegioSelect'] = $_POST["RegioSelect"]; } ?&gt;
  • $_SESSION['RegioSelect'] = $_POST["RegioSelect"];list.php 上?否则if() 将不会被执行
  • 好的,我应该在其他页面上放什么代码?只有 session_start();?
  • list.php 上的表单可以在加载时提交吗?怎么样?

标签: php html sql-server session-variables


【解决方案1】:

session_start() 必须先出现,在任何其他输出之前。不仅在您的 php 脚本上的 html 之前,而且在任何浏览器输出之前。

PHP Documentation

要使用基于 cookie 的会话,必须在向浏览器输出任何内容之前调用 session_start()。

<?php session_start(); ?>

<html>
    <body>
        ...
        ...
        <h4><input type="submit" value="Show" name="Selection" />
        </select>
        </form>

<?php

    if (isset($_POST["RegioSelect"]))
        $_SESSION['RegioSelect'] = $_POST["RegioSelect"];

【讨论】:

    【解决方案2】:

    如果表单在同一页面上,请务必移动

    if (isset($_POST["RegioSelect"]))
        $_SESSION['RegioSelect'] = $_POST["RegioSelect"];
    

    到右上方下方session_start()之前&lt;html&gt;

    否则你必须先重新加载页面 - 这可能不是你想要的

    从那里你也可以通过header()重定向到其他页面

    【讨论】:

    • 从 save.php 已经做了一个 header() 重定向回 l​​ist.php,当我需要获取 from 提交以便取回选择时。尝试了 JavaScript,但是 onLoadSubmit() 函数进入了一个循环,所以实际上我需要这个函数只运行一次,但我没有让它工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多