7天入门php-基础表单处理
2016-10-01 11:52
721 查看
表单是web 开发中的重要部分,此节熟悉基本的表单处理。
回顾下表单元素form的基本属性:
method:GET/POST;
action:表单将提交到的url。
特点:可通过<?php ...?>赋值,且php中页面不需配置(不像JSP 有web.xml),action更容易写。
target:新的页面将在哪打开。
entype:取值:
1、application/x-www-form-urlencoded:默认,发送表单前对所有字符进行编码;
2、text/plain:空格转换为“+”,但不对特殊值字符编码;
3、multipart/form-data:不对字符编码,但对包含文件上传控件(如type 为file的input)的表单时,必须使用该值。
说明:html5中有许多新的有意思的属性,如有的能覆盖form的method等属性。
一、$_GET 与 $_POST 超全局变量。
GET 与 POST 被视作$_GET 与 $_POST,为超全局变量。GET 与 POST 都创建数组,如array(key=>value,key2=>value2...);其中key 是form表单中表单元素的name属性。
区别:
$_GET 通过URL 参数传递到当前脚本的变量数组。即键值对出现在url中,可在地址栏改变值后提交。
$_POST 通过HTTP POST 传递。
使用场景:
$_GET 地址栏可见,且长度有限制(2000字符),所以适合提交较短的公开的信息,也适合作为书签。
$_POST 密码等,或是长篇幅的文字。
示例:表单
resolveSubmit.php及页面返回为:
二、php表单验证
1、安全性问题
如果提交表单到自身页面:
说明:
$_SERVER["PHP_SELF"] :即当前的页面的url。
htmlspecialchars()函数:用于将特殊字符转换为实体,如'<'与'>',可防止注入html或JavaScript代码。
(此处注入JavaScript的大致原理:因为地址栏会显示当前页面编码后(即特殊字符转换为相应实体)的url,如果在地址栏url后加入 /><script>...<script> 的相应编码,则未用上面函数的$_SERVER["PHP_SELF"] 会将该段JavaScript脚本添加到 <form .../>后,形成巨大安全隐患。)
2、php验证大致思路
说明:$_SERVER["REQUEST_METHOD"] 返回 表单提交状态,为GET/POST 则表明已经提交了表单。
3、php验证是否为空
新学函数:empty();
4、验证e-mail、url等
验证名字:
验证e-mail:
验证URL:
上面全是用正则表达式验证,可见正则表达式很重要!先留着。
小结:
$_GET、$_POST 基础使用;
$_SERVER["PHP_SELF"]返回当前页面url、$_SERVER["REQUEST_METHOD"]判断表单是否提交;
htmlspecialchars()函数转换特殊字符串(用于表单安全或转换字符串);
empty()、trim()、stripslashes()(去转义字符);
preg_match(model,variant)使用正则表达式验证匹配,返回boolean型;
表单验证的思路。
本php笔记多摘抄自W3School:http://www.w3school.com.cn/php/php_functions.asp
回顾下表单元素form的基本属性:
method:GET/POST;
action:表单将提交到的url。
特点:可通过<?php ...?>赋值,且php中页面不需配置(不像JSP 有web.xml),action更容易写。
target:新的页面将在哪打开。
entype:取值:
1、application/x-www-form-urlencoded:默认,发送表单前对所有字符进行编码;
2、text/plain:空格转换为“+”,但不对特殊值字符编码;
3、multipart/form-data:不对字符编码,但对包含文件上传控件(如type 为file的input)的表单时,必须使用该值。
说明:html5中有许多新的有意思的属性,如有的能覆盖form的method等属性。
一、$_GET 与 $_POST 超全局变量。
GET 与 POST 被视作$_GET 与 $_POST,为超全局变量。GET 与 POST 都创建数组,如array(key=>value,key2=>value2...);其中key 是form表单中表单元素的name属性。
区别:
$_GET 通过URL 参数传递到当前脚本的变量数组。即键值对出现在url中,可在地址栏改变值后提交。
$_POST 通过HTTP POST 传递。
使用场景:
$_GET 地址栏可见,且长度有限制(2000字符),所以适合提交较短的公开的信息,也适合作为书签。
$_POST 密码等,或是长篇幅的文字。
示例:表单
<form id="formForMsg" method="GET" action="resolveSubmit.php"> <fieldset> <legend>留言板</legend> <div><span>主题:</span><input type="text" name="msgTheme" /></div> <div><span>内容:</span><textarea name="msgContent"></textarea></div> <input class="submit" type="submit" value="留言" /> </fieldset> </form>表单所在html展示:
resolveSubmit.php及页面返回为:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>处理表单的php</title> </head> <body> <?php echo "<h3>".$_GET['msgTheme']."</h3><br/>"; echo "<p>".$_GET['msgContent']."</p>"; $fop=fopen("leaveMsgs.txt", 'a'); fwrite($fop, $_GET['msgTheme'].":".$_GET['msgContent']."\n"); fclose($fop); ?> </body> </html>返回:
二、php表单验证
1、安全性问题
如果提交表单到自身页面:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
说明:
$_SERVER["PHP_SELF"] :即当前的页面的url。
htmlspecialchars()函数:用于将特殊字符转换为实体,如'<'与'>',可防止注入html或JavaScript代码。
(此处注入JavaScript的大致原理:因为地址栏会显示当前页面编码后(即特殊字符转换为相应实体)的url,如果在地址栏url后加入 /><script>...<script> 的相应编码,则未用上面函数的$_SERVER["PHP_SELF"] 会将该段JavaScript脚本添加到 <form .../>后,形成巨大安全隐患。)
2、php验证大致思路
<?php // define variables and set to empty values $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data);<span style="white-space:pre"> </span>//去空格 $data = stripslashes($data);<span style="white-space:pre"> </span>//去除转义反斜杠,相邻两个去一个 $data = htmlspecialchars($data);<span style="white-space:pre"> </span>//特殊字符使用实体代替 return $data; } ?>上面的验证代码同样假设提交到自身页面。
说明:$_SERVER["REQUEST_METHOD"] 返回 表单提交状态,为GET/POST 则表明已经提交了表单。
3、php验证是否为空
if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["name"])) { $nameErr = "姓名是必填的"; } else { $name = test_input($_POST["name"]); } }思路:通过在必填项的后面使用<span><?php echo $alert ?></span> 同时控制$alert 等打印错误提示信息。 (思路与JavaScript一样,不过js通过修改innerHTML 实现提示!)
新学函数:empty();
4、验证e-mail、url等
验证名字:
$name = test_input($_POST["name"]); if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "只允许字母和空格!"; }
验证e-mail:
$email = test_input($_POST["email"]); if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) { $emailErr = "无效的 email 格式!"; }
验证URL:
$website = test_input($_POST["website"]); if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/% =~_|]/i",$website)) { $websiteErr = "无效的 URL"; }
上面全是用正则表达式验证,可见正则表达式很重要!先留着。
小结:
$_GET、$_POST 基础使用;
$_SERVER["PHP_SELF"]返回当前页面url、$_SERVER["REQUEST_METHOD"]判断表单是否提交;
htmlspecialchars()函数转换特殊字符串(用于表单安全或转换字符串);
empty()、trim()、stripslashes()(去转义字符);
preg_match(model,variant)使用正则表达式验证匹配,返回boolean型;
表单验证的思路。
本php笔记多摘抄自W3School:http://www.w3school.com.cn/php/php_functions.asp
相关文章推荐
- 7天入门php-异常类及异常处理
- 7天入门php-session基础使用及预定义常量
- PHP入门-表单处理问题总结
- 7天入门php-php基础
- php手册学习记录(入门指引处理表单)
- PHP基础2-函数/分支语句/循环语句/表单处理/文件导入/常用php函数
- php基础教程——2创建模板、处理表单
- php基础入门(二)sina微博接口报错处理
- php入门之表单创建和基本处理
- php 安全基础 第二章 表单及URL 跨站脚本攻击
- php 多个submit提交表单 处理方法
- Ajax+PHP简单基础入门实例教程
- PHP 正则的使用基础入门
- PHP3 入门教程HTML 表单和变量
- PHP基本语法(八)—— 表单处理
- PHP基础4_表单
- php入门基础:php基本符号
- [转]php初级教程(六)php表单处理-文件上传
- php 安全基础 第二章 表单及URL 跨站请求伪造