PHP 表单基础

目录

创建表单

表单处理

PHP 获取下拉菜单的数据

PHP 表单验证

文本字段

单选按钮

表单元素

其它

防止xss攻击

显示错误信息

验证 Name, E-mail, 和 URL

PHP $_GET 变量

PHP $_POST 变量


创建表单

        首先,需要在HTML中创建一个表单,让用户可以输入数据。表单通常使用 <form> 标签来定义,并设置相应的属性。

基本的表单结构:

<form action="process.php" method="post">
    <label for="username">用户名:</label>
    <input type="text" id="username" name="username" required>
    
    <label for="email">电子邮件:</label>
    <input type="email" id="email" name="email" required>
    
    <label for="password">密码:</label>
    <input type="password" id="password" name="password" required>
    
    <input type="submit" value="提交">
</form>

 

action 属性指定了表单数据提交的目标URL,这里是 process.php。表示当用户填完表单点击提交按钮后,表单的数据会被发送到名为process.php的文件。

method 属性定义了提交数据的方法,通常是 post 或 get

表单中包含了文本输入框、电子邮件输入框和密码输入框。

required 属性表示所有字段是必填的。

表单处理

        当处理 HTML 表单时,PHP 能把来自 HTML 页面中的表单元素自动变成可供 PHP 脚本使用。

        当用户提交表单时,数据将被发送到 action 属性指定的URL。在这个例子中,数据将被发送到 process.php 文件,我们需要在该文件中处理这些数据。

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 检查是否有数据提交
    if (isset($_POST['username']) && isset($_POST['email']) && isset($_POST['password'])) {
        $username = $_POST['username'];
        $email = $_POST['email'];
        $password = $_POST['password'];

        // 进行数据验证和处理
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            echo "无效的电子邮件地址!";
        } else {
            // 数据处理逻辑
            echo "用户名: $username<br>";
            echo "电子邮件: $email<br>";
            echo "密码: $password<br>";
        }
    } else {
        echo "缺少必要的表单数据!";
    }
}
?>

通过 $_SERVER["REQUEST_METHOD"] 检查请求方法是否为 POST

使用 $_POST 超全局变量来获取表单数据。

对数据进行了简单的验证(如电子邮件格式)。

输出了接收到的数据。

PHP 获取下拉菜单的数据

        首先,我们需要在HTML中创建一个下拉菜单。下拉菜单通常使用 <select> 标签来定义,并且每个选项使用 <option> 标签来指定。用于从用户那里获取选择项的时候。

 <form action="process.php" method="post">
        <label for="country">请选择国家:</label>
        <select id="country" name="country" required>
            <option value="china">中国</option>
            <option value="usa">美国</option>
            <option value="japan">日本</option>
            <option value="uk">英国</option>
        </select>
        <br><br>
        <input type="submit" value="提交">
    </form>

id 属性用于标识下拉菜单。

name 属性用于在提交表单时标识所选值。

<option> 标签定义了下拉菜单中的选项,value 属性定义了每个选项的值。

PHP 表单验证

文本字段

"名字", "E-mail", 及"网址"字段为文本输入元素

“名字”: <input type="text" name="name">
E-mail: <input type="text" name="email">

单选按钮

"性别"字段是单选按钮,使用radio表示是单选。

性别:
<input type="radio" name="gender" value="female">女
<input type="radio" name="gender" value="male">男

表单元素

保证该表单使用 method="post" 方法来提交数据。

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

_SERVER["PHP_SELF"]是超级全局变量,返回当前正在执行脚本的文件名。

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

其它

使用 empty() 检查字段是否为空。

 if (empty($_POST["password"])) {
        $passwordErr = "密码不能为空";
    }

使用正则表达式 preg_match() 验证用户名格式。

if (!preg_match("/^[a-zA-Z0-9]{3,20}$/", $username)) {
            $usernameErr = "用户名格式不正确";
        }

使用 filter_var() 验证电子邮件格式。

 if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailErr = "电子邮件格式不正确";
        }

使用字符串长度 strlen() 验证密码强度。

if (strlen($password) < 8) {
            $passwordErr = "密码至少需要8个字符";
        }

防止xss攻击

        首先我们对用户所有提交的数据都通过 PHP 的 htmlspecialchars() 函数处理。把一些预定义的字符转换为 HTML 实体。

当用户提交表单时,我们将做以下两件事情:

1.使用 PHP trim() 函数去除用户输入数据中不必要的字符 (如:空格,tab,换行)。

2.使用PHP stripslashes()函数去除用户输入数据中的反斜杠 (\)

将函数命名为 test_input()。

  function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }

显示错误信息

每个字段中添加了一些脚本, 各个脚本会在信息输入错误时显示错误信息。(如果用户未填写信息就提交表单则会输出错误信息):

名字: <input type="text" name="name">
   <span class="error">* <?php echo $nameErr;?></span>
   <br><br>
网址: <input type="text" name="website">
   <span class="error"><?php echo $websiteErr;?></span>
   <br><br>

验证 Name, E-mail, 和 URL

<?php
// 定义变量并默认设置为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["name"])) {
      $nameErr = "Name is required";
      } else {
         $name = test_input($_POST["name"]);
         // 检测名字是否只包含字母跟空格
         if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
         $nameErr = "只允许字母和空格"; 
         }
     }
   
   if (empty($_POST["email"])) {
      $emailErr = "Email is required";
   } else {
      $email = test_input($_POST["email"]);
      // 检测邮箱是否合法
      if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
         $emailErr = "非法邮箱格式"; 
      }
   }
     
   if (empty($_POST["website"])) {
      $website = "";
   } else {
      $website = test_input($_POST["website"]);
      // 检测 URL 地址是否合法
     if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
         $websiteErr = "非法的 URL 的地址"; 
      }
   }

}
?>

PHP $_GET 变量

预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。

从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏)

<form action="welcome.php" method="get">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">

method为get。

"welcome.php" 文件现在可以通过 $_GET 变量来收集表单数据

欢迎 <?php echo $_GET["fname"]; ?>!<br>
你的年龄是 <?php echo $_GET["age"]; ?>  岁。

在 HTML 表单中使用 method="get" 时,所有的变量名和值都会显示在 URL 中

注释:所以在发送密码或其他敏感信息时,不应该使用这个方法!

然而,正因为变量显示在 URL 中,因此可以在收藏夹中收藏该页面。在某些情况下,这是很有用的。

注释:HTTP GET 方法不适合大型的变量值。它的值是不能超过 2000 个字符的。

PHP $_POST 变量

预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值。

从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏)

<form action="welcome.php" method="post">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>

method此时为post。

"welcome.php" 文件现在可以通过 $_POST 变量来收集表单数据了

欢迎 <?php echo $_POST["fname"]; ?>!<br>
你的年龄是 <?php echo $_POST["age"]; ?>  岁。

也可以使用通用的request来收集表单数据。 

预定义的 $_REQUEST 变量包含了 $_GET、$_POST 和 $_COOKIE 的内容。

$_REQUEST 变量可用来收集通过 GET 和 POST 方法发送的表单数据。

欢迎 <?php echo $_REQUEST["fname"]; ?>!<br>
你的年龄是 <?php echo $_REQUEST["age"]; ?>  岁。

它可以接受 $_GET、$_POST等数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏箱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值