2、a标签
<a href="www.***.cn/index.php/index.php?学科=PHP">3、location对象的href属性
<script>location.href="www.***.cn/index.php/index.php?学科=PHP"</script>4、location对象的assign()方法
<script>location.assign("www.***.cn/index.php/index.php?学科=PHP")</script>和3的href功能差不多
post传值 1、post表单方式的基本设定 <form method="POST">表单元素</form>和GET差不多
2、post方式跟get方式的区别 1)get传输的数据主要用来获取数据,不改变服务器上的资源: get只用来获取数据,post可以提交信息 2)post传输的数据主要用来增加数据,改变服务器上资源 3)传输方式上post必须使用form表单,而get可以使用form表单和URL 4)get传输数据可以在URL中对外可见,而post不可见 get传值最终会在浏览器的地址栏中全部显示?数据名=数据值 5)get和post能传输的数据大小不同,get为2k,post理论无限制,事实上get和post本身没有数据长度限制,但浏览器有所限制 6)get一般提交简单数据,post可以提交复杂数据
php接收数据的三种方式 不管是 G E T / _GET/ GET/_POST/$_REQUEST,三个都是PHP超全局(没有范围限制)预定义数组,表单元素的“name”属性的值作为数组的下标,而value属性对应的值就是数组的元素值。1、 G E T 方 式 : 接 收 G E T 方 式 提 交 的 数 据 2 、 _GET方式:接收GET方式提交的数据 2、 GET方式:接收GET方式提交的数据2、_POST方式:接收POST方式提交的数据 3、 R E Q U E S T 方 式 : 接 收 G E T 或 者 P O S T 方 式 提 交 的 数 据 1 ) _REQUEST方式:接收GET或者POST方式提交的数据 1) REQUEST方式:接收GET或者POST方式提交的数据1)_REQUEST所存储数据的内容:将 G E T / _GET/ GET/_POST合并存储到一个数组 2) G E T / _GET/ GET/_POST/$_REQUEST联系:如果GET和POST中有同名数组元素(下标),POST会覆盖GET(PHP中数组元素下标具有唯一性),这个可以在php.ini中进行配置
将php文件放在apache的www文件夹下
<?php echo '<pre>'; var_dump($_GET); echo '<hr>'; var_dump($_POST); echo '<hr>'; var_dump($_REQUEST);浏览器打开: http://localhost/myfirstWeb/test.php
得到了返回值,虽然是空的
用get方式传值:php http://localhost/myfirstWeb/test.php?data=PHP
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> </head> <body> <form method="POST" action="test.php"> <input type="text" name="username" value=""/> <input type="password" value=""/> <input type="submit" name="sub" value="submit"/> </body> </html>此处没有给password name属性 获取数据如下: 这里因为password没有name,所以没有收到该值
尝试显示POST覆盖GET
<body> <form method="POST" action="test.php?username=getusername2"> <input type="text" name="username" value=""/> <input type="password" value=""/> <input type="submit" name="sub" value="submit"/> </body> PHP处理复选框数据 1、复选框表单项的命名方式 筛选框:通用是将一类内容以同样(同名)的形式传递给后台,数据库存储通常是一个字段存储 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> </head> <body> <form method="POST" action="checkbox.php"> <input type="checkbox" name="hobby" value="bassketball"/>bassketball <input type="checkbox" name="hobby" value="football"/>football <input type="checkbox" name="hobby" value="tabletennis"/>tabletennis </body> </html>选中才会提交
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> </head> <body> <form method="POST" action="03checkbox.php"> <input type="checkbox" name="hobby" value="bassketball"/>bassketball <input type="checkbox" name="hobby" value="football"/>football <input type="checkbox" name="hobby" value="tabletennis"/>tabletennis <input type="submit" name="btn" value="提交"/> </body> </html>但这时候我明明选了两个,却只看到了一个数据,提交其实成功了,只是后台没有显示出来
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> </head> <body> <form method="POST" action="03checkbox.php"> <input type="checkbox" name="hobby1" value="bassketball"/>bassketball <input type="checkbox" name="hobby2" value="football"/>football <input type="checkbox" name="hobby3" value="tabletennis"/>tabletennis <input type="submit" name="btn" value="提交"/> </body> </html>设置成hobby1/2/3 但这种方式并没有办法知道hobby1和hobby3是什么区别
其实在浏览器中,不论name值有多少个相同的,都会全部提交 只是在PHP中 $ _POST/$_GET会对同名name属性进行覆盖
浏览器不识别[]有特殊性,但PHP认为[]有特殊性,系统自动认为是数组,所以PHP自动会把含有[]的属性组合到一起成一个数组
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> </head> <body> <form method="POST" action="03checkbox.php"> <input type="checkbox" name="hobby[]" value="bassketball"/>bassketball <input type="checkbox" name="hobby[]" value="football"/>football <input type="checkbox" name="hobby[]" value="tabletennis"/>tabletennis <input type="submit" name="btn" value="提交"/> </body> </html><?php //接收checkbox数据 header("Content-type:text/html;charset=utf-8");//告诉浏览器当前服务器返回的内容是text/html,同时需要浏览器用utf-8字符集解析 echo "<pre>"; print_r($_POST); ?>
和教程里的结果不同 再次更新后,没问题了,具体不知道原因,可能是浏览器缓存的之前信息
复选框的常见处理 1、单先按钮的数据处理 radio button:可以出现多个选择项,但是只能选择其中一个 PHP获取数据后,组织sql直接存储到数据表即可 2、多选按钮的数据处理 名字[],生成一个数组 PHP需要将数组转换成指定格式字符串:使用分隔符分隔每一个元素并形成字符串 implode(分隔符,数组); <?php header("Content-type:text/html;charset=utf-8"); $hobby=$_POST["hobby"]; //print_r($hobby); $hobby_string=implode($hobby,'|'); echo $hobby_string; ?>如果反过来,把字符串转成数组 用explode()
explode('|',$hobby_string); 如果筛选框中没有被选中的,那么筛选框不会被当作数据上传,所以这里在调用数据的时候,需要判断一下:isset() <?php header("Content-type:text/html;charset=utf-8"); $hobby=isset($_POST["hobby"])?$_POST["hobby"]:array(); //print_r($hobby); $hobby_string=implode($hobby,'|'); echo $hobby_string; ?> 3、其它常规同名表单项的数据处理原理 文件从用户本地电脑通过传输方式(WEB表单)保存到服务器所在电脑指定的目录下。 1、增加文件上传的表单,浏览器请求一个服务器的HTML脚本(包含文件上传表单) 2、用户从本地选择一个文件(点击上传框(按钮)) 3、用户点击上传:文件通过物联网传输到服务器上 4、服务器操作系统会将文件保存到临时目录:是以临时文件格式保存(windows下tmp) 5、服务器脚本开始工作,判断文件有效 6、服务器脚本将有效文件 从临时目录移动到指定的目录下(完成)
表单写法 1、method属性:表单提交方式必须的POST 2、enctype属性:from表单属性,主要是规范表单数据的编码方式 3、上传表单 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> </head> <body> <form method="POST" enctype="multipart/form-data" action="08file_upload.php"> <input type="file" name="image"/> <input type="submit" name="btn" value="上传文件"/> </body> </html> F I L E S 变 量 详 解 P H P 中 , 有 一 个 预 定 义 变 量 _FILES变量详解 PHP中,有一个预定义变量 FILES变量详解PHP中,有一个预定义变量_FILES是专门用来存储用户上传的文件的。 1、name 文件在用户(浏览器)电脑上实际存在的名字(实际用来保存后缀) 2、tmp_name上传到服务器后,操作系统保存的名字(实际给PHP后期使用) 3、type图片类型MIME(多功能互联网邮件扩展)类型,用来在计算机中客户端识别文件类型(确定软件) 4、error:文件上传的代号,用来告知应用软件(PHP)文件接收过程中(PHP后期根据代码执行) 5、size:文件大小(PHP根据实际需求来确定是否保存) <?php //接收checkbox数据 header("Content-type:text/html;charset=utf-8");//告诉浏览器当前服务器返回的内容是text/html,同时需要浏览器用utf-8字符集解析 echo "<pre>"; var_dump($_POST); var_dump($_FILES); ?> 移动临时文件到目标位置 1、判断是否为上传的文件:is_uploaded_file() <?php //接收checkbox数据 header("Content-type:text/html;charset=utf-8");//告诉浏览器当前服务器返回的内容是text/html,同时需要浏览器用utf-8字符集解析 echo "<pre>"; //var_dump($_POST); //var_dump($_FILES); $file=$_FILES["image"]; if(is_uploaded_file($file["tmp_name"])){ echo "文件有效"; }else{ echo "文件上传失败!"; } ?> 2、移动文件:move_uploaded_file() <?php //接收checkbox数据 header("Content-type:text/html;charset=utf-8");//告诉浏览器当前服务器返回的内容是text/html,同时需要浏览器用utf-8字符集解析 echo "<pre>"; //var_dump($_POST); //var_dump($_FILES); $file=$_FILES["image"]; if(is_uploaded_file($file["tmp_name"])){ echo "文件有效"; if(move_uploaded_file($file['tmp_name'],"uploads/".$file["name"])){ echo "文件保存成功!"; }else{ echo "文件保存失败!"; } }else{ echo "文件上传失败!"; } ?> 多文件上传 当商品需要上传多个图片进行展示的时候,那么需要使用多文件上传 针对一个内容但不同文件说明:同名表单 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> </head> <body> <form method="POST" enctype="multipart/form-data" action="10multi_upload.php"> <input type="file" name="image[]"/> <input type="file" name="image[]"/> <input type="file" name="image[]"/> <input type="submit" name="btn" value="上传文件"/> </body> </html>
当商品需要进行多个维度图片说明的时候,需要使用多文件上传 针对是不同内容,所以表单名字不一样,批量解决问题
多文件上传的$_FILES变量的数据结构形式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Document</title> </head> <body> <form method="POST" enctype="multipart/form-data" action="10multi_upload.php"> <input type="file" name="head"/> <input type="file" name="body"/> <input type="file" name="foot"/> <input type="submit" name="btn" value="上传文件"/> </body> </html>对多文件信息进行处理 1、不同名多文件上传处理方式:按表单名字从$_FILES中取出即可使用
2、如果不确定表单中有多少个文件上传,可以通过遍历$_FILES的方式,取出
<?php //接收checkbox数据 header("Content-type:text/html;charset=utf-8");//告诉浏览器当前服务器返回的内容是text/html,同时需要浏览器用utf-8字符集解析 echo "<pre>"; //print_r($_FILES); foreach($_FILES as $file){ if(is_uploaded_file($file['tmp_name'])){ move_uploaded_file($file['tmp_name'],'uploads/'.$file["name"]); } } ?>完成了图片的保存
同名文件遍历数组的方式 应该遍历$_FILES[“userfile”[任意一个要素] 如:name|tmp_name|size|error|type
if(isset($_FILES["image"]["name"])&&is_array($_FILES["image"]["name"])){ $images=array(); foreach($_FILES['image']['name'] as $k =>$file){ $images[]=array( "name"=>$file, "tmp_name"=>$_FILES["image"]["type"][$k], "type"=>$_FILES["image"]["tmp"][$k], "error"=>$_FILES["image"]["error"][$k], "size"=>$_FILES["image"]["size"][$k] ); }; }; print_r($images);成功将 转化成:
