当您登录网站或邮箱时,您正在与表单进行交互。
表单用于从用户那里获取输入并将其提交到Web服务器进行处理。
下图说明了表单处理过程。
表单是一个HTML标记,其中包含图形用户界面项,例如输入框,复选框单选按钮等。
表单是使用 … 标记定义的,而GUI项是使用表单元素(例如输入)定义的。
我们将使用HTML标记创建表单。 以下是创建表单所需的最少内容。
下面的代码创建一个简单的注册表格
<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浏览器中查看以上代码将显示以下形式。
这里,
表单的action属性指定处理数据的提交URL。 method属性指定提交类型。
PHP POST方法
它具有以下语法。
<?php
$_POST['variable_name'];
?>
这里,
“ $ _POST […]”是PHP数组
“’variable_name’”是URL变量名称。
PHP GET方法
它具有以下语法。
<?php
$_GET['variable_name'];
?>
这里,
POST | GET |
网址中不可见的值 | URL中可见的值 |
由于它们是通过HTTP正文提交的,因此没有限制值的长度 | 对值的长度有限制,通常为255个字符。 这是因为这些值显示在URL中。 请注意,字符的上限取决于浏览器。 |
与Php_GET方法相比,性能较低,原因是将时间花费在将HTTP正文中的Php_POST值封装上 | 由于在URL中附加值的简单性质,因此与POST方法相比具有较高的性能。 |
支持许多不同的数据类型,例如字符串,数字,二进制等。 | 仅支持字符串数据类型,因为这些值显示在URL中 |
无法将结果标记为书签 | 由于URL中值的可见性,结果可以被标记为书签 |
The below diagram shows the difference between get and 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’])): ?>检查$ _POST []数组中是否已填写form_submitted隐藏字段,并显示感谢和名字消息。
如果未在$ _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>
在网络浏览器中查看以上页面
将显示以下表格
在大写字母中键入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>
在浏览器中查看以上表格
填写名字和姓氏
请注意,尚未选中“同意服务条款”复选框。
点击提交按钮
您将获得以下结果
单击返回到表单链接,然后选择复选框
点击提交按钮
您将获得以下结果