使用 GET、POST 方法的 PHP 注册表单示例

⚡ 智能摘要

PHP 中的表单处理通过 `$_POST` 和 `$_GET` 全局变量从 HTML 表单中获取用户输入并在服务器端进行处理。本教程将构建一个注册表单,解释 POST 和 GET 方法,比较它们,并演示如何处理字段、复选框和搜索输入。

  • 📝 表单的功能: HTML 表单通过文本框、复选框和按钮等字段收集用户输入,然后将其提交到服务器脚本。
  • 📬 POST 方法: $_POST 在 HTTP 正文中发送值,keeping 把它们从 URL适用于登录和敏感数据。
  • 🔗 GET 方法: $_GET 将值追加到 URL这样一来,搜索结果就可以被添加到书签,这对于搜索表单来说非常理想。
  • POST 与 GET: POST 请求没有实际的长度限制,并且支持多种数据类型;GET 请求较短,仅支持字符串,并且是可见的。
  • 正在处理输入: isset() 函数会检查字段是否已被提交,然后再读取并使用其值。
  • ☑️ 复选框: 复选框只有在被选中时才会发送值,因此 isset() 函数用于确认用户是否同意或选择了该选项。
  • 🤖 人工智能辅助: 人工智能工具可以生成经过验证的安全表单,并帮助诊断表单无法正确提交的原因。

PHP表单处理

什么是表格?

当你登录网站或邮箱时,你就是在与表单进行交互。

表单用于获取用户的输入并将其提交给 Web 服务器进行处理。

下图说明了表单处理过程。

PHP 表单

表单是一种 HTML 标签,其中包含图形用户界面元素,例如输入框、复选框、单选按钮等。

该表单是使用以下方式定义的: …标签和 GUI 项目是使用表单元素(例如输入框)定义的。

我们何时以及为何使用表格?

  • 表单在开发过程中非常有用ping 能够接受用户输入的灵活、动态的应用程序。
  • 可以使用表单编辑数据库中已有的数据。

建立表格

我们将使用 HTML 标签来创建表单。以下是创建表单所需的最少内容列表。

  • 打开和关闭表单标签…
  • 表单提交类型 POST 或 GET
  • . URL 它将处理提交的数据
  • 输入字段,例如输入框、文本区域、按钮、复选框等。

以下代码创建了一个简单的注册表单。

<html>
<head>
<title>Registration Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>

<h2>Registration Form</h2>

<form action="registration_form.php" method="POST"> First name:

<input type="text" name="firstname"> <br> Last name:

<input type="text" name="lastname">

<input type="hidden" name="form_submitted" value="1" />

<input type="submit" value="Submit">

</form>
</body>
</html>

在网络浏览器中查看上述代码将显示以下表单。

建立表格

这里,

  • …是开始和结束表格标签
  • action=”registration_form.php” method=”POST” 指定目标 URL 以及提交类型。
  • 名字/姓氏:输入框的标签
  • 是输入框标签
  • 是新行标签
  • 是一个隐藏值,用于检查表单是否已提交
  • 点击此按钮,即可将表单提交到服务器进行处理。

将表单数据提交到服务器

表单的 action 属性指定提交操作。 URL 处理数据的函数。method 属性指定提交类型。

PHP POST 方法

  • 这是 PHP 内置的超全局数组变量,用于获取通过 HTTP POST 方法提交的值。
  • 数组变量可以从程序中的任何脚本访问;它具有全局作用域。
  • 当您不想在表单中显示表单提交值时,此方法非常理想。 URL.
  • 使用 POST 方法的一个很好的例子是向服务器提交登录信息。

它具有以下语法。

<?php
$_POST['variable_name'];
?>

这里,

  • “$_POST[…]” 是 PHP 数组
  • “'variable_name'”是表单字段名称。

PHP GET 方法

  • 这是 PHP 内置的超全局数组变量,用于获取通过 HTTP GET 方法提交的值。
  • 数组变量可以从程序中的任何脚本访问;它具有全局作用域。
  • 此方法会将表单值显示在屏幕上。 URL.
  • 它非常适合搜索引擎表单,因为它允许用户将搜索结果添加到书签。

它具有以下语法。

<?php
$_GET['variable_name'];
?>

这里,

  • “$_GET[…]” 是 PHP 数组
  • “'variable_name'”是 URL 变量名。

GET 与 POST 方法

解决方案&帖子 的GET
数值不可见 URL 可见值 URL
由于值是通过 HTTP 请求正文提交的,因此对值的长度没有限制。 对数值长度有限制,通常为 255 个字符。这是因为数值要显示在屏幕上。 URL请注意,字符上限取决于浏览器。
由于需要花费时间将 POST 值封装到 HTTP 请求体中,因此其性能低于 GET 方法。 由于其将值附加到数据框中的简单方式,与 POST 方法相比,性能更高。 URL.
支持多种不同的数据类型,例如字符串、数值、二进制等。 仅支持字符串数据类型,因为值会显示在字符串中。 URL
结果无法收藏。 由于结果中数值的可见性,因此可以将其添加到书签。 URL

下图显示了 GET 和 POST 之间的区别。

GET 与 POST 方法

GET 与 POST 方法

处理注册表单数据

注册表单按照表单的action属性所指定的方式向其自身提交数据。

表单提交后,值会被填充到 $_POST 超全局数组中。

我们将使用 PHP isset 函数检查表单值是否已填入 $_POST 数组并处理数据。

我们将修改注册表单,使其包含处理数据的 PHP 代码。以下是修改后的代码。

<html>
<head>
<title>Registration Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>
<body>

<?php if (isset($_POST['form_submitted'])): ?> // this code is executed when the form is submitted

<h2>Thank You <?php echo $_POST['firstname']; ?> </h2>

<p>You have been registered as
<?php echo $_POST['firstname'] . ' ' . $_POST['lastname']; ?>
</p>

<p>Go <a href="/registration_form.php">back</a> to the form</p>

<?php else: ?>

<h2>Registration Form</h2>

<form action="registration_form.php" method="POST">

First name:
<input type="text" name="firstname">

<br> Last name:
<input type="text" name="lastname">

<input type="hidden" name="form_submitted" value="1" />

<input type="submit" value="Submit">

</form>

<?php endif; ?>
</body>
</html>

这里,

  • 检查 `$_POST[]` 数组中 `form_submitted` 隐藏字段是否已填写,如果已填写,则显示感谢信息和姓名。如果 `$_POST[]` 数组中 `form_submitted` 字段未填写,则显示表单。

More examples

简单的搜索引擎

我们将设计一个简单的搜索引擎,使用 PHP GET 方法作为表单提交类型。

为了简单起见,我们将使用 PHP if 语句 来确定输出。

我们将对上面的注册表单使用相同的 HTML 代码,并对其进行最少的修改。

<html>
<head>
<title>Simple Search Engine</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>

<?php if (isset($_GET['form_submitted'])): ?>

<h2>Search Results For <?php echo $_GET['search_term']; ?> </h2>
<?php if ($_GET['search_term'] == "GET"): ?>

<p>The GET method displays its values in the URL</p>

<?php else: ?>
<p>Sorry, no matches found for your search term</p>

<?php endif; ?>

<p>Go <a href="/search_engine.php">back</a> to the form</p>

<?php else: ?>

<h2>Simple Search Engine - Type in GET </h2>

<form action="search_engine.php" method="GET">

Search Term:
<input type="text" name="search_term">
<br>

<input type="hidden" name="form_submitted" value="1" />

<input type="submit" value="Submit">

</form>
<?php endif; ?>
</body>
</html>

请在网页浏览器中查看以上页面。

将显示以下表格。

简单搜索引擎

输入大写字母 GET,然后点击提交按钮。

以下内容将展示。

简单搜索引擎

下图显示了 URL 以上结果。

简单搜索引擎

注意 URL 已显示 search_term 和 form_submitted 的值。 尝试输入除 GET 以外的任何内容,然后点击提交按钮,看看会得到什么结果。

使用复选框、单选按钮

如果用户未选择复选框或单选按钮,则不提交任何值。如果用户选择了复选框或单选按钮,则提交值 1 或 true。

我们将修改注册表单代码,并添加一个允许用户同意服务条款的复选按钮。

<html>
<head>
<title>Registration Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?php if (isset($_POST['form_submitted'])): ?>
<?php if (!isset($_POST['agree'])): ?>
<p>You have not accepted our terms of service</p>
<?php else: ?>
<h2>Thank You <?php echo $_POST['firstname']; ?></h2>
<p>You have been registered as
<?php echo $_POST['firstname'] . ' ' . $_POST['lastname']; ?>
</p>
<p> Go <a href="/registration_form2.php">back</a> to the form</p>
<?php endif; ?>
<?php else: ?>
<h2>Registration Form</h2>
<form action="registration_form2.php" method="POST">
First name:
<input type="text" name="firstname">
<br> Last name:
<input type="text" name="lastname">
<br> Agree to Terms of Service:
<input type="checkbox" name="agree">
<br>
<input type="hidden" name="form_submitted" value="1" />
<input type="submit" value="Submit">
</form>
<?php endif; ?>
</body>
</html>

请在浏览器中查看以上表格。

使用复选框、单选按钮

请填写姓名(包括姓和名)。

请注意,“同意服务条款”复选框尚未被选中。

单击“提交”按钮。

您将获得以下结果。

使用复选框、单选按钮

点击返回表单链接,然后选中复选框。

使用复选框、单选按钮

单击“提交”按钮。

您将获得以下结果。

使用复选框、单选按钮

常见问题

$_GET 从以下位置读取值 URL 查询字符串中,`$_POST` 从请求体中读取值,而 `$_REQUEST` 合并 GET、POST 和 cookie 数据。建议使用特定的数组,以便准确了解值的来源。

永远不要直接信任原始输入。使用 `filter_var()` 或针对每个字段的规则进行验证,并使用 `htmlspecialchars()` 对输出进行转义以防止 XSS 攻击。使用预处理语句进行数据库写入以防止 SQL 注入。

常见原因包括表单方法使用了 GET 而不是 POST、输入框缺少 name 属性、操作错误等。 URL或者文件上传缺少 multipart/enctype 类型。请逐一检查表单是否存在这些问题。

是的。人工智能可以构建HTML表单,并进行服务器端验证、CSRF保护和转义输出。 Rev部署前,请查看每个字段的规则,并确认安全检查与您的应用程序匹配。

是的。分享表单和处理程序,人工智能可以发现方法不匹配、缺少名称属性、操作路径错误或阻止提交的验证分支,然后提出修复建议。

总结一下这篇文章: