3

我有 3 个文件。我会给你一个确切的例子:

一个.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;
?>

如何使用in 中的$age变量?b.phpc.php

我也尝试过 session_start(); at fileb.php并使用$_SESSION["age"]=$_POST["age"];inb.php然后$_SESSION["age"]inc.php而不是,$age它仍然没有工作。

我也尝试过包含但也没有让我到任何地方......也许我没有正确使用它。

4

8 回答 8

6

问题是在文件 b.php 中,您没有将 age 的值发送到 c.php。

如果在 b.php 中,你这样做了:

 session_start();
 $_SESSION["age"] = $_POST["age"];

然后,在 c.php 中,你这样做了:

 session_start();
 $age = $_SESSION["age"];
 echo $age;

它会正常工作。

于 2012-10-27T20:11:08.833 回答
2

当用户在a.php提交表单时,浏览器会向b.php WITH数据发出 HTTP POST 请求。

所以你有年龄$_POST,但是你的header()in b.php通过 HTTP GET 请求将用户发送到c.php ,就是你不能$_POSTc.php访问的原因。但是,这是防止刷新页面导致数据重新提交的好方法。

您还需要在c.php中启动会话以访问会话数据,使用session_start().

于 2012-10-27T20:15:19.873 回答
1

如果您不想创建会话开始和销毁,则必须将 b.php 文件添加到 c.php 中。

比之后你的 c.php 文件必须像这样

c.php

<?php
include_once 'b.php';
echo $age;
?>
于 2012-10-28T12:37:34.330 回答
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'];

或使用 cal_b 描述的会话

于 2012-10-27T20:15:57.087 回答
1

如果要使用会话,则必须在要使用 $_SESSION 变量的每个页面上调用 session_start(),并且 session_start() 必须在任何输出之前。如果您在两个页面上都使用 session_start,那么您没有理由不应该工作。

于 2012-10-27T20:11:12.407 回答
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;
?>
于 2012-10-27T20:11:46.167 回答
1

session_start()也在c.php中使用过吗?您必须session_start()在要访问会话的每个脚本中使用。一旦你session_start()c.php中使用,你应该可以访问$_SESSION['age'].

于 2012-10-27T20:12:08.520 回答
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');用于将用户从一个页面带到另一个页面。例如,在用户登录后或当他的会话过期时,他应该再次进行身份验证。在这种情况下,用户看到他正在被REDIRECTED 访问未经授权的页面。

在这种情况下使用它不是错误header(),并且代码仍然可以正常工作,但它不应该用于那种动作。

于 2012-10-28T12:59:24.047 回答