PHP将变量传递到下一页


196

看起来很简单,但是我找不到很好的方法。

在第一页中说,我创建了一个变量

$myVariable = "Some text";

该页面的表单操作是“ Page2.php”。因此,在Page2.php中,如何访问该变量?我知道我可以在会话中做到这一点,但是我认为对于一个简单的字符串来说这太多了,我只需要传递一个简单的字符串(文件名)即可。

我该如何实现?

谢谢!


传递变量最好的和最简单的事情是我如何解释在这里:stackoverflow.com/questions/14465464/...
哈罗

Answers:


450

HTML / HTTP是无状态的,换句话说,您在上一页所做的/与当前页面完全无关。除非您使用会话,cookie或GET / POST变量之类的东西。会话和cookie非常易于使用,会话比cookie更加安全。更安全,但不完全安全。

会议:

//On page 1
$_SESSION['varname'] = $var_value;

//On page 2
$var_value = $_SESSION['varname'];

请记住,session_start();在尝试访问$_SESSION数组之前以及在将任何输出发送到浏览器之前,请在这两个页面上都运行该语句。

曲奇饼:

//One page 1
$_COOKIE['varname'] = $var_value;

//On page 2
$var_value = $_COOKIE['varname'];

会话和cookie之间的最大区别在于,如果您使用会话,则变量的值将存储在服务器上;如果使用cookie,则变量的值将存储在客户端上。我想不出使用cookie代替会话的任何好理由,除非您希望数据在会话之间持久存在,但是即使那样,最好还是将其存储在数据库中,并根据用户名或id检索它。

GET和POST

您可以在指向下一页的链接中添加变量:

<a href="page2.php?varname=<?php echo $var_value ?>">Page2</a>

这将创建一个GET变量。

另一种方法是在提交到第二页的表单中包含一个隐藏字段:

<form method="get" action="page2.php">
    <input type="hidden" name="varname" value="var_value">
    <input type="submit">
</form>

然后在第二页上:

//Using GET
$var_value = $_GET['varname'];

//Using POST
$var_value = $_POST['varname'];

//Using GET, POST or COOKIE.
$var_value = $_REQUEST['varname'];

post如果您想通过邮寄,只需将表单的方法更改为即可。两者同样不安全,尽管GET更易于破解。

当我第一次开始用PHP进行编码时,每个新请求(除了会话数据之外)都是脚本的全新实例,这一事实引起了我的注意。一旦习惯了,它就很简单了。


2
由于有了这些帮助,问题在于我在第一页中有很多变量,所以我要做的是创建一个包含所有这些变量的数组,然后使用会话将其发送到下一页。
卡洛(Carlo)

施韦特:)很高兴我能帮上忙。
Jrgns,2009年

4
Nitpick:PHP中的会话通常也由cookie处理。会话cookie不是持久性cookie,通常仅保存会话id。但这仍然是一个cookie。
体面的达布尔

详细阐述我自己的评论。原因是因为,正如您所说,HTTP是无状态的。因此,PHP仍然需要一种识别会话的方法。这是通过在具有会话ID的客户端上存储cookie来完成的。如果在客户端禁用了cookie,则PHP有时会利用$ _GET var将会话ID附加到页面之间的链接上。但这通常被认为是不安全的,因此大多数Web服务器(php.ini)通常都被禁用。
体面的达布尔

@fireeyedboy PHP会话也可以使用GET和POST变量进行传播。一天结束时,会话只需传递一个数据即可简化从一页到下一页的变量传递:会话ID。然后使用该会话ID检索以前保存的数据。
Jrgns 2012年

30

感谢您以上的回答。这是我的操作方法,希望对您有所帮助。我希望将注册号从一页传递到另一页,因此是regNameregValue

创建您的第一页,将其称为set_reg.php

<?php

session_start();

$_SESSION['regName'] = $regValue;

?>

<form method="get" action="get_reg.php">
    <input type="text" name="regName" value="">
    <input type="submit">
</form>

创建第二个页面,将其称为get_reg.php

<?php

session_start();

$regValue = $_GET['regName'];

echo "Your registration is: ".$regValue.".";

?>

<p><a href="set_reg.php">Back to set_reg.php</a>

尽管不如上面的答案那么全面,但出于我的目的,这以简单的方式说明了各个元素之间的关系。


13
您的示例也可以在没有会话的情况下工作,并且实际上没有通过会话机制(在get_reg.php中)获取数据。您正在通过具有get方法的表单发送regName,如Jrgns所述。因此,可以通过$ _GET数组在get_reg.php页面上访问该变量。
metatron'3

16

在请求中传递数据

您可以将其作为隐藏字段嵌入到表单中,也可以将其添加到表单操作网址中

 echo '<input type="hidden" name="myVariable" value="'.
     htmlentities($myVariable).'">';

要么

echo '<form method="POST" action="Page2.php?myVariable='.
    urlencode($myVariable).'">";

请注意,这还说明了在传递数据时使用htmlentitiesurlencode的情况。

在会话中传递数据

如果不需要将数据传递到客户端,则会话可能更合适。只需在每个页面的开头调用session_start(),就可以将数据获取并设置到$ _SESSION数组中。

安全

由于您声明的值实际上是文件名,因此需要注意安全性。如果文件名已从客户端到达,则假定用户已篡改该值。检查其有效性!当用户将路径传递到重要的系统文件或受其控制的文件时,会发生什么情况?可以使用您的脚本来“探测”服务器中是否存在文件吗?

正如您显然从这里开始一样,值得提醒您的是,这适用于到达$ _GET,$ _ POST或$ _COOKIE的任何数据-假设您最大的敌人精心制作了这些数组的内容,并进行相应的编码!


9

有三种方法可以在php中传递值。

  • 通过邮寄
  • 通过得到
  • 通过使会话变量

这三种方法有不同的用途,例如,如果我们想在下一页接收值,则可以使用'post'($ _POST)方法:-

$a=$_POST['field-name'];

如果我们要求变量的值在一页以上,则我们可以将会话变量用作:

$a=$_SESSION['field-name];

在使用此语法创建SESSION变量之前,我们首先必须在我们的php页面的开头添加此标记

session_start(); 

GET方法通常用于在同一页上打印数据,该数据通常用于接受用户输入。其语法如下:

$a=$_GET['field-name'];

POST方法通常比GET消耗更多安全性,因为当我们使用Get方法时,它可以在URL栏中显示数据。如果数据是更敏感的数据(例如密码),则可能是inggeris。


7

会话是唯一的好方法,您也可以使用GET / POST,但这可能不安全。


6

试试这个代码

使用隐藏字段,我们可以将php varibale传递到另一个页面

page1.php

<?php $myVariable = "Some text";?>
<form method="post" action="page2.php">
 <input type="hidden" name="text" value="<?php echo $myVariable; ?>">
 <button type="submit">Submit</button>
</form>

将php变量传递给隐藏字段值,以便您可以将此变量访问到另一个页面

page2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>

1
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

第2页

if(isset($_POST['x'])) {
    $new_value=$_GET['variable_name'];
}

1

会话是唯一的好方法,您也可以使用GET / POST,但这可能不安全。

在会话中传递数据如果不需要将数据传递给客户端,则会话可能更合适。只需在每个页面的开头调用session_start(),就可以将数据获取并设置到$ _SESSION数组中。

安全性由于声明值实际上是文件名,因此需要注意安全性。如果文件名已从客户端到达,则假定用户已篡改该值。检查其有效性!当用户将路径传递到重要的系统文件或受其控制的文件时,会发生什么情况?可以使用您的脚本来“探测”服务器中是否存在文件吗?

正如您显然只是从这里开始一样,值得提醒您的是,对于到达$ _GET,$ _ POST或$ _COOKIE的任何数据,这都是必要的-假设您最大的敌人精心制作了这些数组的内容,并据此进行编码!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.