PHP进阶——表单传值和⽂件上传
1、表单传值
表单传值就是浏览器通过表单元素,将数据传给后台服务器语⾔
1.1表单传值⽅式
1)GET传值
form表单
< form method=“GET” >表单元素 < / form >
a标签
< a href=“” >//这样就把“学科”字符串传值给PHP⽂件了
location对象的href属性
< script>location.href=“”< / script>
location对象的assign()⽅法
< script>location.assign(“”)< /script>
2)POST传值
post表单⽅式的基本设定
< form method=“POST”>表单元素< /form>
3)post⽅式跟get⽅式的区别
1. GET传输的数据主要⽤来获取数据,不改变服务器上资源:get只是⽤来获取内容
2. Post传输的数据主要⽤来增加数据,改变服务器上资源:POST会改变服务器上数据内容
3. 传输⽅式上post必须使⽤form表单,⽽get可以使⽤form表单和URL
4. get传输数据可以在URL中对外可见,⽽post不可见:GET传值最终会在浏览器的地址栏中全部显⽰:?数据名=数据值&数据名2=数
据值2…
5. get和post能传输的数据⼤⼩不同,get为2K,post理论⽆限制(事实上,GET和POST本⾝没有数据长度限制,但是浏览器⼚家做了
⼀些限制)
6. get和post能够传输的数据格式有区别:get传输简单数据(数值/字符串),post可以提交复杂数据(⼆进制等)
1.2、PHP接收数据的三种⽅式
$_GET⽅式:接收GET⽅式提交的数据
$_POST⽅式:接收POST⽅式提交的数据
$_REQUEST⽅式:接收POST或者GET提交的所有数据
这三个变量的本质是数组,接受的时候,表单必须有下标"name",如< a name=“XX”>,⽽value的值就是数组的元素值
1) $ _REQUEST所存储数据的内容:将 $ _POST和 $ _ GET合并存储到⼀个数组
2) $ _REQUEST和 $ _POST与 $ _GET的联系:如果GET和POST中有同名数组元素(下标),POST会覆盖GET(PHP中数组元素下标具有唯⼀性),这个可以在php.ini中进⾏配置
<?php
echo'<pre>';
var_dump($_GET);
echo'<hr>';
var_dump($_POST);
echo'<hr>';
var_dump($_REQUEST);
echo'<hr>';
?>
1.3、简单的综合训练
表单传值,就必须要有表单< form>,⽽且表单必须有⽅法 method=“⽅法” ,有action=“PHP⽂件”,然后在< form>⾥⾯写input 框,input必须有类型,名字,最后,必须有⼀个提交框,类型为submit
shuju.php:
<?php
header('Content-type:text/html;charset=utf-8');//解决不能输出中⽂的bug
echo'<pre>';
echo'<hr>';
var_dump($_REQUEST);
?>
shuju.html:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form method="POST"
action="shuju.php">
<!-- 创建3个框 -->
<input type="text"name="username"value="账号">
<input type="text"name="password"value="密码">
<input type="submit"name="sub"value="提交">
</form>
</body>
</html>
2、PHP处理复选框数据
2.1基本处理
复选框,就是这个亚⼦
有两种解决⽅法,⼀种是每个框的name都是不⼀样的,还有另外⼀种是所有框的name都是⼀样的(归组),请看以下⽅法:
刚才的综合训练可以得知,每个下标只能有⼀个值,但是如果3个复选框都是hobby字节,那么最终传值的话只能⼀个传值,另外两个被覆盖掉了,这时候就可以使⽤ [ ] 来处理复选框
解决⽅案:浏览器不识别[](浏览器不认为有特殊性),但是PHP认为[]有特殊性:系统⾃动认为该符
号是数组的形式,所以PHP就会⾃动的将同名的但是带有[]的元素组合到⼀起形成⼀个数组
复选框⼀定要加 [ ]
shuju.php:
html中提交表单用什么属性<?php
header('Content-type:text/html;charset=utf-8');//解决不能输出中⽂的bug
echo'<pre>';
echo'<hr>';
print_r($_REQUEST);
?>
shuju.html:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form method="POST"
action="shuju.php">
<input type="checkbox"name="hobby[]"value="唱">唱
<input type="checkbox"name="hobby[]"value="跳">跳
<input type="checkbox"name="hobby[]"value="rap">rap
<input type="submit"name="btn"value="提交">
</form>
</body>
</html>
如果把PHP⽂件中改⼀下变成这样:
<?php
header('Content-type:text/html;charset=utf-8');//解决不能输出中⽂的bug
echo'<pre>';
//print_r($_REQUEST);
$hobby=$_REQUEST['hobby'];//假设我们的出来的结果只要hobby这个数组,不要btn,那么可以直接⽤['hobby']即可
print_r($hobby);
?>
2.2、多选按钮的数据处理
1、 表单中name属性使⽤数组格式:名字 [ ](⼀类复选框数据使⽤⼀个)
2、 后台接收到数据之后,是⼀个数组(数组不能存储到数据库)
3、 PHP需要将数组转换成指定格式的字符串:使⽤分隔符分隔每⼀个元素并且形成字符串:implode(’分隔符’ ,数组)
4、 PHP组织SQL直接存储到数据库
shuju.html:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form method="POST"
action="shuju.php">
<input type="checkbox"name="hobby[]"value="唱">唱
<input type="checkbox"name="hobby[]"value="跳">跳
<input type="checkbox"name="hobby[]"value="rap">rap
<input type="submit"name="btn"value="提交">
</form>
</body>
</html>
shuju.php:
<?php
header('Content-type:text/html;charset=utf-8');//解决不能输出中⽂的bug
echo'<pre>';
//print_r($_REQUEST);
$hobby=$_REQUEST['hobby'];
$hobby_string=implode($hobby,'、');//⽤、来分割
echo$hobby_string;
?>
反之,如果想把⼀个字符串分割开来,可以⽤explode(分隔符,字符串)来分割
2.3、其他常规同名表单项的数据处理
除开radio button单选框和checkbox复选框,很少会出现同名的表单项。如果⾮要使⽤同名的来进⾏管理,那么可以采⽤checkbox⽅式进⾏操作
1、 表单中同名增加[]
2、 PHP接收时数组处理
3、 PHP转换成有格式的字符串
4、 数据库字符串存储
2.4、复选框细节
如果复选框没有选中,那么浏览器就不会提交。因此在PHP接收使⽤复选框(单选框)数据的时候,应该先判断是否存在该数据
如果复选框⼀个也没选中,就会报错
应该这样修改
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论