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 注意事项
5.验证表单操作:保存url和邮箱#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>
#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 变量的值。