PHP页面如何检索表单数据?

问题描述 投票:0回答:3

我是 PHP 新手,正在学习 W3Schools 上的 PHP 课程。在课程的表单处理部分,我读到有两种处理表单数据的方法:POSTGET。据我所知,根据所使用的方法,会创建一个超级全局变量,它将数据存储为键值对。在目标页面,从该变量检索数据(使用

$_POST["key"]
$_GET["key"]
)。

但我的问题是:超全局变量(

$_POST
$_GET
)存储在哪里?如果它位于表单所在的同一页面上,则如何由
action
标记的
form
属性中指定的另一个目标页面访问它?

服务器上的所有页面是否都可以访问相同的一组超全局变量(与我目前认为每个页面都有自己的一组变量相反)?

下面的代码应该让我的问题更清楚:

文件index.php

<html>
<body>

<form action="welcome.php" method="post">
    Name: <input type="text" name="name"><br>
    E-mail: <input type="text" name="email"><br>
    <input type="submit">
</form>

</body>
</html>

文件welcome.php

<html>
<body>

    Welcome <?php echo $_POST["name"]; ?><br>
    Your email address is: <?php echo $_POST["email"]; ?>

</body>
</html>

W3Schools 解释如下:

当用户填写上面的表单并单击提交按钮时,表单数据将发送到名为“welcome.php”的 PHP 文件进行处理。表单数据通过 HTTP POST 方法发送。 要显示提交的数据,您只需回显所有变量即可。

变量

$_POST["name"]
$_POST["email"]
如何到达welcome.php

php html forms
3个回答
3
投票

超级全局不是指变量的生命周期,而是指变量可以访问的范围。

会话变量可以被其他页面访问。

另外,关于你的评论“如果是这样的话,第二个.php如何显示在第一个.php中输入的表单数据?”

first.php 应该将数据保存到数据库中。 secondary.php 应该从数据库读取数据。如果您是新手,我建议您将 MySQL 作为数据库。它与 PHP 配合得很好。


2
投票

当您向 Web 服务器(即 apache、nginx)发送请求时,请求会被解析为可以理解的片段。然后,在 PHP 的情况下,请求的文件将连同请求中的数据发送到 PHP 解释器。

在您的示例中,您需要一个表单来向页面发送 POST 请求

welcome.php
。 (如果您不熟悉请求方法 GET/POST/etc,那么 w3schools 对此有一个简单的解释:http://www.w3schools.com/tags/ref_httpmethods.asp)您的表单将方法设置为
 post
,这可能是
get
,但通常不会。如果用户按下标签内的提交按钮,则表单将使用
action
中设置的方法将请求发送到
method
中设置的页面。您的表单将发送一个
POST
请求,其中包含数据名称 =“...”和电子邮件 =“...”。

当这个请求到达PHP时,发送给它的所有数据都将存储在方法全局变量中。所有 post 请求都将数据放在 $_POST 中,所有 get 请求都将数据放在 $_GET 中。

因此,当您提交表单

POST
请求时,您的浏览器 (Firefox/Chrome) 将使用方法
welcome.php
请求页面
POST
,并在该请求中发送数据
name
email
。在您的服务器上,PHP 将打开文件
welcome.php
并将数据放入 $_POST 数组中。然后,由于 $_POST 是全局的,因此
welcome.php
内的任何位置都可以访问此变量。

如果您手动转到页面

welcome.php
,您将执行
GET
请求。一般来说,发送帖子请求的唯一方法是通过表单。因此手动转到该页面会将 $_POST 设置为空数组。

当我学习 PHP 时,我几乎总是在页面顶部显示这些行,这样我就知道发生了什么:

<pre><?php print_r($_GET);?></pre>
<pre><?php print_r($_POST);?></pre>

这将以漂亮的格式打印出数组,并且标签将确保它们在浏览器中格式正确(因为 print_r 使用换行符,浏览器会忽略这些字符,除非在 pre 标签中)。

您还可以将

print_r
var_dump
交换以获取有关该变量的更多信息。

这是一个简单的答案,网络技术还有更多内容。一旦你足够了解 PHP,我就会转向像 CakePHP 或 CodeIgniter 这样的框架,它们会带走很多细节。不过,首先了解基础知识很重要。


2
投票

关于您的编辑:

<form action="welcome.php" method="post">

method="post"
位意味着当用户点击“提交”(或任何触发器
action="welcome.php"
)时,将从
form
元素收集数据并将其作为POST数据发送到操作目标——因为它是一个php文件,然后您可以通过超全局
$_POST
访问此数据,正如您所注意到的。

name
内每个
input
中的
form
属性为发送的POST数据的每个元素设置键,用户在
input
中输入的任何内容都将是与该元素相对应的值关键。

例如,如果用户为

name
输入“foo”,为
email
输入“bar”,则
$_POST
中的
welcome.php
数据应类似于:

Array
(
    [name] => foo
    [email] => bar
)
© www.soinside.com 2019 - 2024. All rights reserved.