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

回顾

数组: 数据的组合

数组定义: 三种方式(常用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 = 1000000, 默认为1M

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

*/

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

//判断文件是否有效

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//20150923abcdef.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基础知识 20131130 代码下载: 链接: 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/4608272 (最终还是决定重新写一份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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值