【问题标题】:PHP: How to carry over session variables between 3 pages?PHP:如何在 3 个页面之间传递会话变量?
【发布时间】:2018-09-28 22:06:46
【问题描述】:

所以到目前为止,我可以使用 post 和 get 成功地将结果从第一页移动到第二页,但无论我做什么,它都不会将信息移动到第三页。在阅读了它为此而制作的内容后,我试图将其切换到会话,但由于某种原因,我做错了事,经过数小时的搜索,我终生无法弄清楚它是什么。我已经关注了本网站上与该主题相关的指南、视频和其他帖子。我现在得出的结论是只有我,我需要一些帮助。任何帮助将不胜感激。

第 1 页(索引页 | 输入您的变量):

<?php session_start();
$_GET['q'] = $q;
$_GET['s'] = $s;
?>

<form action="search.php" method="get">
<input name="q" maxlength="8" type="text" placeholder="License Plate" id="textbox" required />
<select name="s" id="s" required aria-required="true">
<option value="" disabled selected>CHOOSE STATE</option>
<option value="AL">ALABAMA</option>
<option value="AK">ALASKA</option>
<option value="AZ">ARIZONA</option>
<option value="AR">ARKANSAS</option>
<option value="CA">CALIFORNIA</option>
<option value="CO">COLORADO</option>
<option value="CT">CONNECTICUT</option>
etc...
</select>
<input type="submit" value="SEARCH" id="submitbtn"></form>

第 2 页(Search.php 将直接带您到指定的页面,如果它已经创建):

<?php session_start();
$q = $_POST['q'];
$s = $_POST['s'];
?>
<?php
$dir = 'states';
$s = (isset($_GET['s']))? strtolower($_POST['s']) : '';
$q = (isset($_GET['q']))? strtoupper($_POST['q']) : ''; 
$res = opendir($dir); 

while(false!== ($file = readdir($res))) {
    if(strpos(strtoupper($file),$q)!== false &&!in_array($file)) {
        echo "<a href='$dir/$s/$q.htm'>$file</a>";
    }
}

closedir($res);
?>

<?php
echo $htmlHeader;
while($stuff){
echo $stuff;
}
echo "<script>window.location = 
'http://www.somesite.com/$dir/$s/$q.htm'</script>";
 ?>

第 3 页(404 页用于捕获所有不在系统中的内容):

<?php session_start();
?>
<form action="" method="" name="FormChoice">
<input name="q" maxlength="8" type="text" value="<?php echo $_POST['q']; ?>" id="q" required>
<select name="s" id="s" required aria-required="true">
<option value="" disabled>CHOOSE STATE</option>
<option value="AL" <?php if($_POST['s'] == al) {echo ' selected="selected"';} ?>>ALABAMA</option>
<option value="AK" <?php if($_POST['s'] == ak) {echo ' selected="selected"';} ?>>ALASKA</option>
<option value="AZ" <?php if($_POST['s'] == az) {echo ' selected="selected"';} ?>>ARIZONA</option>
<option value="AR" <?php if($_POST['s'] == ar) {echo ' selected="selected"';} ?>>ARKANSAS</option>
<option value="CA" <?php if($_POST['s'] == ca) {echo ' selected="selected"';} ?>>CALIFORNIA</option>
<option value="CO" <?php if($_POST['s'] == co) {echo ' selected="selected"';} ?>>COLORADO</option>
<option value="CT" <?php if($_POST['s'] == ct) {echo ' selected="selected"';} ?>>CONNECTICUT</option>
</select>
<input type="submit" id="submitbtn2" value="SEARCH" name="submit" OnClick="search()" />
<span id="or">OR</span>
<input type="submit" id="addbtn" value="ADD" name="submit" OnClick="add()" /> 
</form>

【问题讨论】:

  • 在尝试将该变量的值存储到 $_SESSION[''] 变量之前,最好先将值加载到变量中
  • Page1 和 Page2) $q$s 当您尝试将这些变量存储到 SESSION 中时没有价值!!!!!!
  • 那么跟随@RiggsFolly,什么是 $q 和 $s 值?它们是否在页面中设置得更高?
  • $_GET['q']s
  • 对不起大家,我修复了我发布的错误,它没有反映我当前的代码。现在确实如此。我之前发布的代码是我在测试页面上弄乱的。

标签: php session post get session-variables


【解决方案1】:

第1页

<?php 
session_start();
// next 2 lines do NOTHING remove them
// as you have not yet loaded any values into $q and $s
//$_GET['q'] = $q;
//$_GET['s'] = $s;
?>

<form action="search.php" method="get">
<input name="q" maxlength="8" type="text" placeholder="License Plate" id="textbox" required />
<select name="s" id="s" required aria-required="true">
<option value="" disabled selected>CHOOSE STATE</option>
<option value="AL">ALABAMA</option>
<option value="AK">ALASKA</option>
<option value="AZ">ARIZONA</option>
<option value="AR">ARKANSAS</option>
<option value="CA">CALIFORNIA</option>
<option value="CO">COLORADO</option>
<option value="CT">CONNECTICUT</option>
etc...
</select>
<input type="submit" value="SEARCH" id="submitbtn"></form>

第 2 页 - 搜索 - 从以前的表单接收数据 - 包含很多不必要的&lt;?php...?&gt; - 以前的表单使用method="get",因此数据将到达$_GET 数组而不是$_POST 数组

<?php 
session_start();
//$q = $_POST['q'];
//$s = $_POST['s'];

// But this is silly as you have not yet tested these values exist
// but you do that in the next lines
//$q = $_GET['q'];
//$s = $_GET['s'];

$dir = 'states';
$s = (isset($_GET['s']))? strtolower($_POST['s']) : '';
$q = (isset($_GET['q']))? strtoupper($_POST['q']) : ''; 
$res = opendir($dir); 

// Now if you want to pass the values of `q` and `s` on to the next form
// they now need to be added to the session
$_SESSION['q'] = $q;
$_SESSION['s'] = $s;

while(false!== ($file = readdir($res))) {
    if(strpos(strtoupper($file),$q)!== false &&!in_array($file)) {
        echo "<a href='$dir/$s/$q.htm'>$file</a>";
    }
}

closedir($res);

echo $htmlHeader;
while($stuff){
    echo $stuff;
}
echo "<script>
        window.location = 'http://www.somesite.com/$dir/$s/$q.htm';
      </script>";
// added missing semi colon                                       ^
?>

第 3 页(404 页面用于捕获所有不在系统中的内容):

现在,当您访问此页面时,数据将在 SESSION 中可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2012-04-25
    • 1970-01-01
    相关资源
    最近更新 更多