web主要用来在网页中发送数据到服务器,如,提交注册信息时需要用到表单,当用户填写完信息后提交操作,就会将表单的内容从用户浏览器传送到服务器端,经过服务器上的php程序进行处理后,再将用户所需要的信息传递回客户端浏览器上。
一个完整的表单由两个部分组成,分别是表单标签和表单元素。
表单标签是用form标记来表示,它属于html标签的一种,用来显示和提交数据,基本格式如下
<form action="" name="" method="" enctype="" target="">
……
</form>
“action”属性用于指定接收数据的路径。“name”属性用于设置表单名称。“method”属性用于设置表单提交方式,可以用GET或POST提交。“enctype”属性用于设置提交数据的编码格式。“target”属性用于设置返回信息的显示格式。
表单元素是指在表单中的一些元素标签,如<input>、<textarea>等,用于提供用户输入数据的可视化界面
<form>
<input type="text"> <!--定义用户可输入文本的单行输入字段-->
<input type="password"> <!-- 定义密码字段。密码字段中的字符会被掩码-->
<input type="radio"> <!--定义单选按钮。单选按钮允许用户选取给定数目的选择中的一个选项-->
<input type="checkbox"> <!--定义复选框。复选框允许用户在一定数目的选择中选取一个或多个选项-->
<input type="file"> <!--用于文件上传-->
<input type="image"> <!--定义图像形式的提交按钮-->
<input type="submit"> <!--义提交按钮。提交按钮用于向服务器发送表单数据。数据会发送到表单的 action 属性中指定的页面-->
<input type="reset"> <!-- 定义重置按钮 -->
</form>
但用户在网站上注册一个账号的时候,在填写完相应的表单后,需要将数据提交给网站后台对数据进行处理或保存。在处理用户提交数据之前,还需要获取表单数据。
一般表单在提交数据时会通过mehtod属性指定调教方式,如果是post提交方式就会使用全局数组$_POST[]来获取表单元素的值。如果是get提交方式则使用全局数组$_GET[]来获取表单元素的值。示例如下
$username=$_POST['username'];
$username=$_GET['username'];
$username表示接收数据的变量名。$_GET和$_POST表示分别使用GET和POST请求提交数据、username表示标签的名称,用于标识哪一个标签的数据
在对表单元素命名时,注意不要出现重名的情况,以免获取属性值时出错
案例:用户注册
<?php
header('content-type:text/html;charset=utf-8');
if($_SERVER['REQUEST_METHOD']=='POST'){
$username=$_POST['name'];
$userpsd=$_POST['password'];
$usersex=$_POST['sex'];
$usertel=$_POST['tel'];
echo "用户名:".$username."<br>";
echo "密码:".$userpsd."<br>";
echo "性别:".$usersex."<br>";
echo "电话:".$usertel."<br>";
exit;
}
?>
<form action="test.php" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="name"><br><br>
密码:<input type="password" name="password"><br><br>
确认密码:<input type="password" name="repassword"><br><br>
性别: 男<input type="radio" name="sex" value="男">女<input type="radio" name="sex"value="女"> 保密<input type="radio" name="sex" value="保密"><br><br>
电话: <input type="tel" name="tel"><br><br>
<input type="submit" value="注册">
<input type="reset" value="重置">
</form>
输入对应的信息
单击“注册”后,运行结果
用户可以将表单数据交给php后台,当获取数据后需要对数据进行处理,但如果用户提交的数据属于非法数据,如,给网页提交一段表单标签,或者浏览器可以执行的javasript代码。此时用户提交的数据可以改变网页的正常处理方式,这必然会给网站安全带来风险
案例
<?php
header('content-type:text/html;charset=utf-8');
if($_SERVER['REQUEST_METHOD']=='POST'){
echo $_POST['content']."<br>";
exit;
}
?>
<form action="test.php" method="post">
留言内容:<br>
<textarea name="content" style="width: 300px;height: 150px;"></textarea><br><br>
<input type="submit" value="提交">
</form>
运行上述代码,并在留言中输入以下内容:
<script type="text/javascript">
while(true){
alert("中招了!");
}
</script>
点击提交,此时就在页面中循环弹出对话框
如以上情况会导致网站出现很多安全问题,而且会使用户无法正常浏览器网页。
为了解决这种问题php提供了strip_tags()函数和htmlentities()函数其中strip_tags()函数用于去除字符串中的html和php标记,htmlentities()函数可以将html和php标记转换成字符,以文本的格式输出
由以上案例修改的代码
<?php
header('content-type:text/html;charset=utf-8');
if($_SERVER['REQUEST_METHOD']=='POST'){
echo "<pre>";
echo "htmlentities()函数输出<br>";
echo htmlentities($_POST['content'],ENT_NOQUOTES,'UTF-8')."<br>";
echo "<hr> strip_tags()函数输出<br>";
echo strip_tags($_POST['content'])."<br>";
echo "</pre>";
exit;
}
?>
<form action="test.php" method="post">
留言内容:<br>
<textarea name="content" style="width: 300px;height: 150px;"></textarea><br><br>
<input type="submit" value="提交">
</form>
在输入同样的代码,提交后的运行结果
javascript代码正常输出了,而且用htmllentities()函数过滤后的代码是按照文本的形式输出,strip_tags()函数过滤后的代码去除了<script>标记
为了方便对常见的数据类型进行认证,php语言提供了isset()函数、empty()函数和is_numeric()函数等,这三个函数用于对表单提交的数据进行验证。关于函数的说明如下
案例
<?php
header('content-type:text/html;charset=utf-8');
if($_SERVER['REQUEST_METHOD']=='POST'){
if(!isset($_POST['name'])){
echo "必须输入转账人员";
exit;
}
if(empty($_POST['money'])){
echo "必须输入非0的转账金额";
exit;
}
if(!is_numeric($_POST['money'])){
echo "转账金额必须是数字";
exit;
}
echo '转账'.$_POST['money'].'给'.$_POST['name'];
exit;
}
?>
<form action="test.php" method="post">
转账<input type="text" name="money"/>给<input type="text" name="name"/>
<br>
<br>
<input type="submit" value="确认">
</form>
打开浏览器
第一次输入:转账0给王五,结果
第二次输入:转账abc给王五,结果
第三次输入:转账100给王五,结果
*声明:内容来源于网络收集和整理,版权归原著所有,如来源信息有误或侵犯权益,请联系站长作修改和删除处理。