我想将变量传递出三页。 我目前使用的方法是:
Fist Page有一个表格,例如input type=”text” name=”username”
第二页使用$_POST
函数从第一页上的表单接收输入
例如$username=$_POST[“username”]
为了保存第一页的信息,我在第二页上创建了一个会话,并将输入存储在其中,例如如下:
$_SESSION[“username”]=$username
然后我导航到第三页并开始我的会话。如果我回显来自会话的存储输入,则服务器返回“未定义变量username
”。我猜是这样的,因为变量$ username是定义$_POST[“username”]
,在这种情况下,该帖子没有输入(在第三页上)。
我当然尝试使用$username
/ print()
函数转换字符串和/或文本中的变量print_r()
。不会改变任何东西。
是否有人对此问题有任何解决方案或解决方法?
我想出了一种解决这个问题的不道德的方法:只需使用value=$_POST[“username”]
在第二页的第一页上重新创建表单的副本......但我需要这是一个会话,因为这三页不是线性的(换句话说,不是步骤1,2,3,而是步骤1,2,1,3等)。
如果有帮助:这是一个有三页的注册表(没有密码)。最后,必须能够导航回页面以检查输入(因此需要将数据存储在某处以便在输入字段中调用它)。
代码页一(输入在表中,左列指定输入的内容,右列指定输入字段):
<table>
<tr>
<td class="table_column_1"><p>Title </p></td>
<td>
<p><select name="title" class="dropdown" style="width:145px">
<option>Bitte waehlen</option>
<option value="Frau">Mr</option>
<option value="Herr">Mrs</option>
</select></p>
</td>
<tr>
<td class="table_column_1"><p>First name: </p></td>
<td><p><input type="text" name="firstname"</p>
</td>
</tr>
<tr>
<td><p>Surname: </p></td>
<td><p><input type="text" name="surname" /></p></td>
</tr>
<tr>
<td><p>Email: </p></td>
<td><p><input type="email" name="email" /></p></td>
</tr>
<tr>
<td><p>Company: </p></td>
<td><p><input type="text" name="company" /></p></td>
</tr>
<tr>
<td class="table_column_1"><p>Department: </p></td>
<td><p><input type="text" name="department" /></p></td>
</tr>
</table>
第二页代码:
<?php
//Change variable to text/string
$title=print_r($_POST["title"]);
$firstname=print_r($_POST["firstname"]);
$surname=print_r($_POST["surname"]);
$email=print_r($_POST["email"]);
$company=print_r($_POST["company"]);
$department=print_r($_POST["department"]);
if ($title != "Bitte waehlen" && $firstname != "" && $surname != "" && $email != "" && $company != "" &&$department != ""){
session_start(1);
echo "Session: RUNNING";
//list for registration values
$_SESSION["registration"]="YES";
$_SESSION["title"]=$title;
$_SESSION["firstname"]=$firstname;
$_SESSION["surname"]=$surname;
$_SESSION["email"]=$email;
$_SESSION["company"]=$company;
$_SESSION["department"]=$department;
//Test session department and variable firstname validity
echo $_SESSION["department"];
echo $firstname;
}
else{
session_start(1);
$_SESSION["registration"]="NO";
echo "Session: NO";
header("location: registration.php");
};
?>
第三页代码:
<?php
session_start(1);
echo "Session: RUNNING";
//Check if session department data is returnable => no
echo $_SESSION["department"];
?>
答案 0 :(得分:1)
据我所知,你使用的是注册全局变量。
现在这是你的第一个错误。不要使用它。只是不要。
然后,您将用户名存储在会话中,现在您可以使用
访问它$_SESSION['username']
此外,在会话中存储数据时,还需要调用session_start();在为会话分配任何数据之前。
答案 1 :(得分:1)
你必须展示你的代码,但基本上,这应该有效:
session_start();//before ANY output is sent to the client!
if (isset($_POST['username']))
{
$_SESSION['username'] = $_POST['username'];
}
if (!isset($_SESSION['username']))
{
//redirect, or present user with error message
}
$username = $_SESSION['username'];
如果已发送该帖子值,则会将$_SESSION['username']
设置为$_POST['username']
的值,并在所有情况下将$_SESSION['username']
的值分配给$username
。如果$_POST
或$_SESSION
都没有设置用户名,则会出现意外问题,您应该重定向或向用户显示错误消息...
发布代码后,一些问题变得明显:
session_start
期待没有参数,您正在传递1
。session_start
只能在未发送标题时调用(即:无输出),您正在调用print_r
,这会创建输出。?>
标记(如果您想了解原因,请参阅php.net)<?php
代码session_start
会返回false
:检查返回值 这意味着你的page2.php脚本应该或多或少看起来像这样:
<?php
if (!session_start())
exit('Output has already been sent!');//check for whitespace, use output buffering...
if (isset($_POST['title']) && $_POST['title'] !== 'Bitte waehlen')
{
$_SESSION['title'] = $_POST['title'];
$_SESSION["registration"]="YES";
//avoid notices, always use isset:
$_SESSION['firstname'] = isset($_POST['firstname']) ? $_POST['firstname'] : null;
}
else
{
//form wasn't submitted, or the title was "Bitte waehlen":
// show error message, or redirect
}