如何在php中从一个文件到另一个文件获取变量

时间:2012-10-27 20:06:37

标签: php html

我有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;
?>

如何使用$ageb.php的{​​{1}}变量?

我也尝试过session_start();在文件c.php并使用b.php中的$_SESSION["age"]=$_POST["age"];,然后使用b.php中的$_SESSION["age"]代替c.php,但仍然无效。< / p>

我也试过包括但是没有把我带到任何地方......也许我没有正确使用它。

8 个答案:

答案 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()

这不是错误,而且代码仍然可以正常运行,但不应该用于此类操作。