(小白)PHP进阶学习001 20201022

1 篇文章 0 订阅

(小白)PHP进阶学习001 20201022

表单传值

  1. get传值
    1、form表单
 <form method="GET">表单元素</form>

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功能差不多

  1. 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可以提交复杂数据

  1. php接收数据的三种方式
    不管是 G E T / _GET/ GET/_POST/$_REQUEST,三个都是PHP超全局(没有范围限制)预定义数组,表单元素的“name”属性的值作为数组的下标,而value属性对应的值就是数组的元素值。

1、 G E T 方 式 : 接 收 G E T 方 式 提 交 的 数 据 2 、 _GET方式:接收GET方式提交的数据 2、 GETGET2_POST方式:接收POST方式提交的数据
3、 R E Q U E S T 方 式 : 接 收 G E T 或 者 P O S T 方 式 提 交 的 数 据 1 ) _REQUEST方式:接收GET或者POST方式提交的数据 1) REQUESTGETPOST1_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>

在这里插入图片描述

  1. 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. 复选框的常见处理
    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、其它常规同名表单项的数据处理

文件上传

  1. 原理

原理
文件从用户本地电脑通过传输方式(WEB表单)保存到服务器所在电脑指定的目录下。
1、增加文件上传的表单,浏览器请求一个服务器的HTML脚本(包含文件上传表单)
2、用户从本地选择一个文件(点击上传框(按钮))
3、用户点击上传:文件通过物联网传输到服务器上
4、服务器操作系统会将文件保存到临时目录:是以临时文件格式保存(windows下tmp)
5、服务器脚本开始工作,判断文件有效
6、服务器脚本将有效文件 从临时目录移动到指定的目录下(完成)

  1. 表单写法
    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>

在这里插入图片描述

  1. F I L E S 变 量 详 解 P H P 中 , 有 一 个 预 定 义 变 量 _FILES变量详解 PHP中,有一个预定义变量 FILESPHP_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. 移动临时文件到目标位置
    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 "文件上传失败!";
	}
?>

在这里插入图片描述

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

成功将
在这里插入图片描述
转化成:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值