在PHP中使用表单
在基于Web的应用程序中收集用户输入时,我们主要使用HTML表单。它们的范围包括联系表单、登录表单,还有注册表单。表单是用户和服务器之间的基本接口。在网络应用程序上创建一个表单是通过HTML实现的。PHP将Web应用程序与数据库服务器连接起来。
通过这篇文章,你将学会如何。
- 创建一个HTML表单。
- 了解超文本传输协议(HTTP)的请求方法(GET,POST,和PUT)。
- 理解PHP的POST和GET方法。
前提条件
在我们开始之前,你应该有HTML、PHP和MySQL的知识。
表单概述
表单是一个带有空白字段的文件,供用户插入或更新数据。用户的数据被存储在数据库中并随时被检索。
在网络应用程序中使用表单来收集数据是一项简单的工作。
一些流行的表单包括。
- 联系表格
- 搜索表单
- 登录表格
- 注册表格
该表格呈现给用户,用户插入数据并使用submit 按钮提交表格。大多数情况下,表单数据被发送到服务器上进行处理。处理用户输入包括验证输入、数据库操作和向用户提供反馈。涉及到的数据库操作有四种,分别是创建、读取、更新和删除。这种模式通常被称为缩写为CRUD 操作。
超文本传输协议(HTTP)实现了客户端(浏览器)和服务器之间的通信。客户端向服务器发送一个HTTP请求,然后服务器返回一个响应。虽然HTTP支持多种方法,但我们将重点关注GET 、POST 、和PUT 。数据的处理是基于所选择的方法。
GET 方法从服务器上获取数据。POST 方法从HTML表单中向服务器发送数据,以创建一个资源。PUT 方法向服务器发送数据,以创建或更新一个资源。有些开发者无法区分POST和PUT方法。
PUT方法是idempotent 。这意味着多次调用PUT方法不会影响数据库,因为数据已经被更新。相反,调用POST 方法会影响数据库,因为你创建了多个对象。
如何创建HTML表单
HTML表单可以包含特殊的元素,如按钮、单选按钮和复选框。因此,它使用户与网页的互动变得很容易。表格应该是用户友好的。这意味着,没有技术能力的用户应该能够使用它。
表格是由<form><\form> 标签定义的。form 标签围绕着所有的输入。它还给出了关于如何以及在何处提交表单的指示。HTML表单使用POST 或GET 方法向你的PHP脚本发送数据。
下面是一个表单的例子,它将数据提交给一个名为index.php 的文件。要有一个完整的源代码,请使用这个HTML代码,并在必要时将方法改为POST或GET。
<!DOCTYPE html>
<html lang="en">
<head>
<title>HTML Form</title>
</head>
<body>
<h1>HTML Form</h1>
<form method="" action="index.php">
Name: <input type="text" name="name"><br><br/>
Email: <input type="text" name="email"><br/>
<br/>
<input type="submit" value="submit" >
</form>
</body>
</html>
上述代码的输出如下面的截图所示。

action 标明了提交表单输入的页面。数据可以在与表单相同的页面或不同的页面上提交。method 规定了数据的处理方式。这可以是POST ,GET ,或PUT 。GET 方法从服务器上收集数据并在URL中发送。通过POST 方法提交的数据存储在HTTP请求体中,不能在URL中看到。
POST方法
POST 是一个超全局方法,它收集表单数据并将其提交给HTTP服务器。输入的数据被编码,内容被隐藏。POST方法有一个全局范围,数据可以从任何脚本访问。
POST方法是首选,因为通过它发送的数据在URL中是不可见的。POST方法也很重要,因为数据不能通过查看Web服务器的日志来解码。
POST对从表单发送的数据量没有限制。这是因为数据是通过HTTP请求的主体提交的。POST 方法适用于login 表单。
处理表单数据(PHP脚本)
下面的PHP代码可以用来处理来自HTML表单的POST方法的输入。这段代码应该放在脚本中,也就是表单的目标。
它可以是在HTML表单所在的同一个脚本中,也可以是在另一个脚本中。在本例中,我们将把PHP代码放在与HTML表单相同的脚本中。
<?php
# Check if name and email fileds are empty
if(empty($_POST['name']) && empty($_POST['email'])){
# If the fields are empty, display a message to the user
echo " <br/> Please fill in the fields";
# Process the form data if the input fields are not empty
}else{
$name= $_POST['name'];
$email= $_POST['email'];
echo ('Your Name is: '. $name. '<br/>');
echo ('Your Email is:' . $email. '<br/>');
}
?>
上述代码的输出如下面的动画所示。
GET方法
GET 是默认的超级全局方法,从服务器上收集或检索数据。它有一个全局范围。因此,可以从程序中的任何脚本访问数据。GET方法在URL中提交数据。
通过这种方法传输的数据在HTTP请求的URL上是可见的。HTTP请求可以被缓存并保存在浏览器历史中。GET方法的缺点是,它不应该被用于敏感数据,如密码,因为它不安全。
GET方法对从表单中发送的数据量有限制。在URL上发送的数据取决于网络服务器的操作系统和浏览器的类型。
大多数系统的限制是255 字符。使用GET方法的最好例子是搜索引擎的表单。下面的代码可以用来处理一个HTML表单,方法设置为GET 。
<?php
# Check if name and email fileds are empty
if(empty($_GET['name']) && empty($_GET['email'])){
# If the fields are empty, display a message to the user
echo "Please fill in the fields";
# Process the form data if the input fields are not empty
}else{
$name= $_GET['name'];
$email= $_GET['email'];
echo ('Welcome: '. $name. '<br/>');
echo ('This is your email address:' . $email. '<br/>');
}
?>
下面是GET方法例子的输出。
GET和POST方法的表格比较
| POST方法 | GET方法 |
|---|---|
| 不可能将结果加入书签。 | 可以将结果加入书签。 |
| 数据不会留在浏览器历史中。是隐藏的。 | 数据保留在浏览器历史记录中。 |
| 性能很低,因为POST无法解码数据。 | 性能高,因为显示数据的性质简单。 |
| 它更安全 | 它的安全性较低 |
| 不限制发送至服务器的数据量。 | 限制发送至服务器的数据量。 |
| 它可以处理敏感数据。 | 它不能与敏感数据一起工作。 |
HTML表单和MySQL数据库CRUD操作
我们将学习如何使用HTML表单对MySQL数据库进行CRUD操作。我们将学习如何使用HTML表单来创建、读取、更新和删除MySQL数据库中的数据。
首先,创建一个MySQL数据库并将其命名为crud 。创建一个带有three列的表,将其命名为user 。
这些列是
- id
- 名字
- 电子邮件
创建一个数据库服务器连接
在创建数据库和表之后,我们需要一个连接到MySQL数据库服务器的PHP脚本。创建一个名为connect.php 的文件,并在其中放置以下代码。脚本会与MySQL数据库服务器建立连接。
<?php
$servername = "localhost";
$username = "root"; # MySQL user
$password = ""; # MySQL Server root password
$dbname='crud'; # Database name
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
# Display an error mesage if the connection fails
die("Connection failed: " . $conn->connect_error);
}
?>
我们稍后将使用include() 函数包含这个文件。
include("connect.php")
创建
要在数据库中创建一条记录,使用下面的代码。一旦表单通过POST 方法提交,它就会被处理,并在表user 中创建一条记录。
<?php
// Include script to make a database connection
include("connect.php");
// Check if input fileds are empty
if(empty($_POST['name']) && empty($_POST['email'])){
// If the fields are empty, display a message to the user
echo "Please fill in the fields";
// Process the form data if the input fields are not empty
}else{
$name= $_POST['name'];
$email= $_POST['email'];
echo ('Your Name is: '. $name. '<br/>');
echo ('Your Email is:' . $email. '<br/>');
# Insert into the database
$query = "INSERT INTO user(name,email) VALUES ('$name','$email')";
if (mysqli_query($conn, $query)) {
echo "New record created successfully !";
} else {
echo "Error inserting record: " . $conn->error;
}
}
?>
这里是表单。
<!DOCTYPE html>
<html lang="en">
<head>
<title>FORMS</title>
</head>
<body>
<h1>Form</h1>
<form method="post" action="form-post.php">
Name: <input type="text" name="name"><br><br/>
Email: <input type="text" name="email"><br/>
<br/>
<input type="submit" name="save" value="submit" >
</form>
</body>
</html>
下面的视频显示了上面的代码是如何工作的。
注意:在我们提交表单输入后,数据库中会创建一条新的记录,并显示在表格中。
阅读
下面的代码检索插入的数据,并将其显示在一个HTML表格中。
<?php
# Include script to make a database connection
include("connect.php")
$ Read From the database and display in the table
$query2 = "SELECT * FROM user";
$result = $conn->query($query2);
if ($result->num_rows > 0) {
# Output data for each row
echo "<table id='tsa' border='1' id='example' class='table table-striped responsive-utilities table-hover'>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
<th>Action 1</th>
<th>Action 2</th>
</tr>
</thead>
";
while($row = $result->fetch_assoc()) {
echo "<tr id='green' ",">",
"<td>", $row["id"],"</td>",
"<td>", $row["name"],"</td>",
"<td>", $row["email"],"</td>",
"<td>",
"<form action='update.php' method='post'>
<input name='id' value='",$row["id"],"' hidden>
<button type='submit' name='update' value='update'>Edit</button>
</form>",
"</td>",
"<td>",
"<form action='form-post.php' method='post'>
<input name='id' value='",$row["id"],"' hidden>
<button type='submit' name='delete' value='delete'>Delete</button>
</form>",
"</td>",
"</tr>";
}
echo "</table>";
}else {
echo "No Records!";
}
?>
下面是一个读操作的动画。
更新
HTML表格被用来更新数据库中的现有数据。在这种情况下,我们将实现更新功能。当我们点击表格单元格中的edit 按钮时,会显示update form 。
请注意用于创建表格上的编辑按钮的代码。update 按钮是一个带有隐藏输入字段的表格的submit 按钮。
一旦点击了edit 按钮,要编辑的项目的id 被发送到脚本update.php 。既可以使用GET ,也可以使用POST 方法。
<td>
<form action='update.php' method='post'>
<input name='id' value='",$row["id"],"' hidden>
<button type='submit' name='update' value='update'>Edit</button>
</form>
</td>
在update.php 脚本中,会显示一个与所提交信息相匹配的数据的表格,供编辑。一旦编辑完成,更新的数据将被重新提交给脚本进行处理。在这种情况下,我们使用同一个脚本来处理update 。
下面的脚本是用来更新数据的。
<?php
// Include script to make a database connection
include("connect.php");
// Empty string to be used later
$name='';
$email='';
$id='';
// Button click to update using POST method
if(!empty($_POST['update']) && !empty($_POST['id']) ) {
$id=$_POST['id'];
// Fetch record with ID and populate it in the form
$query2 = "SELECT * FROM user WHERE id='".$_POST['id']."' ";
$result = $conn->query($query2);
if ($result->num_rows > 0) {
// Output data for each row
while($row = $result->fetch_assoc()) {
$name=$row["name"];
$email=$row["email"];
}
echo "Current Details: " ."<b> - Name:</b> " . $name. " <b>Email:</b>" . $email. "<br>";
} else {
echo "Error updating";
}
}
// Button click to update using GET method
if(!empty($_GET['update']) && !empty($_GET['id']) ) {
$id=$_GET['id'];
// Fetch record with id and populate it in the form
$query2 = "SELECT * FROM user WHERE id='".$_GET['id']."' ";
$result = $conn->query($query2);
if ($result->num_rows > 0) {
// Output data for each row
while($row = $result->fetch_assoc()) {
$name=$row["name"];
$email=$row["email"];
}
echo "Current Details: " ."<b> - Name:</b> " . $name. " <b>Email:</b>" . $email. "<br>";
} else {
echo "Error updating";
}
}
// Check that the input fields are not empty and process the data
if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['id']) ){
// Insert into the database
$query = "UPDATE user SET name='".$_POST['name']."', email='".$_POST['email']."' WHERE id='".$_POST['id']."' ";
if (mysqli_query($conn, $query)) {
echo "Record updated successfully!<br/>";
echo '<a href="form-get.php">Get Form</a><br/>
<a href="form-post.php">Post Form</a>';
die(0);
} else {
// Display an error message if unable to update the record
echo "Error updating record: " . $conn->error;
die(0);
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>FORM</title>
</head>
<body>
<h1>Form</h1>
<p>Edit the record</p>
<form method="POST" action="update.php">
ID: <input type="text" name="id" value="<?php echo($id); ?>" required><br><br/>
Name: <input type="text" name="name" value="<?php echo($name); ?>" required><br><br/>
Email: <input type="text" name="email" value="<?php echo($email); ?>" required><br/>
<br/>
<input type="submit" value="update">
</form>
</body>
</html>
下面的视频显示了更新功能在浏览器上的工作情况。
删除
要删除表中的一条记录,用户点击HTML表中的delete 按钮。
请注意用于在表格单元格内显示按钮的代码。
<td>
<form action='form-post.php' method='post'>
<input name='id' value='",$row["id"],"' hidden>
<button type='submit' name='delete' value='delete'>Delete</button>
</form>
</td>
submit 按钮有一个隐藏的id 字段。数据被发送到一个表格,并由下面的PHP脚本处理。如果id 不是空的,那么提交了id 的记录将被删除。
// Check that the input fields are not empty and process the data
if(!empty($_POST['delete']) && !empty($_POST['id'])){
$query3 = "DELETE FROM user WHERE id='".$_POST['id']."' ";
if (mysqli_query($conn, $query3)) {
echo "Record deleted successfully !";
} else {
// Display an error message if unable to delete the record
echo "Error deleting record: " . $conn->error;
}
}
删除功能的工作原理如下面的视频所示。
结论
综上所述,HTTP请求实现了客户端和服务器之间的通信。我们已经学会了如何使用PHP创建HTML表单和处理数据。我们还了解了POST、PUT和GET方法。
我们学会了POST ,创建数据,GET ,从服务器上读取数据,以及PUT更新服务器上的数据。我们学会了如何使用PHP对MySQL数据库进行CRUD操作。