iiss php 配置,php基础知识(有代码有注释)

iiss php 配置,php基础知识(有代码有注释)回顾 数组 数据的组合 数组定义 三种方式 常用 array 数组访问 下标 数组分类 关联数组 索引数组和混合数组 数组循环遍历 foreach 遍历 foreach 原理 二维数组 不是真正的二维数组 遍历一维 第二维下标访问 Each list 结构 数组函数 指针函数 数据结构模拟 栈和队列

大家好,我是讯享网,很高兴认识大家。

回顾

数组: 数据的组合

数组定义: 三种方式(常用array())

数组访问: 下标

数组分类: 关联数组, 索引数组和混合数组

数组循环遍历: foreach遍历(foreach原理)

二维数组: 不是真正的二维数组(遍历一维: 第二维下标访问)

Each+list结构

数组函数: 指针函数, 数据结构模拟(栈和队列), 数组字符串函数(explode,implode), 验证码

数组运算: + 和array_merge

数组比较: 数组长度,元素出现顺序,下标元素位置, 数据值,数据类型

算法: 冒泡算法

表单数据提交

表单数据提交: 用户通过浏览器将数据提交服务器.

浏览器提交数据的方式是什么?

浏览器提交数据的本质: 是基于HTTP协议.

浏览器提交数据的方式有两种:

URL传值: 将数据以键值对的形式,绑定到URL之后

表单传值: 通过form表单

提交的本质形式有两种:

GET传值: URL传值和form表单的get方式传值

POST传值: POST表单传值

数据提交方式

GET传值

方案1: 直接绑定到URL之后: 键值对的形式

代表传递两组数据: name和age,其值分别为张三和30

方案2: 可以通过form表单,使用get方式实现

POST传值

只有一种方案: form表单使用post方式提交数据

GET与POST区别

理论上讲: GET与POST有本质区别

GET: get传递的数据不应该影响服务器已经存在的数据(查询)

POST:post传递的数据就是用来修改数据的(更改)

INPUT: input传递的数据是用来增加数据(新增)

DELETE: delete传递的数据应该用来删除数据(删除)

GET和POST的区别

传递数据给服务器的方式不一样: GET是在URL后显示提交; POST是隐式提交(HTTP协议)

安全性能不一样: GET不安全,POST安全

GET和POST提交的数据大小不一样: 事实是HTTP协议从未规定GET与POST大小不一样

a)

Get是查询: 有浏览器规定GET只能最大2K(只有IE)

b)

Post是数据提交: 浏览器规定POST最大只能传递8M(服务器也有限制)

数据接收

服务器接收: 浏览器将数据提交给服务器: 但是apache是无法接收数据.PHP可以接收数据.

PHP针对数据提价的方式不同,有不同的接收方式: 都是PHP自动接收

GET数据接收

在PHP中: 使用$_GET超全局预定义变量(系统定义)来接收get方式提交的数据. 所有的超全局预定义变量都是数组类型: 所有的数据提交后都是以键值对的形式在$_GET中存在.

POST数据接收

在PHP中: 使用$_POST超全局预定义变量来接收post方式提交的数据

PHP中,考虑到有可能数据的来源不确定(POST或者GET不清楚):可以通过判断如果不在GET中就在POST中: 但是判断就会降低效率, 可以使用PHP的另外一种接收方式:$_REQUEST.

混合数据接收

$_REQUEST是PHP中提供了默认合并$_GET和$_POST的一种数据保存.

$_REQUEST虽然可以不用区分get和post数据: 但是正是因为其不区分,所以导致不安全:

$_REQUEST并不是接收数据: 而是合并数据($_GET和$_POST): 合并原理是使用array_merge,会有覆盖的危险.

$_REQUEST的合并规则在配置文件中可以配置: request_order

如果是低版本中的PHP,可能没有该选项: 默认是走variables_order

复选框传值

复选框: checkbox

复选数据库提交

复选框: 只有选中的复选框才会提交,没有选中不会提交

因为一类复选框: 名字都相同: 名字提交到服务器中之后,作为数组的下标: 下标具有唯一性: 多个相同的会覆盖,只会保留最后一个

解决被覆盖的问题

解决方案1: 修改名字,让复选框的名字不一样(不用): 复选框往往是作为一类数据,名字应该都是一样的

解决方案2: 服务器因为同名问题覆盖原始数据,而浏览器不区分是否同名: PHP有一个特点: PHP只要见到[]就会当做数组处理: 如果中括号内部没有内容,系统自动添加索引下标使其变得不一样: 给checkbox的name属性增加[]

服务器接收效果

复选框入库

如何设计表?

方案1: 单独一张表: 爱好表, 每个爱好有一个对应的字段

篮球

足球

羽毛球

排球

台球

网球

手球

地球

篮球

台球

足球

羽毛球

排球

方案1可以解决复选框数据存储的问题, 但是却让设计变得非常的不灵活

方案2: 在表中增加一个字段: 存放所有的爱好: 爱好通过PHP数组转换成带有分隔符的字符串

用户名

年龄

爱好

张三

30

篮球,足球,羽毛球

李四

25

地球,台球

程序代码如何实现?

存的时候将数组转换成字符串;

使用的时候将字符串分解成数组.

存储

提取

将数据如何回显给用户查看?

用户查看: 依然用复选框查看

①如何让复选框默认被选中? 给checkbox增加属性: checked = ‘checked’

增加一个用户显示checkbox数据的显示界面: html文件

使用PHP来判断用户的哪些被选中: 选中的数据增加checked=checked属性

修改逻辑: 有被选中的才有属性,没有选中的就没有属性: 当前html肯定是用于被PHP脚本包含, 所以肯定也是使用PHP中准备的爱好信息: PHP中的爱好是一个数组: 判断当前的爱好选项是否在数组中存在; in_array()

在需要显示数据的PHP脚本中引入对应的HTML显示文件.

文件上传

文件上传: 将文件从本机电脑上传到服务器电脑.

文件上传条件

服务器允许用户上传文件: apache不能处理文件: PHP才能处理

a)

文件是否允许上传

b)

文件上传到服务器之后保存到什么位置

浏览器需要上传条件

a)

浏览器需要表单: form, 只能POST提交

b)

表单中必须使用文件上传表单域:

c)

文件是二进制数据: 但是表单默认只能提交字符流数据: 如果要实现提交,需要告诉浏览器: 当前内容中有二进制数据, 需要在表单中增加一个文件上传的属性: enctype=”multipart/form-data”

PHP接收文件

如果文件上传的表单域存在: 但是没有给form增加enctype属性: 文件不可能上传, 但是表单可以上传: 上传的数据很明显会被$_POST接收.

PHP中接收文件上传信息: 由$_FILES超全局预定义变量实现

之所以看不到文件: PHP没有处理,就会被系统回收: 系统在PHP脚本执行结束,php没有处理,操作系统自动回收: 如何让脚本执行周期变长?

Sleep(10): 休息10秒

移动文件

文件上传本质是系统接收: 跟PHP没有关系, PHP只是在脚本周期内有权利去访问存在的临时文件: 如果不处理,操作系统会自动清理: 在PHP可以操作的周期内,将临时文件移动到目标文件夹内,

然后给其新的名字(临时文件不能使用)

PHP提供了一个系统函数能够移动文件(专门移动上传的文件)

Move_uploaded_file(临时文件路径, 目标路径);       //两个路径都带文件名(copy())

文件上传错误

文件在上传的过程中,很有可能出现多种错误: 用户根本没有选中要上传的文件,或者网络不稳定等,都有可能出现错误: 而这种错误不是由PHP来抓取: PHP只负责处理最终由系统接收好的临时文件.

系统在接收文件的过程中,会将已经出现的错误信息变成对应的错误代码error提示PHP: PHP根据错误提示进行相应的处理.

封装文件上传函数

创建一个单独的文件: 里面只存放上传文件的函数

确定需要实现上传函数的参数: 要上传的文件数组信息, 要上传的文件路径, 允许上传的类型数组, 当前允许的大小(size)有默认值

确定返回值: 成功返回文件的新名字, 失败返回false

因为文件上传会出现错误:要将错误信息反馈出来: 引用传递错误信息

判断文件文件信息

a)

判断文件信息是否有效: 必须是数组,而且必须是5个元素数组

b)

判断系统错误(文件中的error信息)

c)

判断文件类型是否合法: 如果类型不再允许的类型数组中

d)

判断文件大小是否符合当前要求


讯享网

需要对文件进行重命名: 时间 + 随机字符串: 新建一个函数专门产生随机名字

移动文件到指定目录

验证函数是否正确: 调用

总结:一般的数据提交方式是:post表单方式因为post是隐藏式提交相对于get方式比较安全,一般链接都是get方式提交,重要的数据传输都是post,在php中的接受数据方式分别为$_POST,$_GET,还有一种方式是$_REQUEST表示两者的混合

复选框:例如一个人的爱好有很多,但是type的类型只能是一个(爱好);我们可以这样做将踢足球,打篮球等这些放到爱好了,爱好是数组,踢足球和打篮球是他的子元素;

文件上传:要考虑符合文件上传的规则,例如明白文件上传的五要素(文件的信息,文件的路径,文件的类型,文件的大小,

//接收上传文件

header('Content-type:text/html;charset=utf-8');

//查看文件上传信息

//var_dump($_POST);

//文件上传信息: $_FILES

echo '

';

讯享网

var_dump($_FILES);

//休息一下

//sleep(10);

//接收文件信息

$file = $_FILES['myfile']; //$file是一个数组: 五个元素

//移动临时文件

//$res = move_uploaded_file($file['tmp_name'],'uploads/' . //$file['name']);

//var_dump($res);

//调用文件上传函数实现文件上传

include_once 'demo11_fileupload_function.php';

//自定义允许的类型: image/pjpeg是IE浏览器下特有的一种MIME类型

$allow = array('image/png','image/jpg','image/jpeg','image/pjpeg','image/gif');

//使用函数

$filename = uploadfile($file,'uploads',$allow,$error);

//$error虽然没有定义,但是不会出错: 函数内部不是使用$error,而是赋值

//判断结果

if($filename){

//成功

echo $filename;

}else{

//失败

echo $error;

}

文件上传代码

//文件上传函数

/*

* 实现文件上传

* @param1 array $file,要上传的文件信息(文件五要素数组)

* @param2 string $path,要上传的文件路径

* @param3 array $allow,允许上传是文件类型(MIME)

* @示例 $allow = array('image/jpg','image/jpeg'...)

* @param4 string &$error,用来记录错误信息的变量

* @param5 int $maxsize = , 默认为1M

* @return 成功返回新的文件名,失败返回false

*/

function uploadFile($file,$path,$allow,&$error,$maxsize = ){

//判断文件是否有效

if(!is_array($file) || count($file) != 5){

//文件无效

$error = '无效文件,不能上传!';

return false;

}

//判断系统错误(系统在接收数据的时候发现的错误)

switch($file['error']){

case 1: //文件超过服务器允许的大小

$error = '文件超过服务器允许的大小!'; //ini_get('upload_max_filesize')获取配置文件中指定配置项的值

return false;

case 2: //超过浏览器表单允许大小

$error = '文件超过表单允许大小!';

return false;

case 3: //上传部分

$error = '文件只有部分上传成功!';

return false;

case 4: //没有选中文件

$error = '没有选中要上传的文件!';

return false;

case 6:

case 7:

$error = '服务器错误!';

return false;

}

//判断文件类型是否合法

if(!in_array($file['type'],$allow)){

//类型不存在

$error = '当前文件的类型不合法!'; //增加允许的类型

return false;

}

//判断文件的大小是否满足当前需求

if($file['size'] > $maxsize){

//超出大小

$error = '文件超出当前允许的范围!'; //告诉用户大小

return false;

}

//获取文件的新名字

$filename = getRandomName($file['name']);

//移动文件

if(move_uploaded_file($file['tmp_name'],$path . '/' . $filename)){

//D:/server//abcdef.jpg

//移动成功: 返回名字

return $filename;

}else{

//移动失败

$error = '文件移动失败!';

return false;

}

}

/*

* 生成随机名字: YYYYMMDDHHIISS + 随机6为字符串(小写字母)

* @param1 string $filename,原始文件的名字

* @return string $newname,新的文件名字

*/

function getRandomName($filename){

//生成时间部分名字

$newname = date('YmdHis');

//获取随机部分

$str = 'abcdefghijklmnopqrstuvwxyz';

for($i = 0;$i < 6;$i++){

//每次从字符串中取一个

$newname .= $str[mt_rand(0,strlen($str)-1)];

}

//补全后缀名

return $newname . strrchr($filename,'.');

}

封装好的文件上传代码

js基础知识1:标识符 注释

何为标识符:意思是标记识别的的符号,简称标识符,主要的用途声明变量,函数的名字,属性以及函数中的参数. 标识符的规则1:首先第一个字符必须是字母(abcABC),_(下划线),$(美元符号).不能是( ...

WinPE基础知识之代码解析

void CMyPE::OnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 // 打开一个文件夹选择对话框 CFileDialog dlg(TRUE); dlg. ...

Struts2入门1 Struts2基础知识

Struts2入门1 Struts2基础知识 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...

浅析C&plus;&plus;基础知识

近期想对C++的面试题目进行一下更加详细的整理.事实上认真思考一下C++程序猿的面试,我们能够发现对程序猿的能力的考察总是万变不离当中,这些基础知识主要分为五部分:一. C/C++基础知识 二. C/ ...

为企业应用开发提速,写给企业IT部门的低代码开发基础知识

简介:应用程序开发长期以来一直是IT部门和业务部门面临的问题. IT部门总是被新的应用程序需求弄得不堪重负.他们不可能完成业务部门想要完成的每一个项目. 同时,业务部门的用户厌倦了等待,并开始完全绕过 ...

Java基础知识(壹)

写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

Java基础知识【上】&lpar;转载&rpar;

http://blog.csdn.net/silentbalanceyh/article/details/ (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

Oracle数据库基础知识

oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

Linux基础知识整理

一.基础知识 1.Linux简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件 ...

java基础知识小总结【转】

java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

随机推荐

&lbrack;转载&rsqb;给IT人员支招:如何跟业务部门谈需求分析?

一提跟业务人员做“需求分析”,许多IT人员立刻就头大了,要么不在同一个“频道”讲话,要么“变来变去,定不下来”.如何跟业务部门谈需求分析呢,我们带着这个问题,与聚冠因尚的咨询顾问杨春波展开了讨论. 1 ...

Jenkins持续集成

Jenkins持续集成 & .NET   最近受累于测试环境每次发布都很麻烦,而且我们有多个测试环境,因此专门抽时间做了Jenkins的配置和研究. 折腾了两天终于绿灯以后,先来个截图,Blu ...

&lbrack;Solution&rsqb; AOP原理解析及Castle、Autofac、Unity框架使用

本节目录: AOP介绍 AOP基本原理 AOP框架 Castle Core Castle Windsor Autofac Unity AOP介绍 面向切面编程(Aspect Oriented Prog ...

在SharePoint 2010中部署RBS (转)

一.RBS(Remote BLOB Storage)简单介绍 在SharePoint的大部分企业应用案例中,SharePoint都是要承担着非常繁重的文件管理工作,这些文件类型包含了Word文档,Ex ...

翻译 &vert; Thingking in Redux(如果你只了解MVC)

小讯
上一篇 2025-01-28 22:40
下一篇 2025-03-05 09:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/12630.html