使用 GET、POST 方法的 PHP 注册表单及示例
什么是表单?
当您登录网站或邮箱时,您就在与表单进行交互。
表单用于从用户获取输入,并将其提交给Web服务器进行处理。
下图说明了表单处理过程。
表单是一个HTML标签,它包含图形用户界面项,例如输入框、复选框、单选按钮等。
表单使用<form>…</form>标签定义,GUI项使用input等表单元素定义。
我们何时以及为何使用表单?
- 在开发接受用户输入的灵活和动态的应用程序时,表单非常有用。
- 表单可用于编辑数据库中已有的数据
创建表单
我们将使用HTML标签创建表单。以下是创建表单所需的最低限度的列表:
- 开闭表单标签<form>…</form>
- 表单提交类型 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>
在Web浏览器中查看上述代码将显示以下表单。
此处,
- <form…>…</form> 是表单的开闭标签
- action=”registration_form.php” method=”POST”> 指定目标URL和提交类型。
- 姓/名:是输入框的标签
- <input type=”text”…> 是输入框标签
- <br> 是换行标签
- <input type=”hidden” name=”form_submitted” value=”1″/> 是一个隐藏值,用于检查表单是否已被提交
- <input type=”submit” value=”提交”> 是一个按钮,点击后将表单提交给服务器进行处理
将表单数据提交给服务器
表单的 action 属性指定处理数据的提交 URL。method 属性指定提交类型。
PHP POST 方法
- 这是内置的PHP超级全局数组变量,用于获取通过HTTP POST方法提交的值。
- 该数组变量可以在程序中的任何脚本中访问;它具有全局作用域。
- 此方法非常适合当您不想在URL中显示表单帖子值时使用。
- 使用POST方法的一个好例子是在向服务器提交登录详细信息时。
它具有以下语法。
<?php $_POST['variable_name']; ?>
此处,
- “$_POST[…]”是 PHP 数组
- “’variable_name’” 是URL变量名。
PHP GET 方法
- 这是内置的PHP超级全局数组变量,用于获取通过HTTP GET方法提交的值。
- 该数组变量可以在程序中的任何脚本中访问;它具有全局作用域。
- 此方法会在URL中显示表单值。
- 它非常适合搜索引擎表单,因为它允许用户书签化结果。
它具有以下语法。
<?php $_GET['variable_name']; ?>
此处,
- “$_GET[…]”是PHP数组
- “’variable_name’” 是URL变量名。
GET 与 POST 方法
POST | GET |
---|---|
值不在URL中显示 | 值在URL中显示 |
由于值通过HTTP正文提交,因此没有长度限制 | 值长度有限制,通常为255个字符。这是因为值会显示在URL中。请注意,字符上限取决于浏览器。 |
由于封装PHP POST值在HTTP正文中的时间,其性能低于Php_GET方法 | 由于将值附加到URL的简单性质,其性能高于POST方法。 |
支持多种不同的数据类型,如字符串、数字、二进制等。 | 仅支持字符串数据类型,因为值会显示在URL中 |
结果不能被书签化 | 由于URL中可见值,结果可以被书签化 |
下图显示了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>
此处,
- <?php if (isset($_POST[‘form_submitted’])): ?> 检查form_submitted隐藏字段是否已在$_POST[]数组中填充,并显示感谢语和名字消息。
如果$_POST[]数组中未填充form_fobmitted字段,则显示表单。
更多示例
简单的搜索引擎
我们将设计一个简单的搜索引擎,使用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>
在Web浏览器中查看以上页面
将显示以下表单
输入大写的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>
在浏览器中查看以上表单
填写名和姓
请注意,“同意服务条款”复选框未被选中。
点击提交按钮
您将看到以下结果
点击“返回表单”链接,然后选中复选框
点击提交按钮
您将看到以下结果
摘要
- 表单用于从用户获取数据
- 表单是使用HTML标签创建的
- 表单可以使用POST或GET方法提交给服务器进行处理
- 通过POST方法提交的表单值封装在HTTP正文中。
- 通过GET方法提交的表单值将被附加并显示在URL中。