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等数据。