7天入门php-基础表单处理

表单是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 密码等,或是长篇幅的文字。

示例:表单

	<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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值