如何使用另一个php文件中的变量

时间:2014-08-13 12:58:54

标签: php mysql

我知道有类似的问题已被提出,但遗憾的是,我无法解决问题。

假设这种情况:在one.php中我从输入字段中检索一些数据并将其保存为变量,稍后我需要两个.php

one.php

$rejon = $_POST['rejon'];

require 'two.php';

two.php

--here I would like to use $rejon ---

当我尝试在two.php中使用$ rejon时,它不起作用(我尝试将其插入到数据库中)。另一方面,如果我不需要two.php,而是将代码粘贴到one.php中,则可以正常工作。

我不明白为什么会这样。 W3schools声称“include(或require)语句获取指定文件中存在的所有文本/代码/标记,并将其复制到使用include语句的文件中。” - http://www.w3schools.com/php/php_includes.asp

但它似乎不像副本那样工作,因为manualy复制会给出其他结果(变量$ rejon是可访问的)。

1)究竟需要做什么以及它的局限性是什么? 2)最重要的是 - 如何在two.php中检索$ rejon变量?

3 个答案:

答案 0 :(得分:1)

您可以通过以下两种方式执行此操作

1.使用会话

您可以将数据存储在会话中,而不是将其用于另一个文件two.php

<强> one.php

<?php
session_start();
$rejon = $_POST['rejon'];
$_SESSION['rejon'] = $rejon;
?>

<强> two.php

<?php
session_start();
echo $_SESSION['rejon'];
?>

<强> 2。包括该文件

我发现你在脚本中包含了文件two.php。如果您包含此文件,则可以直接使用变量$ rejon

<强> two.php

    <?php
echo $rejon;
    ?>

答案 1 :(得分:1)

适合我:

$ cat one.php
<?php
$rejon = 'this value came from POST';
require 'two.php';

$ cat two.php
<?php
echo $rejon . PHP_EOL;

$ php one.php
this value came from POST

W3Schools的描述是unsurprisingly,具有误导性。什么都没有复制。在require点读取,评估和插入文件的内容。关于变量,PHP手册说:

  

当包含文件时,它包含的代码会继承该变量   包含发生的行的范围。任何可用的变量   在调用文件中的那一行将在被调用的内容中可用   文件,从那时起。但是,所有功能和类   在包含文件中定义的具有全局范围。

这就是为什么我上面的例子可以正常工作的原因。

要诊断此问题,请继续简化代码以将其简化为最简单的示例。如果您尝试在两个内部的函数中使用$rejon,则需要将变量设置为全局变量。像:

global $rejon;
$rejon = $_POST['rejon'];
// now you have $GLOBALS['rejon'] everywhere

旁注,$_SESSION不应该是必要的,除非你越过页面刷新边界。

答案 2 :(得分:0)

您可以使用会话http://php.net/manual/en/book.session.php或常量http://php.net/manual/en/language.constants.php

Utkarsh已经为会议提供了一些例子。

要定义常量,请使用define()函数。

define('CONSTANT_NAME', CONSTANT_VALUE);

只要在使用之前定义并包含常量(如果在另一个文件中),您就可以在代码中调用CONSTANT_NAME来获取值。