我知道有类似的问题已被提出,但遗憾的是,我无法解决问题。
假设这种情况:在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变量?
答案 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来获取值。