如何在PHP中使用表单

215 阅读8分钟

在PHP中使用表单

在基于Web的应用程序中收集用户输入时,我们主要使用HTML表单。它们的范围包括联系表单、登录表单,还有注册表单。表单是用户和服务器之间的基本接口。在网络应用程序上创建一个表单是通过HTML实现的。PHP将Web应用程序与数据库服务器连接起来。

通过这篇文章,你将学会如何。

  • 创建一个HTML表单。
  • 了解超文本传输协议(HTTP)的请求方法(GET,POST,和PUT)。
  • 理解PHP的POST和GET方法

前提条件

在我们开始之前,你应该有HTML、PHP和MySQL的知识。

表单概述

表单是一个带有空白字段的文件,供用户插入或更新数据。用户的数据被存储在数据库中并随时被检索。

在网络应用程序中使用表单来收集数据是一项简单的工作。

一些流行的表单包括。

  • 联系表格
  • 搜索表单
  • 登录表格
  • 注册表格

该表格呈现给用户,用户插入数据并使用submit 按钮提交表格。大多数情况下,表单数据被发送到服务器上进行处理。处理用户输入包括验证输入、数据库操作和向用户提供反馈。涉及到的数据库操作有四种,分别是创建、读取、更新和删除。这种模式通常被称为缩写为CRUD 操作。

超文本传输协议(HTTP)实现了客户端(浏览器)和服务器之间的通信。客户端向服务器发送一个HTTP请求,然后服务器返回一个响应。虽然HTTP支持多种方法,但我们将重点关注GETPOST 、和PUT 。数据的处理是基于所选择的方法。

GET 方法从服务器上获取数据。POST 方法从HTML表单中向服务器发送数据,以创建一个资源。PUT 方法向服务器发送数据,以创建或更新一个资源。有些开发者无法区分POST和PUT方法。

PUT方法是idempotent 。这意味着多次调用PUT方法不会影响数据库,因为数据已经被更新。相反,调用POST 方法会影响数据库,因为你创建了多个对象。

如何创建HTML表单

HTML表单可以包含特殊的元素,如按钮单选按钮复选框。因此,它使用户与网页的互动变得很容易。表格应该是用户友好的。这意味着,没有技术能力的用户应该能够使用它。

表格是由<form><\form> 标签定义的。form 标签围绕着所有的输入。它还给出了关于如何以及在何处提交表单的指示。HTML表单使用POSTGET 方法向你的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>

上述代码的输出如下面的截图所示。

HMTL Form

action 标明了提交表单输入的页面。数据可以在与表单相同的页面或不同的页面上提交。method 规定了数据的处理方式。这可以是POSTGET ,或PUTGET 方法从服务器上收集数据并在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

这些列是

  1. id
  2. 名字
  3. 电子邮件

创建一个数据库服务器连接

在创建数据库和表之后,我们需要一个连接到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操作。