文章目录
本文内容
讲述了php实现表单中数据的提交,服务器接受数据
0x01 表单提交数据的两种方式
用php实现表单提交数据有两种方式:get方式和post方式。
1.1通过get方式提交数据
<form method="get" action="">
<input type="text" name="username" >
</form>
1.2通过post方式提交数据
<?php
if(!empty($_POST)){
echo '您好!' . $_POST['username'].'欢迎登录xxx系统!';
}
?>
<form method="post" action="">
姓名:<input type="text" name="username">
</form>
1.3 post和get的区别
从安全性上来讲,get提交的数据在url栏可以看见,而post提交的数据是不可见的,因此post更安全。
从提交原理上讲, get提交是参数一个一个的提交,post提交是所有参数作为一个整体一起提交。
从提交数据的大小上来讲, get提交一般不超过255个字节,post提交的大小取决于服务器。
// 在php.ini中,可以配置post提交的大小
post_max_size = 8M
从灵活性上讲,get很灵活,只要有页面的跳转就可以传递参数,post不灵活,post提交需要有表单的参与。
1、html跳转
<a href="?username=admin">点击跳转</a>
2、JS跳转
<script type="text/javascript">
location.href='index.php?name=tom&age=20';
location.assign('index.php?name=tom&age=20');
location.replace('index.php?name=tom&age=20');
</script>
3、PHP跳转
header('location:index.php?name=tom&age=22')
0x02 服务器接收数据的三种方式
三种方式:
$_GET:关联数组,接受get方式提交的数据
$_POST:关联数组,只接受post方式提交的数据
$_REQUEST:关联数组,接受post、get、cookie(需要设置)
<!--接受post方式提交的数据-->
<?php
if(!empty($_POST)){
echo '您好!' . $_POST['username'].'欢迎登录xxx系统!'.'<br>';
echo 'sex:'.$_POST['sex'],'<br>age:' . $_POST['age'];
}
?>
<!--接受get方式提交的数据-->
<?php
if(!empty($_GET)){
echo '您好!' . $_GET['username'].'欢迎登录xxx系统!'.'<br>';
echo 'sex:'.$_GET['sex'],'age:' . $_GET['age'];
}
?>
<form method="post" action="">
姓名:<input type="text" name="username">
性别:<input type="text" name="sex">
年龄:<input type="text" name="age">
<input type="submit" name="Submit" value="提交">
</form>
如果有get和post同时存在,并且get和post传递的名字是一样的,这时候通过$_REQUET获取的数据是什么?,这取决于php.ini中的设置。默认设置如下:
request_order = "GP" # 先获取GET,再获取POST值
<?php
if(!empty($_REQUEST)){
echo '您好!' . $_REQUEST['username'].'欢迎登录xxx系统!'.'<br>';
echo 'sex:'.$_REQUEST['sex'],'<br>age:' . $_REQUEST['age'];
}
?>
<form method="post" action="./formtest.php?username=1">
姓名:<input type="text" name="username">
性别:<input type="text" name="sex">
年龄:<input type="text" name="age">
<input type="submit" name="Submit" value="提交">
</form>
2.1 复选框值的传递
当存在多个复选框时,name属性的值需要加上[],表示这是一个数组,以下代码中的hobby就是一个数组,我们可以用implode函数将数组转换成字符串。
<?php
if(isset($_POST['button'])) {
echo '姓名:'.$_POST['username'].'<br>';
echo '密码:'.$_POST['pwd'].'<br>';
echo '性别:'.$_POST['sex'].'<br>';
echo '爱好:',isset($_POST['hobby'])?implode(',',$_POST['hobby']):'没有爱好','<br>'; //implode — 将一个一维数组的值转化为字符串
echo '籍贯:'.$_POST['jiguan'],'<br>';
echo '留言:'.$_POST['words'];
}
?>
<form method="post" action="">
姓名: <input type="text" name="username"> <br/>
密码: <input type="password" name="pwd"> <br/>
性别: <input type="radio" name="sex" value='1' checked>男
<input type="radio" name="sex" value='0'>女 <br/>
爱好:
<input type="checkbox" name="hobby[]" value='健身'>健身
<input type="checkbox" name="hobby[]" value='画画'>画画
<input type="checkbox" name="hobby[]" value='听歌'>听歌
<input type="checkbox" name="hobby[]" value='跳舞'>跳舞 <br/>
籍贯:
<select name="jiguan">
<option value="021">四川</option>
<option value="010">江苏</option>
</select> <br>
留言: <textarea name="words" rows="5" cols="30"></textarea> <br/>
<input type="submit" name="button" value="提交">
</form>
2.2 get,post,request如何选?
那么开发中post和get如何选则呢?
若符合下列任一情况,则用POST方法:
- 请求的结果有持续性的副作用,副作用指的是对数据进行了修改。例如,数据库内添加新的数据行。
- 若使用GET方法,则表单上收集的数据可能让URL过长。
- 要传送的数据不是采用7位的ASCII编码。
若符合下列任一情况,则用GET方法:
- 请求是为了查找资源,HTML表单数据仅用来帮助搜索。
- 请求结果无持续性的副作用。
- 收集的数据及HTML表单内的输入字段名称的总长不超过1024个字符。
简单来说就是,需要读取数据可以选get,修改数据等操作用post,敏感的数据用post,当然具体情况需要具体对待。
对于request,request获取效率低,尽可能不要使用,除非提交的类型不确定的情况下才使用。