简单的php表单制作

form有两个属性
action:提交地址
method:提交方式

数据传输方法

用超全局变量$_POST和$_GET来收集表单数据。
两种方法都是通过创建数组来收集数据。键名为表单控件的名称,值来自表单输入的数据。
这时表单中需要有php文件,传输方法,以及提交按钮。

POST

<form action ="test.php" method="post"> 意思为点击提交按钮后,该表单数据将传输到test.php文件供处理,传输方式是http post。此时注意post要小写,用VScode编写时回车自动变成大写了,结果出错。在php文件中,可以直接输出变量,如 echo $_POST["..."]; POST请求不会被缓存,不会保留在浏览器历史记录中,不能收藏为标签,对数据长度没有限制。通过POST方法从表单发送的信息对其他人是不可见的,可用于发送敏感数据。

GET

与POST使用方法一致

<form action="test.php" method="get"> echo $_GET["..."]; GET发送的信息对所有人可见,所有变量名和值都显示在URL中,对所发信息的数量有限制,大约在2000个字符,可发送非敏感数据。 ![发送的内容被显示在URL地址中](http://img.5iqiqu.com/images10/35/350ed9dbb1777c3e90d3d77e78b4d9b6.png)

REQUEST

看到别人说还有一种$_REQUEST方法,用于获取GET或POST传送的内容。用法一致。

GET还是POST

当提交表单时,服务器上不会有任何改变时,只应该用GET形式。因为搜索关键字在URL中,用户可以标记搜索结果页面,并且不需要再次输入搜索关键字就能返回该结果页面。但是如果在提交表单之后,删除了一个文件、更新了一个数据库,或者插入了一条记录,应该使用POST,因为如果用户标记了该页面(按下back按钮),将不会再次触发表单提交并且潜在地创建一条重复的记录。

表单验证

在表单数据提交后应对数据进行相应的验证,保证安全。如某些字段是必需填写,某些不必需,或者数据的正确性。

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 可以用这种方式来将数据传送到当前页面。 htmlspecialchars把特殊字符转换为 HTML 实体,< 和 > 之类的 HTML 字符会被替换为 &lt; 和&gt;。保证安全性。 $_SERVER["PHP_SELF"]是一种超全局变量,它返回当前执行脚本的文件名。 可以在被请求字段后面加一些脚本,如果需要,会生成恰当的错误消息(如果用户未填写必填字段就试图提交表单)。

 

1<html> 2 3<head> 4 <title>registration page</title> 5 <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 6 <style> 7 .error { 8 color: #ff0000; 9 } 10 </style> 11</head> 12 13<body> 14 <?php 15 $nameErr = $paswErr = $mailErr = $genderErr = ""; 16 $hasError = false; 17 if ($_SERVER["REQUEST_METHOD"] == "POST") { //是判断提交的数据是否是POST方式传来的 18 if (empty($_POST["username"])) { 19 $hasError = true; 20 $nameErr = "请输入用户名"; 21 } 22 else{ 23 if(!(preg_match("/\w+/",$_POST["username"]))) 24 { 25 $hasError=true; 26 $nameErr="格式错误,请重新输入"; 27 } 28 } 29 if (empty($_POST["password"])) { 30 $hasError = true; 31 $paswErr = "请输入密码"; 32 } else { 33 if (!preg_match("/^[A-Z]\w{5,}$/", $_POST["password"])) { 34 $hasError = true; 35 $paswErr = "密码格式不规范,请重新输入"; 36 } 37 } 38 if (empty($_POST["mail"])) { 39 $hasError = true; 40 $mailErr = "请输入邮箱地址"; 41 } else { 42 if (!preg_match("/^\w+\@\w+.com$/", $_POST["mail"])) { 43 $hasError = true; 44 $mailErr = "邮箱地址格式错误"; 45 } 46 } 47 if (empty($_POST["gender"])) { 48 $genderErr = "请填写性别"; 49 $hasError = true; 50 } 51 if (!$hasError){ 52 echo "注册成功!"; 53 var_dump($_POST); 54 } 55 56 } 57 ?> 58 <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>"> 59 <h1>用户注册</h1> 60 <span class="error">*标记部分为必填选项</span><br> 61 62 用户名:<input type="text" name="username" placeholder="请输入用户名" id="username" title="只允许数字字母下划线" /> 63 <span class="error">* <?php echo $nameErr; ?></span><br> 64 65 密码:<input type="password" name="password" placeholder="请输入密码" title="大写字母开头,可包含数字字母下划线,至少6位" /> 66 <span class="error">* <?php echo $paswErr; ?></span><br> 67 68 邮箱:<input type="text" name="mail" /> 69 <span class="error">* <?php echo $mailErr; ?></span><br> 70 71 性别:<label for="male"></label><!--label为input元素定义标注--> 72 <input type="radio" value="male" name="gender" id="male" /> 73 <label for="female"></label><!--"for" 属性把 label 绑定到另外一个元素,注意id--> 74 <input type="radio" value="female" name="gender" id="female" /> 75 <span class="error">* <?php echo $genderErr; ?></span><br> 76 77 爱好:阅读<input type="checkbox" value="read" name="interest[]" /> 78 运动<input type="checkbox" value="motion" name="interest[]" /> 79 音乐<input type="checkbox" value="music" name="interest[]" /><br> 80 81 出生年月:<select id="year" name="year"></select> 82 <select id="month" name="month"></select><br> 83 84 自我介绍:<textarea name="intro" cols="80" rows="5">Hi!I'm zarm. 85 </textarea><br> 86 <input type="submit" value="提交" /> 87 </form> 88 <script> 89 function birth() { 90 for (var i = 1960; i < 2020; i++) { 91 var year = document.createElement("option"); 92 year.text = i + "年"; 93 year.value = i; 94 document.getElementById("year").add(year); 95 } 96 for (var n = 1; n < 13; n++) { 97 var month = document.createElement("option"); 98 month.text = n + "月"; 99 month.value = n; 100 document.getElementById("month").add(month); 101 } 102 } 103 birth(); 104 </script> 105 106</body> 107 108</html> 109

 

代码交流 2021