我有3个文件。 我会给你一个确切的例子:
a.php只会
<form action="b.php" method="POST">
Enter age:
<input type="text" name="age"><br>
<input type="submit" value="Save">
</form>
b.php
<?php
$age=$_POST["age"];
if (is_numeric($age))
{
header("Location: c.php");
exit();
}
else
{
echo "Age invalid!";
}
?>
c.php
<?php
//i want to use the $age variable here
echo $age;
?>
如何使用$age
中b.php
的{{1}}变量?
我也尝试过session_start();在文件c.php
并使用b.php
中的$_SESSION["age"]=$_POST["age"];
,然后使用b.php
中的$_SESSION["age"]
代替c.php
,但仍然无效。< / p>
我也试过包括但是没有把我带到任何地方......也许我没有正确使用它。
答案 0 :(得分:6)
问题是在文件b.php中,你没有将年龄值发送给c.php。
如果,在b.php中,你这样做了:
session_start();
$_SESSION["age"] = $_POST["age"];
然后,在c.php中,你做到了这一点:
session_start();
$age = $_SESSION["age"];
echo $age;
它会正常工作。
答案 1 :(得分:2)
当用户在 a.php 提交表单时,浏览器会向 b.php WITH 数据发出HTTP POST请求。
所以你的年龄在$_POST
,但 b.php 中的header()
会通过HTTP GET请求将用户发送到 c.php 那是为什么你无法访问 c.php 中的$_POST
。但是,这是防止刷新页面导致数据重新提交的好方法。
您需要使用session_start()
在 c.php 中启动会话以访问会话数据。
答案 2 :(得分:1)
如果要使用会话,则必须在要使用$ _SESSION变量的每个页面上调用session_start(),并且必须在任何输出之前调用session_start()。如果您在两个页面上都使用session_start,那么您就没有理由不这样做。
答案 3 :(得分:1)
请试试这个:
<强> b.php:强>
<?php
$age=$_POST["age"];
if (is_numeric($age))
{
header("Location: c.php?age=".$age);
exit();
}
else
{
echo "Age invalid!";
}
?>
<强> c.php:强>
<?php
//i want to use the $age variable here
$age = $_REQUEST["age"];
echo $age;
?>
答案 4 :(得分:1)
您是否也在 c.php 中使用了session_start()
?您必须在要访问会话的每个脚本中使用session_start()
。在 c.php 中使用session_start()
后,您应该可以访问$_SESSION['age']
。
答案 5 :(得分:1)
为什么不将b.php修改为......
<?php
$age=$_POST["age"];
if (is_numeric($age))
{
header("Location: c.php?age=$age"); ### so it will be send as get var
exit();
}
else
{
echo "Age invalid!";
}
?>
和c.php
$age = $_GET['age'];
或使用cale_b
所述的会话答案 6 :(得分:1)
如果您不想创建会话启动并销毁,则必须将b.php文件添加到c.php中。
比你的c.php文件必须这样
之后c.php
<?php
include_once 'b.php';
echo $age;
?>
答案 7 :(得分:0)
用户header('location: c.php');
它似乎也不是用户$_SESSION
变量的正确位置。
我认为您可以轻松include 'c.php'
而不是使用header('location: c.php');
。
<强> b.php 强>
<?php
$age=$_POST["age"];
if (is_numeric($age))
{
include "c.php"; //THIS LINE HAS BEEN CHANGED
exit();
}
else
{
echo "Age invalid!";
}
?>
<强> c.php 强>
<?php
echo $age; //NO CHANGE AT ALL IN THE FILE 'c.php'
?>
现在,浏览器仍将保留在localhost/project/b.php
中,您在c.php
中执行的内部操作将保持安全。
header('location: c.php');
用于将用户从一个页面带到另一个页面。例如,在用户登录或其会话过期后,他应该再次进行身份验证。在这种情况下,用户会看到他正在REDIRECT
ED处理未经授权的页面。
header()
这不是错误,而且代码仍然可以正常运行,但不应该用于此类操作。