预处理 超全局变量 设计开发流程

来源:互联网 发布:网络捕鱼游戏排行榜 编辑:程序博客网 时间:2024/04/29 03:04

u mysqli扩展库的 预处理技术  mysqli stmt      需要关闭预处理

     超全局变量 可以把所有的信息给打印出来

问题的提出?

现在需要向mysql数据库添加100个用户,请问如何实现?

思路:

1. 使用for循环100次,向数据库中添加100个用户.

2. 使用批量添加

$sql1=”insert xxx”;

$ssql.=”insert xxx ”;

。。。

使用

$msyqli->mutil_query($sql1);

3. 方案使用预编译技术,该方案还可以防止sql注入攻击.

实现代码

<?php

//预编译演示

//需求请使用预处理的方式,向数据库添加三个用户 

//1.创建mysqli对象

$mysqli=new MySQLi("localhost","root","hsp123","test");

//2.创建预编译对象

$sql="insert into user1 (name,password,email,age) values(?,?,?,?)";

$mysqli_stmt=$mysqli->prepare($sql) or die($mysqli->error);

//绑定参数

$name="小倩";

$password="xiaoqian";

$email="aa@sohu.com";

$age="200";

//参数绑定->?赋值,这里类型和顺序都要对应.

//

$mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);

//执行

$b=$mysqli_stmt->execute();

//继续添加

$name="老妖";

$password="laoyao";

$email="laoyao@sohu.com";

$age="210";

$mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);

//执行

$b=$mysqli_stmt->execute() ;

//继续添加

$name="菜层";

$password="aaa";

$email="aa@sohu.com";

$age="30";

$mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);

//执行

$b=$mysqli_stmt->execute();

if(!$b){

die("操作失败".$mysqli_stmt->error);

}else{

echo "操作ok";

}

//释放

$mysqli->close();

?>

使用预编译技术完成查询任务..-》如何封装..项目中说.

<?php

//预编译演示

//需求请使用预处理的方式,从数据库查询 

//使用预处理的方法,查询所有id>5的用户 的id,name,email

$mysqli=new MySQLi("localhost","root","hsp123","test");

if(mysqli_connect_error()){

die(mysqli_connect_error());

}

//创建一个预定义的对象 ?占位

$sql="select id,name,email from user1 where id>?";

$mysqli_stmt=$mysqli->prepare($sql);

$id=5;

//绑定参数

$mysqli_stmt->bind_param("i",$id);

//绑定结果集

$mysqli_stmt->bind_result($id,$name,$email);

//执行

$mysqli_stmt->execute();

//取出绑定的值

while($mysqli_stmt->fetch()){  

echo "<br/>--$id--$name--$email";

}

//还想执行另一个sql

echo "<br/>***********************************";

$id=10;

//绑定参数

$mysqli_stmt->bind_param("i",$id);

//绑定结果集

//执行

$mysqli_stmt->execute();

//取出绑定的值

while($mysqli_stmt->fetch()){

echo "<br/>--$id--$name--$email";

}

//关闭资源

//释放结果 

$mysqli_stmt->free_result();

//关闭预编译语句 [这里需要关闭创建的预处理对象]

$mysqli_stmt->close();

//关闭连接

$mysqli->close();

?>

预编译可以自动防止sql (结构化查询语句)注入攻击

使用万能密码

//查询某个管理员是否存在.

$sql=”select * from user1 where name=’ls’ and password=’xxxxxxx’”;

//看看有没查询到用户

if(查询到){

header(“admin.php”);

}else{

header(“login.php”)

}

//解决方案

//1.使用预编译

//2.改变验证数据库用户逻辑

$sql=”select password from user1 where name=’ls’”;

//看看有没有查询到记录

//如果有说明用户存在

if(从数据库查询的密码= =用户输入的密码){

//合法,用户合法

header(“admin.php”);

}else{

header(“ok.php”)

}

☞ 补充一个关于sql语句执行原理的知识点.

u 现在我们看看mysqli的一些其他常用函数

案例编写一函数,接收一个表名,然后把表头和表数据,显示页面

<?php

function showTable($table_name){

$mysqli=new MySQLi("localhost","root","hsp123","test");

if(mysqli_connect_error()){

die(mysqli_connect_error());

}

//$sql="select * from $table_name";

$sql="desc user1";

$res=$mysqli->query($sql);

//如何获取返回总行数和列数

echo "共有 行".$res->num_rows." -=".$res->field_count;

echo "<table border='1'><tr>";

//如何取出表头,$res取出

while($field=$res->fetch_field()){

echo "<th>{$field->name}</th>";

}

echo "</tr>";

//循环取出数据

while($row=$res->fetch_row()){

echo "<tr>";

foreach($row as $val){

echo "<td>$val</td>";

}

echo "</tr>";

}

echo "</table>";

//关闭资源

$res->free();

$mysqli->close();

}

showTable("user1");

?>

授课思路:

mysql 扩展库, mysqli 扩展库 . pdo[放在后面讲解]

现在我们做项目串知识点.

先给大家讲解预定义超全局变量

u PHP中预定义超全局变量

① 什么是全局变量

<?php

$a=23;//全局变量,因为该变量在整个作用域(在这个php文件中),都是可见 

function test(){

//如果希望使用到全局$a;

global $a;

$a=45;

}

test();

echo $a;

?>

② 什么是超全局变量

超全局变量除了有全局变量的特点外,可以无须申明,直接使用.

快速入门

//超全局变量

$_SERVER['hsp']="韩顺平";

echo "<pre>";

echo print_r($_SERVER);

echo "</pre>"

提供超全局数组的原因是为了让程序员更方便快捷的写出PHP程序.

③ PHP供提供了九种

1. $_GET

2. $_POST

3. $_REQUEST

4. $_SERVER

5. $_ENV 

6. $_FILE

7. $_COOKIE

8. $_SESSION

9. $GLOBALS

u 现在一个一个讲解

1. $_GET

$_GET原理来分析数据的来龙去脉...

说明原理图:

$_GET 实际使用.

l 客户机(浏览器)通过超链接传送信息给服务器

案例1

test.php页面

<?php

//urlencode编码

echo "<a href='a.php?city=北京好&name=xiaoming'>传送数据</a>";

?>

面试题请问如何处理超链接提交数据的中文乱码问题?

1. 对于高版本的ie 浏览器,无需处理

2. 对应 5.5 和 6.0 ie需要进行urlencode()编码处理 

3. 尽量使用字母和数字.

a.php页面

<?php

echo "<pre>";

echo print_r($_GET);

echo "</pre>";

//如果希望指定取出某个数据,则可以通过下标名

echo $_GET['name'];

?>

看看ie5.5 和 ie 6的中文奇数乱码.

解决方法1.

给奇数中文加一个全角空格,然后到服务器接收是,去掉两头的空行 trim()

解决方法2:

使用urlencode 和 urldecode函数

test.php页面

<?php

//这句话是对中文url编码.

$str=urlencode("北京好");

echo "<a href='a.php?city=".$str."&name=xiaoming'>传送数据</a>";

?>

//a.php 页面中,正常接收。

<?php

echo "<pre>";

echo print_r($_GET);

echo "</pre>";

//如果希望指定取出某个数据,则可以通过下标名,如果php版本低,可能看到是中文,需要使用 urldecode() 来解密

echo "--".$_GET['city'];

?>

_GET也可以接收表单以get方式提交数据

<form action=”a.php” method=”get”>

//....

</from>

特别说明如何提交表单数据建议使用POST,不要使用GET

使用细节

u 如果判断是否收到值

a. php

if(empty($_GET['city'])){

echo "没有收到";

}else{

echo "city";

echo $_GET['city'];

}

//这个方法可以,参看,建议使用empty

if(!isset($_GET['city'])){

echo "没有收到hello";

}else{

echo "city";

echo $_GET['city'];

}

u 绝对不要启用register_globals   需要 register_globals = Off

u $_POST

描述 通过Http POST 方式提交的数据,会被封装到$_POST超全局数组中.

举例接收表单信息:

代码:

代码:

register1.php页面

<html>

<head>

<meta http-equiv="content-type" content="text/html;charset=utf-8"/>

</head>

<h1>用户注册</h1>

<form action="register2.php" method="post">

用户名:<input type="text" name="username"/><br/>

密码<input type="password" name="passwd"/><br/>

性别:<input type="radio" name="sex"  value="female" />女 <input type="radio" name="sex"  value="male" /><br/>

你喜欢什么:

<input type="checkbox" name="hobby[]" value="唱歌">唱歌

<input type="checkbox" name="hobby[]" value="跳舞">跳舞

<input type="checkbox" name="hobby[]" value="游泳">游泳

<input type="checkbox" name="hobby[]" value="骑马">骑马

<br/>

你的所在地是:

<select name="city">

<option value="beijing">北京</option>

<option value="tianjing">天津</option>

<option value="nanjing">南京</option>

</select>

<br/>

个人介绍 :

<textarea rows="10" name="intro" cols="30">

</textarea><br/>

你选择图片<input type="file" name="myphoto"/><br/>

<input type="submit" value="提交"/>

</form>

</html>

**regiseter2.php***

<?php

//看看如何接收

echo "<pre>";

echo print_r($_POST);

echo "</pre>";

//关心爱好

$name=$_POST['username'];

$pwd=$_POST['passwd'];

//如何接收checkbox提交的数据

$hobbies=$_POST['hobby'];

echo "个人信息如下<br/>";

echo "$name--$pwd";

//print_r($hobbies);

echo "该人的爱好";

foreach($hobbies as $key=>$val){

echo "<br/>$key=$val";

}

echo "<br/>你的所在地是";

$city=$_POST['city'];

echo $city;

echo "<br/>个人介绍如下";

$intro=$_POST['intro'];

echo "<br/>$intro";

echo "<a href='#'>查看调查情况</a>"

?>

这里还有一个下拉框的演示

10min: 

你编写生活幸福度的调查表,然后把调查的信息,存入到数据库.,看看能否获取数据,显示给用户看.

get数据提交主要是

<a></a>   默认是get提交

<?php

//当这样的方式跳转的时候,也是以get方式提交给ok.php

header(“Location: ok.php?aaa=xiaoming”);

?>

u postget区别请参看ppt

① 安全性  post>get

② 数据传输大小 [浏览器] post>get

③ 保存到收藏夹 get比较方便.

u $_REQUST

定义: $_REQUST 中可以包括 $_GET/$POST/$_COOKIE 数组,的信息.

快速入门:

这里就很好理解,看一个案例 :

<?php

echo "<pre>";

echo print_r($_REQUEST);

echo "</pre>";

//如何取出某个值

//$_REQUEST既可以接收get  请求数据,也可以接收post请求、cookie..

//所以这个变量,比较不可以信,不建议使用. $_GET $_POST

echo $_REQUEST['aa'];

//如果不确定get/post

if($_SERVER['http_method']=="post"){

$echo $_POST['名字'];

}else if($_SERVER['http_method']=="get"){

//用 _GET接收.

}

?>

注意事项:

1. 不要经常使用$_REQUEST, 

2. 如果不确定_GET/POST

你接收数据时候,可以这样

if($_SERVER[' REQUEST_METHOD’]=="POST"){

$echo $_POST['名字'];

}else if($_SERVER[’ REQUEST_METHOD’]=="GET"){

//用 _GET接收.

}

u $_ENV

该全局数组可以获取环境变量,在php5.3中默认禁用,但是你可以启动,php.ini文件中启用.

variables_order = "EGPCS"

特别说明一把,在开发和生产环境,不要启用.

u $_FILE / $_COOKIE /$_SESSION

后面讲

u $GLOBALS

包含了全部变量的全局组合数组。变量的名字就是数组的键[手册]

同时一个自定义的全局变量,也会自动的被$_GLOBALS 管理

案例:

<?php

echo "aaaa";

echo "<pre>";

echo print_r($GLOBALS);

echo "</pre>";

?>

当你定义一个全局变量,该变量也会被$GLOBALS管理

<?php

$a=900;

echo “<pre>”;

print_r($GLOBALS);

echo “</pre>”

?>

案例说明:

u zend studio 工具的介绍

功能强大,官方推荐。

ide : 集成开发环境->软件.

u zend studio的第一次接触

开发一个PHP Project 

zend studio 是以工程的方式来管理PHP文件/js/css...

1. 创建项目

2. 设置该项目的路径

3. 创建一个文件

test.php

 

☞ 使用zend studio的细节

1. 将文件的编码设置成utf-8 

工具->windows->preferences->见图

zend studio常用快捷键和调式功能的介绍

1. 提示符助手快捷键

 alt+/ 

你可以自己定义

 alt+z

windows->keys 去修改content assistant

2. 复制当前行 

ctrl+alt+ 下光标

3. 删除当前行

ctrl+D

4. 加注释的快捷键

块注释

shfit+ctrl+\

取消

shfit+ctrl+/

行注释

ctrl|+/ 

第二次就是取消

5. 调试php代码的快捷键

掌握

1. 如何下断点

2. 如何调式 (f5 f6 f7

调试:

我们为了发现代码的错误,可以逐行执行代码,同时看到,变量的变化,这个过程称为调试调试的目的,就是为了发现隐藏的错误

f5 跳入

f6 跳过.(按顺序继续执行)

f7 跳出(函数跳出)

入门案例:

<?php

$res=0;

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

$res+=$i;

}

echo "res=".$res;

?>

删除断点,可以到PHP Dug 视图下一次性删除

断点:

所谓断点,就是指当我们的程序执行到这里时候,就停止执行,等待程序员指令是否继续执行。

开始编写我们的雇员管理系统.(演变过程 model1->mv->mvc)

主要的目的

1. 培养编写项目的感觉

2. 认识我们的mvc模式.(mvc模式.)

3. 规划项目

4. 融入各个知识点 [php基础、html、数据库、开发模式、cookie/session]

开发:使用原型开发. (模式)

项目开发流程:

需求分析->设计阶段->编码阶段->测试阶段->发布阶段/维护阶段

需求阶段:   需求设计人员./项目经理 对客户(领导) ->需求文档.

设计阶段技术人员(架构师 组长,程序员) ->设计数据库./选择技术/操作系统

编码阶段组长,程序员

测试阶段测试人员

发布阶段实施人员(实施工程师)

维护阶段往往是从开发人员中调.

美工(ps画图)->网页前端人员(html)[原型] ->客户                       程序员]

开发:

原创粉丝点击