PHP 会话变量未定义索引


php session variable undefine index

我有两个页面,我喜欢交换变量。 在第一页中,我有这样的表单:

<form method='post' action='rehabCreate2.php' onsubmit='return validateForm();'>
<input class="textbox" type='text' id='txt_stuNum' name='txt_stuNum'/ required>
<input type="submit" value="NEXT" id="btnNext">
</form>

然后我像这样设置会话变量:

if ( isset( $_POST['btnNext'])){
$stuId=$_POST['txt_stuNum'];
$_SESSION["stuId"]=$stuId;
}

然后在我的第 2 页中,我想要它:

<?php
session_start();
$stuId=$_SESSION["stuId"];
echo $stuId;
?>

但它给了我错误:

注意:未定义的索引:stuId 在...

我错过了什么?还有一件事,我怎样才能制作一个"后退按钮"并且值仍然存在?

编辑:最初我的"session_start()"放在页面1的顶部,但是当我将其转移到我的"下方时此错误消息显示:警告:session_start():无法发送会话缓存限制器 - 标头已发送(输出从 C:''xampp''htdocs''cerecare''portal''somepage.php:176 开始),在第 16 行 C:''xampp''htdocs''cerecare''portal''rehabCreate.php

顺便说一下:Somepage 的第 176 行是脚本标签的末尾,后面没有其他内容

第一次替换(给一个名字 attr 提交按钮以进入开机自检)

<input class="textbox" type='text' id='txt_stuNum' name='txt_stuNum'/ required>
<input type="submit" value="NEXT" id="btnNext">

<input class="textbox" type='text' id='txt_stuNum' name='txt_stuNum' required />
<input type="submit" value="NEXT" id="btnNext" name="btnNext">

在第 1 页上添加session_start()

session_start();
if (isset( $_POST['btnNext'])){
  $stuId=$_POST['txt_stuNum'];
  $_SESSION["stuId"] = $stuId;
}

然后在第 2 页上添加会话值是否存在的检查

$stuId=(isset($_SESSION["stuId"]) ? $_SESSION["stuId"] :'');

您忘记为提交按钮添加名称,但此外,每当您使用任何变量时,无论是会话还是局部变量,请确保它是否存在。 因此,为了使自己免于这个问题,请始终使用@Rakesh Sharma给出的这种代码风格。

 $var = isset($_SESSION['any_var']) ? $_SESSION['any_var'] : '';

或者像这样执行检查和减少计算错误的更好方法

$var = ( isset($_SESSION['any_var']) && !empty($_SESSION['any_var']) ? $_SESSION['any_var'] : '';

在语句中也总是使用此样式

if ( isset($_SESSION['any_var']) && !empty($_SESSION['any_var'])){
   /// code in statement
}

始终在代码中使用这种风格的代码,并且至少在未定义的索引错误和一些计算错误(如果值为空)中免费。