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

什么是表单?

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

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

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

PHP Form

表单是一个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浏览器中查看上述代码将显示以下表单。

Create a form

此处,

  • <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的区别

GET vs POST Methods

GET vs POST Methods

处理注册表单数据

注册表单将数据提交给自己,如表单的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浏览器中查看以上页面

将显示以下表单

Simple Search Engine

输入大写的GET,然后单击提交按钮。

将显示以下内容

Simple Search Engine

下图显示了上述结果的URL

Simple Search Engine

请注意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>

在浏览器中查看以上表单

Working with Check boxes, Radio buttons

填写名和姓

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

点击提交按钮

您将看到以下结果

Working with Check boxes, Radio buttons

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

Working with Check boxes, Radio buttons

点击提交按钮

您将看到以下结果

Working with Check boxes, Radio buttons

摘要

  • 表单用于从用户获取数据
  • 表单是使用HTML标签创建的
  • 表单可以使用POST或GET方法提交给服务器进行处理
  • 通过POST方法提交的表单值封装在HTTP正文中。
  • 通过GET方法提交的表单值将被附加并显示在URL中。