之前章节有对表单讲解过,是分html和php文件实现的,html提交php接受,考虑到如果用户填写错误或者不规范,我们可以提醒,不用的到跳转之后再提醒,这里就用一个文件处理,在php文件嵌套html代码,from标签和from里面的元素是属性页面文件html代码,需要了解html。
index.php代码:
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <style> .error {color: #FF0000;} </style> </head> <body> <?php $nameErr = $emailErr = ""; $name = $email = $gender = $comment = $website = $associator= $road ="" ; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["name"])) { $nameErr = "姓名是必填的"; } else { $name = test_input($_POST["name"]); // 检查姓名是否包含字母和空白字符 if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "只允许字母和空格"; } } if (empty($_POST["email"])) { $emailErr = "电邮是必填的"; } else { $email = test_input($_POST["email"]); // 检查电子邮件地址语法是否有效 if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) { $emailErr = "无效的 email 格式"; } } if (empty($_POST["comment"])) { $comment = ""; } else { $comment = test_input($_POST["comment"]); } $website = test_input($_POST["website"]); $gender = test_input($_POST["gender"]); $associator = $_POST["associator"]; $road = $_POST["road"]; } function test_input($data) { $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <h2>PHP 表单验证实例</h2> <p><span class="error">* 必需的字段</span></p> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 名称:<input type="text" name="name"> <span class="error">* <?php echo $nameErr;?></span> <br><br> email:<input type="text" name="email"> <span class="error">* <?php echo $emailErr;?></span> <br><br> 网址:<input type="text" name="website"> <br><br> 会员:<select name="associator"> <option value="yes">是</option> <option value="no" selected="">否</option> </select> <br><br> 了解途径: <input type="checkbox" name="road[]" value="on-line" checked="">线上 <input type="checkbox" name="road[]" value="Under line">线下 <br><br> 评论:<textarea name="comment" rows="5" cols="40"></textarea> <br><br> 性别: <input type="radio" name="gender" value="female" checked="">女性 <input type="radio" name="gender" value="male">男性 <br><br> <input type="submit" name="submit" value="提交"> </form> <?php if(empty($nameErr) and empty($emailErr)){ //只有在用户填写符合规则的数据才显示 echo "<h2>您的输入:</h2>"; echo "名称:".$name; echo "<br>"; echo "email:".$email; echo "<br>"; echo "网址:".$website; echo "<br>"; echo "会员:".$associator; echo "<br>"; echo "了解途径:"; print_r($road); echo "<br>"; echo "评论:".$comment; echo "<br>"; echo "性别:".$gender; } ?> </body> </html>
现在我们看看from表单有那些元素:
表单的标签对是<from></from>,表单的元素都放在from标签对里,表单的 HTML 代码是这样的:
<form method="" action=""> </from>
名称、email和 网址 属于文本输入元素,评论字段是文本框。HTML 代码是这样的:
名称:<input type="text" name="name"> email:<input type="text" name="email"> 网址:<input type="text" name="website"> 评论:<textarea name="comment" rows="5" cols="40"></textarea>
性别 字段是单选按钮,HTML 代码是这样的:
性别: <input type="radio" name="gender" value="female" checked="">女性 <input type="radio" name="gender" value="male">男性
了解途径 元素是多选按钮,HTML代码是这样的:
了解途径: <input type="checkbox" name="road[]" value="on-line" checked="">线上 <input type="checkbox" name="road[]" value="Under line">线下
会员 元素是下拉列表,HTML代码是这样的:
会员: <select name="associator"> <option value="yes">是</option> <option value="no" selected="">否</option> </select>
提交 元素是按钮,HTML代码是这样的:
<input type="submit" name="submit" value="提交">
$_SERVER["PHP_SELF"] 是一种超全局变量,它返回当前执行脚本的文件名。因此,$_SERVER["PHP_SELF"] 将表单数据发送到页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息。
htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 < 和 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。