您的位置:首页 > 编程语言 > PHP开发

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

示例:表单

<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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  表单 php