以S2的BBS论坛项目作为整个基础课程的案例。
1.连接数据库和执行第一个SQL语句:
1)PHP提供了连接数据库的函数--mysqli_connect(agrs0,agrs1,agrs3),我们直接使用就可以了。
此函数包括三个必要的参数,分别为:localhost,数据库用户名,数据源。
以bbs论坛连接MySQL数据库为例:
连接数据库:
$db = mysqli_connect('localhost','root','bbs');
执行SQL语句:
$sql="set names utf8"; <!--插入数据时的统一编码格式命令。-->
mysqli_query('$db',$sql); <!--SQL执行-->
2)由于IE巨大的容错能力和PHP的无错误提示,导致我们在执行SQL语句出错时不会像JSP一样明确的提示我们,为了我们的工作进展更顺利,这时我们就需要手动的让我们的错误抛出来,具体处理方式很有以下几种:
a. 在执行的SQL语句后面紧跟其后添加一句:echo $sql; "$sql" 就是我们所写的SQL语句。
2.MYSQL数据库乱码处理
1) 在创建表时注意在最后加入一句命令就可以了:charset 编码格式 eg: charset utf8
2) 在PHP代码里(插入数据时的先执行这句代码): mysql_query("SET NAMES utf8"); <!--插入数据的统一编码格式命令。-->
3.标签的原理就是将我们的PHP脚本代码替代成我们熟悉的正则表达式。
4.在PHP里执行SQL语句时的注意事项:
1) 当一个代码块需要当做一个整体来执行时,我们需要对其进行处理,也就是将其用大括号括起来:eg: {$user['uPass']}
2) 在PHP里的 SQL语句不会像jsp 里一样会通过 setString()来自动识别变量是否为字符串,由于PHP是弱语言,我们需要将字符串实际的表达出来,就是将其用单引号括起来。
eg: '{$user['uName']}'
3) PHP里的函数需要用到PHP里定义的全局变量时需要在引用的函数里用global声明一下。eg: global $db;
以BBS论坛为例,以上问题具体处理如下:
<?php
<!-- 导入数据库连接 lib_db.php 文件-->
include('lib_db.php');
<!-- 添加用户函数 -->
function addUser($user) <!--$user 是一个数组-->
{
global $db;
$sql="insert into user values(null,'{$user['uName']}','{$user['uPass']}','{$user['head']}',now(),'{$user['gender']}')"; <!--问题1,2所在-->
return mysqli_query($db,$sql);
}
<!-- 用户登录验证函数 -->
function userValidate($uName,$uPass)
{
global $db; <!--问题3所在-->
$sql="select * from user where uname='$uName' and upass='$uPass'";
$res=mysqli_query($db,$sql);
if($rd=mysqli_fetch_array($res,MYSQLI_ASSOC))
{
return $rd;
}else
{
return null;
}
}
?>
5.include 静态包含
1) 实例: include('includes/lib_user.php'); 第4点中的例子有用到过。
2) 同样也可能会出现包含出错的现象和被迫被包含的问题,所以我就需要一个定义一个全局常量来对其进行操作。通过这个全局常量来识别是不是需要我们进行包含的PHP脚本,从而避免出现包含粗错等问题。
6. session 保存用户状态
1) PHP里保存用户状态和JSP里一样也是通过session来维持和保存用户的状态的,由于在PHP里session 的状态时是需要启动的,这是和JSP不同,在使用session对象时PHP页面
里需要通过 session_start(); 函数来启动 session 会话对象。而且在其他使用 session 会话对象的页面都需要使用这个函数来启动一次。
2) 使用session对象来储存数据
session_start();
$_SESSION['user']=$user;
header("Location:index.php");
3) 取得session里的值和对象
session_start();
@$user=$_SESSION['user']; <!--加上@符号是为了避免错误码的。-->
4) 销毁
在jsp里我们都是通过销毁方法 session.invalidate(); 来实现的,在PHP里我们不这么做,而是根据session的特性(数组)将原来的session赋值为空,
eg: $_SESSION['user'] = array(); 把一个新的数组赋给它,原来的它就变成了一个空。
7.cookie 保存用户状态
1) cookie 是以键值对的形式来存储数据的,而且自能存储字符串。
2) eg: setcookie('uName',$uName,time()+30*60);
说明:其中第一个参数是键,第二个参数是值,第三个参数是cookie的生命期周期,通常我们是给其设置为30分钟。
3) 销毁cookie 在jsp里我们都是通过销毁方法来实现的,在PHP里我们不这么做,而是根据cookie的特性(键值对)将原来的cookie赋值为空,将其时间也设置为立马失效。
setcookie('uName','',time()-30*60);
8.问号传递参数
1) 在PHP里的问号传参和给JSP里是大致相同的,我们需要注意以下几点:
a. 在处理特殊字符时,我们需要对我们的URL进行 URL格式编码。具体操作:$url = '?uname='.urlencode(value);
b. 有编码,必然有解码: $uname = urldecode($_REQUEST('uname'));
b. 我们必须采用get方式提交请求
9.网络编程语言的思想是:一般情况下:需要什么,就发送什么请求,我就给什么响应。所以我们的每一步操作都是通过发送HTTP请求来完成的。所以我们的信息都是依靠HTTP协议来传输的,这就必然需要我们去了解HTTP协议的规则和核心技术。
10.在PHP脚本语言里同样可以实现MVC模式的构造,这需要我们自己去实现。同样也有一些框架技术来支持我们的PHP脚本语句的布局。
11. PHP网络编程语言是一门很好的编程语言,我就将今天所学的一些基础知识总结一下,方便我自己学习和提高。其中肯定有这样那样的问题,请各位批评指正,一起进步。