跳至主要內容

请求

Emilia Zhen大约 11 分钟php

GET 方式传值

表单:提供用户向 web 服务器发送数据的接口。method="get";
通过地址栏提交数据被存放在$_GET 数组中
数据上限一般为2KB

链接方式

只要在请求的url中包含参数,参数就会以GET方式传递到请求的页面。

<a herf="请求的地址?a=100&b=200">点击提交</a>

location.herf

locationJS对象,每个对象有属性、方法,JS跳转传递参数的本质还是在 URL 中包含参数,此时参数以GET方式传递到请求的页面

location.herf = '请求的地址?a=100&b=100'
location.assign(url)
header("location:跳转的地址");
header("refresh:秒数;url=新的地址");

POST 方式

属性值作为$_POST关联数组元素的下标使用
适用密码等安全性要求比较高的场合,数据量比较大的场合,如发布文章上传文件
不通过地址栏提交。数据上限默认为 8M

预定义变量

系统预先定义好的变量,可以直接使用的变量 $_SERVER 存储服务器环境信息以及HTTP协议相关信息 $_GET 用户GET方式提交的数据 $_POST 用户POST方式提交的数据 $_REQUST GETPOSTCOOKIE数据 $_COOKIE 保存COOKIE数据(保存在浏览器端的用户隐私数据) $_SESSION 保存SESSION数据(保存在服务器端的用户隐私数据) $GLOBALS 引用所有的全局变量数据 $_FILES 上传的文件信息(包括文件名、文件类型、大小)

$_SERVER SERVER_SOFTWARE 服务器软件版本 SERVER_NAME 服务器名 SERVER_ADDR 服务器 IP 地址 SERVER_PORT 服务器端口 REMOTE_ADDR 客户端 IP 地址 DOCUMENT_ROOT 网站根目录 SCRIPT_NAME 请求脚本路径

PHP接收表单 name属性必选,value值必选 复选框中name'xxx[]'

文件上传

form表单数据的编码类型由enctype(encode type)决定,默认为application/x-www-form-urlencoded方式编码,文件上传时属性值必须设置为multipart/form-data
数据提交方式POST方式
文件域 <input type="file" name ="属性值"/>

数据接收:$_FILES 二维数组

  • name 文件名
  • type 文件类型
  • tmp_name 临时文件路径
  • error 错误代号
  • size 文件大小

临时文件可以用,sleep()函数,休眠代码的执行来查看

  • error => 0 代表没有发生错误,文件上传至临时路径成功
  • error => 1 上传的文件超过了php.iniupload_max_filesize选项(默认2M)限制的值
  • error => 2 上传的文件大小超过input标记设置的MAX_FILE_SIZE
    可以通过<input type="hidden" name="MAX_FILE_SIZE" value="3000"/>实现浏览器对文件大小的初步判断,避免过大文件不必要的上传造成的浪费时间
  • error => 4 没有文件被上传
  • error =>6 找不到临时文件夹

超出了POST—_MAX_SIZE时,数组$_FILES为空,此时无错误代码提示
is_uploaded_file($file['tmp_name'])判断是否是合法的HTTP post上传文件
move_uploaded_file(临时路径$file['tmp_name'],永久路径$savePath);移动至永久目录

文件上传相关问题

文件扩展名简单获取方法 string strrchr($str,'.'); 避免文件名重复 $savePath = './upload/'.date('YmdHis-').mt_rand(1000,9999).$ext; 大小限定 $maxSize * 1024 *1024 < $file['size']

文件类型限定 MIME 类型

  • image/png,image/gif,image/jpeg
  • text/html,text/css,text/javascript
  • text/plain
  • application/pdf 在PHP扩展及设置->PHP扩展->php_fileinfo开启 finfo_open(FILEINFO_MINE_TYPE); 打开fileinfo资源,为后续获取MIME类型准备 finfo_file(finfo文件资源,临时文件名); 读取上传文件的MIME类型,返回文件的MIME类型字符串 in_array($a,$arr);判断$a是否在数组$arr

PHP 的 MySQL 数据库扩展

PHP扩展及设置=>PHP扩展=>php_mysql 检查是否加载成功function_exist(函数名);function_exist('mysql_connect');

PHP 操作数据库步骤

  1. 连接数据库
mysql_connect("主机名[:端口号],用户名,用户密码")

返回资源型的数据库连接,失败返回false 2. 设置字符集

 set names utf8;
  1. 选择数据库
use db_name;

mysql_error()返回上一个sql语句执行的错误信息

  1. 发送执行 SQL 语句
$sql=" ";
mysql_query($sql);
  1. 结果(集)、错误信息处理 判断执行结果,给出提示
  2. 断开连接:释放内存
mysql_close(resource[$link]);

查询结果集

mysql_num_rows(resorce $res);

返回查询结果集中的行数,如果为0行则为空结果集

解析结果集

mysql_fetch_array(resource $res);

返回结果集中的一行,以混合数组形式返回。既有数字下标形式,又有字符下标形式

mysql_fetch_row($res);

执行一行返回一行,以索引数组形式返回

mysql_fetch_assoc($res);

返回关联数组,元素下标为查询字段的名称 -> 均每次执行取出结果集中的一行,并且将指针向下移动一次,指针非法时返回false

使用固定的数据填充表格

<?php while($arr=mysql_fetch_assoc($res)):?>
  <tr>
    <td><?=$arr['id']?></td>
    <td><?=$arr['name']?></td>
    <td><?=$arr['color']?></td>
  </tr>
<?php endwhile;?>

HTTP 协议

  • 协议:事先的一种约定、规则、规范、标准。有HTTP(超文本传输协议),ftp(文件传输协议,将网站程序传输到Apache服务器),SMTP(简单邮件传输协议),pop3(邮局协议版本 3,收发邮件的协议),telnet(远程登录协议)
  • HTTP协议:超文本传输协议,Web服务器上存储有HTML文件及图像资源等,在请求资源时,客户端(浏览器端)与 WEB 服务器端之间的交互协议

HTTP/1.0

无连接请求,每次TPC/IP连接只能处理一个请求,浏览器向服务器发起一次请求后,只能得到服务器的一次响应

HTTP/1.1

默认为长连接,持久连接,一次连接可以请求多个资源。

无状态

也叫无记忆功能,多次请求之间没有对应关系。即同一个浏览器向同一个服务器发起多次请求的时候,服务器不能识别该浏览器。如已经登录请求其他页面还需要登录。

HTTP 请求协议

客户端向服务器索要数据时遵循的协议(按照什么格式发送数据,或者必须发送的内容)

  • 请求行 :请求方式、请求的页面,遵循的协议
  • 请求头 : 通知服务器,浏览器支持的数据类型
  • 空白行
  • 请求体 : 提交的核心数据

HTTP 响应协议

服务器向浏览器返回数据时的协议

  • 响应行 : 请求资源成功、失败、或者其他的状态。协议版本 状态码 状态描述
  • 响应头 : 通知浏览器一些信息,如返回数据的类型、使用什么字符集显示数据等
  • 空白行
  • 响应体 : 请求的 HTML,PHP 输出语句返回的数据
    CODE说明
    1xx请求尚未成功
    2xx请求正常
    3xx重定向
    4xx请求失败
    5xx服务器错误

header 函数

header('content-type:text/html;charset=utf8');
header('content-type:image/png') 返回的是图像的二进制信息,解析时必须按照图像格式解析
header('location:请求的页面');
header('refresh:3;ulr=./请求地址');

会话技术

浏览器与服务器之间的数据交流。在同一台浏览器对服务器多次的请求中,将数据持久化存储的技术,以实现连续的业务逻辑。

  • 数据持久化存储在服务器,为session技术
  • 数据持久化存储在浏览器,为cookie技术
操作方法
设置setcookie(数据名,数据); 存储的数据类型为字符串
查看浏览器中 cookie
读取$_COOKIE 中
修改setcookie('变量名','新值');
删除setcookie('变量名','');
setcookie('名称', '值', '有效期', '有效路径', '.mm.com')
  • 有效期用时间戳(秒数)来表示,..后对应的COOKIE数据消失,time()-1; PHP_INT_MAX;默认关闭窗口后消失
  • 有效路径默认在当前目录及子目录的脚本可以直接访问对应的COOKIE信息,将值设为/,表示网站根目录、整站有效
  • 有效域名,为mm.com的其他子域名均可读取

SESSION

  • 开启session机制 session_start(); 开启session会话或重用已经创建的会话
  • 设置 $_SESSION['a']='xxx';
  • 读取 $_SESSION['b'];
  • 删除 $_SESSION=[]; unset($_SESSION['a']);删除的是session文件的数据 session_destroy(); 删除session会话文件,PHP脚本将无法读取session数据 SESSION数据是基于COOKIE的,响应时PHP脚本将当前SESSION会话名称以COOKIE数据的形式返回给浏览器(COOKIE数据名为PHPSESSID),浏览器再次请求本网站的任意页面时,自动携带名为PHPSESSIDCOOKIE数据,PHP 按照会话名称查找对应session文件,将数据读取到$_SESSION数组中

SESSION配置选项

php.ini

  • COOKIE PHPSESSID,
  • session.cookie_life_time
  • session.cookie_path
  • session.cookie_domain

sessionCOOKIE之间的区别

  • cookie存储在浏览器,session存储在服务器端
  • session存储在服务器端,不易获取,更加安全
  • 每次请求COOKIE传输量较大,传递该网站相关的全部COOKIE数据
  • COOKIE支持字符串,SESSION几乎所有的数据类型

登录退出

密码 char(32) , md5('***'); 在登录成功时,使用session技术保存user_name,来判断其他是否登录,在退出时删掉文件

分页

select * from xxx limit ($pagenow-1)*$pagesize,$pagesize;
select count(*) from xxx; 获取数量;

验证码

GD绘图,GDPHP的一个扩展库,需要手动开启GD扩展库,修改php.ini配置文件,增加extension=php_gd2.dll;php_gd2.dll文件复制到php/ext目录中。在phpStudy直接在配置文件中勾选。

  1. 创建画布
  2. 绘制图像
  3. 输出图像
  4. 销毁图像

创建文件资源

resource imagecreate ( int $x_size , int $y_size )
resource imagecreatetruecolor ( int $x_size , int $y_size )
resource imagecreatefromjpeg ( string $filename )
resource imagecreatefrompng ( string $filename )
resource imagecreatefromgif ( string $filename )

颜色填充

bool imagefill ( resource $image , int $x , int $y , int $color )

输出图像

bool imagegif ( resource $image [, string $filename ] )
bool imagejpeg ( resource $image [, string $filename ] )
bool imagepng ( resource $image [, string $filename ] )

销毁图像

bool imagedestroy ( resource $image )

绘制图形

点和线

bool imagesetpixel ( resource $image , int $x , int $y , int $color )
bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

矩形

bool imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )
bool imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

多边形

bool imagepolygon ( resource $image , array $points , int $num_points , int $color )
bool imagefilledpolygon ( resource $image , array $points , int $num_points , int $color )

椭圆

bool imageellipse ( resource $image , int $cx , int $cy , int $w , int $h , int $color )
bool imagefilledellipse ( resource $image , int $cx , int $cy , int $w , int $h , int $color )

椭圆弧

bool imagearc ( resource $image , int $cx , int $cy , int $w , int $h , int $s , int $e , int $color )
bool imagefilledarc ( resource $image , int $cx , int $cy , int $w , int $h , int $s , int $e , int $color , int $style )

字符

bool imagechar ( resource $image , int $font , int $x , int $y , string $c , int $color )
bool imagecharup ( resource $image , int $font , int $x , int $y , string $c , int $color )

字符串

bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )
bool imagestringup ( resource $image , int $font , int $x , int $y , string $s , int $col )

中文字符

array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )

取得图像大小

int imagesx ( resource $image )
int imagesy ( resource $image )

拷贝图像调整大小

bool imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

绘制完毕后在php页面最上方header('content-type:image/png')

登录页面引入验证码

<img src="verify.php">  verify.php为绘制的验证码

点击验证码图片刷新验证码

对验证码图片绑定鼠标点击事件,this.src="../pngcreate.php?_="+Math.random();

jquery中,a标签对象调用submit()方法可提交表单,$('#id').submit();

将生成的验证码字符串保存在session当中,方便其他页面获取, 在check.php页面中接受表单提交的用户验证码和保存的验证码判断

检测用户名和密码

接收表单提交的用户名秘密,核对成功后,将用户信息通过session保存

退出登录

删除session文件

防跳墙访问

检测session中是否有值

富文本编辑器

引入CSS,JStextarea一个id,在后面jsvar um = UM.getEditor('idName',{修改配置});

三表联查

select xxx,xxx,xxx,xxx from tableA as A join tableB as B on A.xx=B.xx join tableC as C on C.xx=B.xx;

筛选

$where = "";
if($selectA != 0){
$where .= '"A=$selectA and ";
}
if($selsctB != 0){
$where .= "B=$selectB and ";
$where .= '1';
$sql="select .. where $where";

自定义属性

在行内样式 data-xxx="xxx" 创建自定义属性

$(this).attr('data-xxx')
获取

获取复选框选中的集

$(':checkbox:checked')

输入框只读

在行内标签加入readonly

多组数据同时更改值

update tableA set XXX = 'xxx' where xxid in (1,2,3);

PHP 文件写入

fopen(var1,var2);打开一个文件

  • 参数 1:要打开的文件的路径
  • 参数 2:打开的方式 :r(read)以只读方式打开文件,w(write)以写入方式打开文件,若文件不存在则自动创建,将文件中内容自动清空
  • 返回值:res

fwrite(var1,var2);将一段文字写入文件

  • 参数 1:资源型
  • 参数 2:要写入的内容

单组数据的文件存储,创建一个PHP文件,读取方式为include_once 'site.conf.php',PHP 中 return array('k'=>'v'); 更改该文件用fwrite="config.php数据拼接"

unlink(filename)删除文件

htmlspecialchars_decode($str) 带标签的字符串转为 HTML