簡體   English   中英

如何在php中從一個文件到另一個文件獲取變量

[英]how do I get a variable from one file to another in php

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

如何在c.php使用b.php中的$age變量?

我也嘗試過session_start(); 在文件b.php並使用$_SESSION["age"]=$_POST["age"]; b.php然后在c.php中的$_SESSION["age"]而不是$age ,它仍然無效。

我也試過包括但是沒有把我帶到任何地方......也許我沒有正確使用它。

問題是在文件b.php中,您沒有將年齡值發送到c.php。

如果,在b.php中,你這樣做了:

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

然后,在c.php中,你這樣做了:

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

它會正常工作。

當用戶在a.php上提交表單時,瀏覽器向b.php WITH數據發出HTTP POST請求。

所以你的年齡在$_POST ,但b.php中的 header()通過HTTP GET請求將用戶發送到c.php就是你無法在c.php中訪問$_POST原因 但是,這是防止刷新頁面導致數據重新提交的好方法。

您還需要使用session_start()c.php中啟動會話以訪問會話數據。

如果您要使用該會話,則必須在要使用$ _SESSION變量的每個頁面上調用session_start(),並且必須在任何輸出之前調用session_start()。 如果你在兩個頁面上都使用session_start,那么就沒有理由不起作用。

請試試這個:

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

您是否也在c.php中使用了session_start() 您必須在要訪問會話的每個腳本中使用session_start() c.php中使用session_start()后,您應該可以訪問$_SESSION['age']

為什么不將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描述的會話

如果您不想創建會話啟動和銷毀,則必須將b.php文件添加到c.php中。

比你的c.php文件必須這樣

c.php

<?php
include_once 'b.php';
echo $age;
?>

用戶header('location: c.php');並不是真的需要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() 並不是一個錯誤 ,並且代碼仍然可以正常工作,但它不應該用於那種操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM