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

PHP知识点——2

2016-02-21 22:26 585 查看
表单处理:

写法:

<html>

<body>

<form action="welcome.php"method="post">

Name: <input type="text"name="fname">

Age: <input type="text"name="age">

<input type="submit">

</form>

</body>

</html>

Welcome.php文件:

<html>

<body>

Welcome <?php echo$_POST["fname"]; ?>!<br>

You are <?php echo $_POST["age"];?> years old.

</body>

</html>

注意:加了entype=”text/plain”后会收不到数据。

表单验证:

应该在任何可能的时候对用户输入进行验证(通过客户端脚本)。浏览器验证速度更快,并且可以减轻服务器的负载。

如果用户输入需要插入数据库,您应该考虑使用服务器验证。在服务器验证表单的一种好的方式是,把表单传给它自己,而不是跳转到不同的页面。这样用户就可以在同一张表单页面得到错误信息。用户也就更容易发现错误了。
<form method="post" action="<?php echohtmlspecialchars($_SERVER["PHP_SELF"]);?>">
$_SERVER["PHP_SELF"]是超级全局变量,返回当前正在执行脚本的文件名,会发送表单数据到当前页面,而不是跳转到不同的页面。
htmlspecialchars() 函数把一些预定义的字符转换为 HTML
实体。
预定义的字符是:
· &
(和号)成为 &
· "
(双引号)成为 "
· '
(单引号)成为 '
· <
(小于)成为 <
· >
(大于)成为 >
通过 htmlspecialchars()
函数来避免被利用$_SERVER["PHP_SELF"]
变量有可能会被黑客使用!当黑客使用跨网站脚本的HTTP链接来攻击时,$_SERVER["PHP_SELF"]服务器变量也会被植入脚本。原因就是跨网站脚本是附在执行文件的路径后面的,因此$_SERVER["PHP_SELF"]的字符串就会包含HTTP链接后面的JavaScript程序代码。 任何JavaScript代码可以添加在<script>标签中! 黑客可以利用这点重定向页面到另外一台服务器的页面上等。
htmlspecialchars() 把一些预定义的字符转换为 HTML
实体。现在如果用户想利用 PHP_SELF
变量,
结果将输出如下所示:
<formmethod="post" action="test_form.php/"><script>alert('hacked')</script>">
又如:
当我们使用htmlspecialchars()
函数时,在用户尝试提交以下文本域:
<script>location.href('http://www.runoob.com')</script>
- 该代码将不会被执行,因为它会被保存为HTML转义代码,如下所示:
<script>location.href('http://www.runoob.com')</script>
以上代码是安全的,可以正常在页面显示或者插入邮件中。

当用户提交表单时,我们将做以下两件事情,:
1. 使用 PHP trim()
函数去除用户输入数据中不必要的字符 (如:空格,tab,换行)。
2. 使用PHP stripslashes()函数去除用户输入数据中的反斜杠 (\)
<?php

// 定义变量并默认设置为空值

$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);

$data = stripslashes($data);

$data = htmlspecialchars($data);

return $data;

}

?>

必需字段写法:

if (empty($_POST["name"])) //使用php的
empty() 函数是否为空

{$nameErr = "Name isrequired";}

else

{$name = test_input($_POST["name"]);}


Name:<input type="text" name="name">

<span class="error">* <?phpecho $nameErr;?></span>

结合正则表达式进行格式判定:
preg_match — 进行正则表达式匹配
<?php

// 定义变量并设为空值

$nameErr = $emailErr = $genderErr = $websiteErr= "";

$name = $email = $gender = $comment = $website ="";

if ($_SERVER["REQUEST_METHOD"] =="POST")

{

if (empty($_POST["name"]))

{$nameErr = "Name isrequired";}

else

{

$name =test_input($_POST["name"]);

// check if name onlycontains letters and whitespace

if(!preg_match("/^[a-zA-Z ]*$/",$name))

{

$nameErr ="Only letters and white space allowed";

}

}

if (empty($_POST["email"]))

{$emailErr = "Email isrequired";}

else

{

$email =test_input($_POST["email"]);

// check if e-mail addresssyntax is valid

if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))

{

$emailErr ="Invalid email format";

}

}

if (empty($_POST["website"]))

{$website = "";}

else

{

$website = test_input($_POST["website"]);

// check if URL addresssyntax is valid (this regular expression also allows dashes in the URL)

if(!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))

{

$websiteErr ="Invalid URL";

}

}

if (empty($_POST["comment"]))

{$comment = "";}

else

{$comment =test_input($_POST["comment"]);}

if (empty($_POST["gender"]))

{$genderErr = "Gender isrequired";}

else

{$gender = test_input($_POST["gender"]);}

}

?>

综合实例,html加php写在同一个php文件即可。

$_GET:
预定义的 $_GET
变量用于收集来自 method="get"
的表单中的值。
从带有 GET
方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制。
在 HTML
表单中使用 method="get"
时,所有的变量名和值都会显示在 URL
中。
http://www.w3cschool.cc/welcome.php?fname=Peter&age=37
注释:所以在发送密码或其他敏感信息时,不应该使用这个方法!
然而,正因为变量显示在 URL
中,因此可以在收藏夹中收藏该页面。在某些情况下,这是很有用的。
注释:HTTP GET
方法不适合大型的变量值。它的值是不能超过 2000
个字符的。

$_POST:
预定义的 $_POST
变量用于收集来自 method="post"
的表单中的值。
从带有 POST
方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。然而,由于变量不显示在 URL
中,所以无法把页面加入书签。
注释:然而,默认情况下,POST
方法的发送信息的量最大值为 8 MB(可通过设置 php.ini
文件中的 post_max_size
进行更改)。

预定义的 $_REQUEST
变量包含了 $_GET、$_POST
和 $_COOKIE
的内容。
$_REQUEST 变量可用来收集通过 GET
和 POST
方法发送的表单数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: