如何在PHP脚本之间传递变量?

14

有没有办法在php脚本之间传递值和变量?

我曾试图编写一个登录页面,当用户第一次输入错误时,另一个脚本将检查输入内容,如果有误,则网站将返回上一个脚本页面并显示警告信息“输入不正确”。为了实现这个目的,我想需要在脚本之间传递值。

祝好…:P


PHP会话?http://php.net/manual/zh/book.session.php - GordonM
7个回答

24

通过GET传递信息:

    header('Location: otherScript.php?var1=val1&var2=val2');

会话:

    // first script
    session_start(); 
    $_SESSION['varName'] = 'varVal';
    header('Location: second_script.php'); // go to other

    // second script
    session_start(); 
    $myVar = $_SESSION['varName'];

文章:请看这里


5
你应该了解一下会话变量。这涉及将数据存储在与特定参考号(“会话ID”)相关联的服务器上,然后由浏览器在每个请求中发送(通常作为cookie)。服务器可以看到相同的用户正在访问页面,并设置$_SESSION超全局变量以反映此情况。
例如:

a.php

session_start(); // must be called before data is sent

$_SESSION['error_msg'] = 'Invalid input';

// redirect to b.php

b.php

<?php

session_start();

echo $_SESSION['error_msg']; // outputs "Invalid input"


这个运行得非常完美,尽管我有点困惑为什么在 b.php 中应该使用 "session_start()" 而不是更像 "session_continue()",因为它可能不会创建新的会话。 - user124384
这就是实际情况。如果没有session_start();,你无法读取会话变量。 - Michael Rogers

3

快速的方法是使用全局变量或会话变量。

global $variable = 'something';

“更好”的做法是将脚本包含,并通过参数传递变量,例如:
// script1.php contains function 'add3'
function add3( $value ) {
  return $value + 3;
}

// script2.php
include "script1.php";
echo 'Value is '.add3(2); // Value is 5

1
这是我最喜欢的方法。有时候你不能使用会话,但是这种方式甚至不需要。唯一的问题是你必须要这样做 global $variable; $variable = 'something'; 所以声明和赋值不能在同一行。 - Pavel

3

你不能直接include(或include_oncerequire)另一个脚本吗?


当您包含一个脚本时,所有变量是否都会被传递,还是只有全局变量? - Chris Kimpton
当您include另一个脚本时,它的代码会被“粘贴”到包含它的脚本中,因此它会得到与直接在第一个脚本中编写代码相同的东西。 - Albireo
谢谢 - 这和 require 不同吗?我尝试过 require,但好像没有做到这一点。 - Chris Kimpton
如果 include 找不到指定的文件,它会发出一个警告,而 require 将抛出一个致命异常。 - Albireo

0

我使用extract()方法在PHP脚本之间传递变量。它看起来像下面的例子:

1. 文件 index.php

<?php
$data = [
    'title'=>'hello',
    'content'=>'hello world'
];
extract($data);
require 'content.php';

2. 文件 content.php

<?php 
echo $title;
echo $content;

0

你可以使用以下方法:


0
我认为如果确实需要的话,您也可以将变量存储在缓存中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接