1.回顾:上篇讲了 php的函数,数组,全局变量和超全局变量

2.超全局变量$_GET 和 $_POST 用于收集表单数据 (form-data)


echo $_POST['name'];
echo $_POST['email'];
echo $_GET['name'];
echo $_GET['email'];



3.测试HTML为:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>php</title>
<style>
.error {
margin-left: 5px;
color: #f00;
font-family: 'Adobe Arabic';
font-size: 12px;
}
</style>
</head>
<body>
<hr>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
Name: <input type="text" name="name" value="<?php echo $name;?>"><span class="error"><?php echo $nameerr;?></span><br><br>
E-Mail: <input type="text" name="email" value="<?php echo $email;?>"><span class="error"><?php echo $emailerr;?></span><br><br>
Website:<input type="text" name="website" value="<?php echo $website;?>"><span class="error"><?php echo $websiteerr;?></span><br><br>
Comment:<textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea><span class="error"><?php echo $commenterr;?></span><br><br>
Gender: <input type="radio" name="gender" checked <?php if(isset($gender)&&$gender=="女") echo "checked";?> value="女">女
<input type="radio" name="gender" <?php if(isset($gender)&&$gender=="男") echo "checked";?> value="男">男<br><br>
<input type="submit"><br>
</form>

<hr>

Welcome , <?php echo $_POST['name'];?> !<br>
你的邮箱地址是:<?php echo $_POST['email']?> .

Welcome , <?php echo $_GET['name'];?> !<br>
你的邮箱地址是:<?php echo $_GET['email']?> .

</body>
</html>


4.表单action 注意事项

#02.表单action
#$_SERVER['PHP_SELF'] 是一种超全局变量,返回当前执行的文件名
#用$_SERVER['PHP_SELF'] 是将表单数据发送到页面本身,而不是转到另一个页面
#这样用户就可以获得错误提示信息
#什么是htmlspecialchars()函数?
#htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的
#HTML 字符会被替换为 < 和 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。
<span style="color:#ff0000;"> echo htmlspecialchars($_SERVER['PHP_SELF']);
echo $_SERVER['PHP_SELF'];
#避免$_SERVER['PHP_SELF']被黑客利用:通过使用htmlspecialchars($_SERVER['PHP_SELF']);</span>

5.验证表单操作:保存url和邮箱

#03.PHP 验证表单数据
#03.1 使用htmlspecialchars()函数所有变量
#03.2 使用trim() 函数 去除用户输入数据中不必要的字符
#03.3 使用stripsalshes()函数 删除用户输入数据中的反斜杠 \
#03.4 可以创建一个测试检测函数,提高效率
#03.5 判读后,需要提醒用户输入错误

//声明表单字段
$name=$email=$gender=$comment=$website="";
//声明错误信息
$nameerr=$emailerr=$gendererr=$commenterr=$websiteerr="";

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


//03.6.使用test_input函数验证防止黑客注入,和判断是否正常数据
//03.7.使用empty()函数,判断是否为空
//03.8.判断 邮箱格式和URL格式
if($_SERVER["REQUEST_METHOD"]=="POST"){
if(empty($_POST["name"])){
$nameerr=" * 姓名不能为空";
}else{
$name=test_input($_POST["name"]);
}
if(empty($_POST["email"])){
$emailerr=" * 邮箱不能为空";
}else{
$email=test_input($_POST["email"]);
//在这里判断邮箱
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
$emailErr = "无效的 email 格式!";
}
}
if(empty($_POST["comment"])){
$commenterr="* 内容呢";
}else{
$comment=test_input($_POST["comment"]);
}
if(empty($_POST["website"])){
$websiteerr=" * 请输入正确网址";
}else{
$website=test_input($_POST["website"]);
//判断网址是否正确
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "无效的 URL";
}
}
$gender=test_input($_POST["gender"]);
}

#04 用户提交表单后保留输入字段中的值
#在 comment 文本框字段中,我们把脚本放到了 <textarea> 与 </textarea> 之间。这些脚本输出 $name、$email、$website 和 $comment 变量的值。