PHP初级教程------------------
Posted 一个人9527
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP初级教程------------------相关的知识,希望对你有一定的参考价值。
目录
文件包含
文件包含:在一个php脚本中,去将另外一个文件(PHP)包含进来,去合作完成一件事情。
文件包含的作用
文件包含的意义:
1、 要么使用被包含文件中的内容,实现代码的共享(重用):向上包含(索要)
向上包含:在当前脚本要用某个代码之前包含别的文件
2、 要么自己有东西可以给别的文件使用,实现代码的共享(重用):向下包含(给予)
向下包含:在自己有某个东西的时候,需要别的脚本来显示(自己代码写完之后包含其他文件)
最大的作用:分工协作,每个脚本做的事情不一样,因此可以使用协作方式,让多个脚本共同完成一件事情。
文件包含四种形式
在PHP中文件的包含有四种形式(两种大形式)
Include:包含文件
Include_once:系统会自动判断文件包含过程中,是否已经包含过(一个文件最多被包含一次)
Require:与include相同
Require_once:以include_once相同
包含基本语法
Include ‘文件名字’;
Include(‘文件名字’); //文件名字:路径问题
以上方式:是先包含文件,后使用文件中的内容(向上包含)
向下包含:先准备内容,然后包含另外的文件,在另外的文件中,使用当前的内容
<?php //被包含文件 //定义数据 $a = 1; define('PI',3.14);
<?php //包含文件:使用数据 //包含文件 include '20include1.php'; //包含当前文件include2.php所在文件夹下的include1.php echo $a,PI; //再次加载 //include 'include1.php'; //include_once //include_once 'include1.php';
<?php //定义数据 $a = 10; const PI = 3.14; //包含文件:为了显示以上数据 include_once '23include4.php';
<table> <tr> <td><?php echo $a;?></td> <td><?php echo PI;?></td> </tr> </table>
文件加载原理
PHP代码的执行流程
1、 读取代码文件(PHP程序)
2、 编译:将PHP代码转换成字节码(生成opcode)
3、zendengine来解析opcode,按照字节码去进行逻辑运算
4、 转换成对应的html代码
文件加载原理:
1、 在文件加载(include或者require)的时候,系统会自动的将被包含文件中的代码相当于嵌入到当前文件中
2、 加载位置:在哪加载,对应的文件中的代码嵌入的位置就是对应的include位置
3、 在PHP中被包含的文件是单独进行编译的
PHP文件在编译的过程中如果出现了语法错误,那么会失败(不会执行);
但是如果被包含文件有错误的时候,系统会在执行到包含include这条语句的时候才会报错。
Include和require区别
Include和include_once的区别:
Include系统会碰到一次,执行一次;如果对统一个文件进行多次加载,那么系统会执行多次;
Include_once:系统碰到多次,也只会执行一次。
Require和include的区别:本质都是包含文件,唯一的区别在于包含不到文件的时候,报错的形式不一样
Include的错误级别比较轻:不会阻止代码执行
(a.php不存在这个文件,所以会报错)
Require要求较高:如果包含出错代码不再执行(require后面的代码)
附上代码:
<?php //require和include的区别 //include包含文件 //include 'a.php'; //require包含文件 require 'a.php'; echo 'hello world';
文件加载路径
文件在加载的时候需要指定文件路径才能保证PHP正确的找到对应的文件。
文件的加载路径包含两大类:
1、 绝对路径
从磁盘的根目录开始(本地绝对路径)
Windows:盘符C:/路径/PHP文件
Linux:/路径/PHP文件
从网站根目录开始(网络绝对路径)
/:相对于网站主机名字对应的路径
Localhost/index.php -> E:/server/apache/htdocs/index.php
2、相对路径:从当前文件所在目录开始的路径
.或者./:表示当前文件夹
../:上级目录(当前文件夹的上一层文件夹)
绝对路径和相对路径的加载区别
1、 绝对路径相对效率偏低,但是相对安全(路径不会出问题)
2、 相对路径相对效率高些,但是容易出错(相对路径会发生改变)
附上代码:
<?php //PHP文件加载路径 //相对路径加载 //include_once 'include1.php'; //默认当前文件本身 //include_once './include1.php'; //复杂相对路径 //include_once '../htdocs/include1.php'; //绝对路径 include_once 'E:/server/apache/htdocs/include1.php'; echo $a;
文件嵌套包含
文件嵌套包含:一个文件包含另外一个文件,同时被包含的文件又包含了另外一个文件。
嵌套包含的时候就很容易出现相对路径出错的问题:相对路径会因为文件的包含而改变(./和../):windows下面,每一个文件夹下都有.和..的文件夹。
张三 左边是 李四,李四左边是王五
张三把李四叫到自己的位置:李四与王五之间有两个位置,李四如果还按照左边伸手找王五就找不到
附上代码:
<?php //定义数据 $a = 10; const PI = 3.14; //包含文件:为了显示以上数据 include_once '23include4.php';
<table> <tr> <td><?php echo $a;?></td> <td><?php echo PI;?></td> </tr> </table>
<?php //文件嵌套包含 //包含include3.php//文件本身包含了include4.php include '22include3.php';
函数
函数的基本概念
函数:function,是一种语法结构,将实现某一个功能的代码块(多行代码)封装到一个结构中,从而实现代码的重复利用(复用)。
函数定义语法
函数有几个对应的关键点:function关键字、函数名、参数(形参和实参)、函数体和返回值
基本语法如下:
Function 函数名([参数])
//函数体
//返回值:return 结果;
定义函数的目的:是为了实现代码的重复利用,一个功能一个函数(简单明了)
函数的使用:通过访问函数的名字+(); //如果函数在定义的过程中有参数,那么在调用的时候就必须传入对应的参数:函数是一种结构不会自动运行,必须通过调用才会执行
函数是在代码执行阶段,碰到函数名字的时候才会调用,不是在编译阶段。
函数的调用特点:只要系统在内存中能够找到对应的函数,就可以执行(函数的调用可以在函数定义之前)
函数执行的内存分析:
1、 读取代码进入到代码段(编译:将代码变成字节码存储到内存)
2、 根据代码逐行执行
以上原因:编译和执行是分开的(先编译后执行)
附上代码:
<?php //函数 //调用函数 display(); //定义函数 function display() //函数体 echo 'hello world'; //没有返回值 //调用函数 //display();
调用在函数定义前,还是后都行
函数命名规范
命名规范:由字母、数字和下划线组成,但是不能以数字开头
函数作为一种常用的结构,一般遵循以下规则:函数通常名字代表着函数的功能,而有些功能会比较复杂,可能一个单词不足以表达,需要多个组合。
1、 驼峰法:除了左边第一个单词外,后面所有的单词首字母都大写:showParentInfo()
2、 下划线法:单词之间通过下划线连接,单词都是小写:show_parent_info()
函数名字:在一个脚本周期中,不允许出现同名函数(通常在一个系统开发中都不会使用同名函数)
参数详解
函数的参数分为两种:形参和实参
形参
形参:形式参数,不具有实际意义的参数,是在函数定义时使用的参数
实参
实参:实际参数,具有实际数据意义的参数,是在函数调用时使用的参数
形参是实参的载体:实参在调用时通常是需要传入到函数内部参与计算(运算),那么需要在函数内部去找到实际数据所在的位置才能找到数据本身:需要实际调用的时候,将数据以实参的形式传递给形参:给形参赋值,从而使得函数内部可以用到外部数据。
注意:
1、 在PHP中允许实参多余形参(个数):函数内部不用而已
2、 在PHP中理论上形参个数没有限制(实际开发不会太多)
3、 实参不能少于形参个数
默认值
默认值:default value,指的是形参的默认值,在函数定义的时候,就给形参进行一个初始赋值:如果实际调用传入的参数(实参)没有提供,那么形参就会使用定义时的值来进入函数内部参与运算。
通常默认值是用在一些,一定会有某个数据参与,但是可能通常是某个我们知道的值。
注意事项:
1、 默认值的定义是放在最右边的(多个),不能左边形参有默认值,但是右边没有
函数外部定义的变量名字与函数定义的形参名字冲突(同名)是没有任何关联关系的;如果多个函数使用同样的形参名字也不冲突。
引用传递
实参在调用时会将值赋值给形参,那么实际上使用的方式就是一种简单的值传递:将实参(如果是变量或者常量或者其他表达式)的结果(值)取出来赋值给形参:形参与外部实际传入的参数本身没有任何关联关系:只是结果一样。
有的时候,希望在函数内部拿到的外部数据,能够在函数内部改变,那么就需要明确告知函数(定义时),函数才会在调用的时候去主动获取外部数据的内存地址。以上这种定义形式参数的方式叫作引用传值。
基本定义语法:
Function 函数名(形参1,&形参2)
//函数体
在调用的时候,必须给引用传值的参数位置传入实际参数,而且参数本身必须是变量。(变量才有指向的数据的内存地址)
引用传值注意事项:在传入实参的时候,必须传入变量
附上代码:
<?php //函数参数 //定义函数 function add($arg1,$arg2) //形参可以有多个,使用逗号分隔即可 //函数体:可以直接使用形参运算 echo $arg1 + $arg2; //调用函数 $num1 = 10; //add($num1,20); //传入的实参,可以是变量或者其他有值的表达式(变量、常量、运算符计算结果) //函数的默认值 function jian($num1 = 0,$num2 = 0) //当前的$num1是形参,在编译时不执行,即便执行也是在jian函数内部,不会与外部的$num1变量冲突 echo $num1 - $num2; //调用:默认值如果存在,可以不用传入 //jian($num1); //echo $num1; //引用传值 function display($a,&$b) //修改形参的值 $a = $a * $a; $b = $b * $b; echo $a,'<br>',$b,'<br/>'; //定义变量 $a = 10; $b = 5; //调用函数 //display($a,$b); //echo '<hr/>',$a,'<br/>',$b; //错误调用:引用传值直接传入数据本身而不是变量 display(10,5);
函数体
函数体:函数内部(大括号里面)的所有代码都称之为函数体
函数体:基本上所有的代码都可以实现
1、 定义变量
2、 定义常量
3、 使用流程控制(分支、循环)
4、 可以调用函数
函数返回值
返回值:return,指的是将函数实现的结果,通过return关键字,返回给函数外部(函数调用处):在PHP中所有的函数都有返回值。(如果没有明确return使用,那么系统默认返回NULL)
返回值作用:将计算结果返回给调用处
注意:函数的返回值可以是任意数据类型
Return关键字:
1、 return在函数内部存在的价值:返回当前函数的结果(当前函数运行结束)
2、 return还可以在文件中直接使用(不在函数里面):代表文件将结果return后面跟的内容,转交给包含当前文件的位置。(通常在系统配置文件中使用较多),在文件中也代表中终止文件后面的代码:return之后的内容不会执行。
附上代码:
<?php //包含有return关键字的文件 $res = include_once 'function3.php'; var_dump($res);
<?php //函数返回值 //定义函数 function display() //输出 echo __FUNCTION__; //输出当前函数名字 var_dump(display()); //加法运算 function add($num1,$num2) return $num1 + $num2; //返回结果 //输出 echo $num1; $res = add(10,20); //外部定义变量接收函数运行结果 echo $res; //将结果提交给另外包含的文件 return 'hello world'; echo $res; //不再执行:上面return结束了
作用域
作用域:变量(常量)能够被访问的区域
1、 变量可以在普通代码中定义
2、 变量也可以在函数内部定义
在PHP中作用域严格来说分为两种:但是PHP内部还定义一些在严格意义之外的一种,所以总共算三种:
1、 全局变量:就是用户普通定义的变量(函数外部定义)
所属全局空间:在PHP中只允许在全局空间使用:理论上函数内部不可方法
脚本周期:直到脚本运行结束(最后一行代码执行完)
2、 局部变量:就是在函数内部定义的变量
所属当前函数空间:在PHP中只允许在当前函数自己内部使用
函数周期:函数执行结束(函数是在栈区中开辟独立内存空间运行)
3、 超全局变量:系统定义的变量(预定义变量:$_SERVER、$_POST等)
所属超全局空间:没有访问限制(函数内外都可以访问)
超全局变量会将全局变量自动纳入到$GLOBALS里面,而$GLOBALS没有作用域限制,所以能够帮助局部去访问全局变量:但是必须使用数组方式
如果想函数内部使用外部变量:除了$GLOBALS之外,通过参数传值(如果要统一战线还可以使用引用传值)。
在PHP中,其实还有一种方式,能够实现全局访问局部,同时局部也可以访问全局:global关键字
Global关键字:是一种在函数里面定义变量的一种方式
1、 如果使用global定义的变量名在外部存在(全局变量),那么系统在函数内部定义的变量直接指向外部全局变量所指向的内存空间(同一个变量);
2、 如果使用global定义的变量名在外部不存在(全局变量),系统会自动在全局空间(外部)定义一个与局部变量同名的全局变量
本质的形式:在函数的内部和外部,对一个同名变量(全局和局部)使用同一块内存地址保存数据,从而实现共同拥有。
基本语法:
Global 变量名; //不能赋值
变量名 = 值; //修改
虽然以上方式可以实现局部与全局的互访,但是通常不会这么用。一般如果会存在特殊使用,也会使用参数的形式来访问。(还可以使用常量:define定义的)
<?php //PHP中作用域 //默认的代码空间:全局空间 $global = 'global area'; //最终会被系统纳入到超全局变量中:$GLOBALS['global'] = global area; //局部变量(函数内部定义) function display() //所有的形参都可以理解为局部变量 $inner = __FUNCTION__; //局部变量 //访问全局变量 //echo $global; //不能访问 //访问全局变量 //var_dump($GLOBALS); //echo $GLOBALS['global']; //定义变量:使用全局变量 global $global; //全局空间存在 echo $global; //定义变量:全局不存在 global $local; $local = 'inner'; //调用函数 display(); //全局空间访问局部变量 //echo $inner; //不能访问 //访问“局部”变量 echo $local;
静态变量
静态变量:static,是在函数内部定义的变量,使用static关键字修饰,用来实现跨函数共享数据的变量:函数运行结束所有局部变量都会清空,如果重新运行一下函数,所有的局部变量又会重新初始化。
基本语法:
Function 函数名()
//定义变量
Static $变量名 = 值; //通常会在定义的时候就直接赋值
静态变量的作用是为了跨函数共享数据(同一个函数被多次调用)
静态变量的使用:
1、 为了统计:当前函数被调用的次数(有没有替代方法?)
2、 为了统筹函数多次调用得到的不同结果(递归思想)
<?php //静态变量 //定义函数 function display() //定义变量 $local = 1; //局部变量 //定义静态变量 static $count = 1; //静态变量 echo $local++,$count++,'<br/>'; //调用 display(); display(); display();
可变函数
可变函数:当前有一个变量所保存到值,刚好是一个函数的名字,那么就可以使用变量+()来充当函数名使用。
$变量 = ‘display’;
Function display()
//可变函数
$变量();
__LINE__ 中文意思即行号,这里的意思主要是指:当前这行代码对应行数。注意返回值是一个整数类型;
可变函数在系统使用的过程中还是比较多的,尤其是使用很多系统函数的时候:需要用户在外部定义一个自定义函数,但是是需要传入到系统函数内部使用。
<?php //PHP可变函数 //定义函数 function display() echo __LINE__, __FUNCTION__; //定义变量 $func = 'display'; //可变函数 //$func(); //定义系统函数(假设) function sys_function($arg1,$arg2) //给指定的函数(第一个参数),求对应的第二个参数值的4次方 //为实际用户输入的数值进行处理 $arg2 = $arg2 + 10; return $arg1($arg2); //user_function(20) //定义一个用户函数:求一个数的四次方 function user_function($num) return $num * $num * $num * $num; //求10的4次方 echo sys_function('user_function',10);
匿名函数
基本概念
匿名函数:没有名字的函数
基本语法:
变量名 = Function()
函数体
;
变量保存匿名函数,本质得到的是一个对象(Closure)
闭包
闭包:closure, 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)
简单理解:函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)
证明:函数的局部变量在函数使用完之后没有被释放?
1、 使用内部 匿名函数;
2、 匿名函数使用句变量:use;
3、 匿名函数被返回给外部使用;
<?php //匿名函数 //定义基本匿名函数 $func = function() //函数体 echo 'hello world'; ; //调用匿名函数:可变函数 //$func(); //查看变量内容 //var_dump($func); //闭包函数 function display() //定义变量:局部变量 $name = __FUNCTION__; //定义匿名函数 $innerfunction = function() use($name) //use就是将外部变量(局部)保留给内部使用(闭包) //函数内部的函数 //echo $name; ; //调用函数 $innerfunction(); display(); //闭包函数 function display1() //定义变量:局部变量 $name = __FUNCTION__; //定义匿名函数 $innerfunction = function() use($name) //use就是将外部变量(局部)保留给内部使用(闭包) //函数内部的函数 echo $name; ; //返回内部匿名函数 return $innerfunction; $closure = display1(); //到51行位置:display1函数运行结束:理论上局部变量$name应该已经被释放 $closure();
伪类型
伪类型:假类型,实际上在PHP中不存在的类型。但是通过伪类型可以帮助程序员去更好的查看操作手册从而更方便学习。
伪类型主要有两种:在三大类八小类之外
Mixed:混合的,可以是多种PHP中的数据类型
Number:数值的,可以是任意数值类型(整形和浮点型)
PHP入门基础教程
参考技术APHP入门基础教程大全
PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。这些工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。后来又用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。为帮助大家入门学习php,我为大家分享PHP入门知识教程如下:
1、嵌入方法:
类似ASP的<%,PHP可以是<?php或者是<?,结束符号是?>,当然您也可以自己指定。
2、引用文件:
引用文件的方法有两种:require 及 include。
require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。
include 使用方法如 include("MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。
3、注释方法:
<?php
echo "这是第一种例子。\\n" ; // 本例是 C++ 语法的注释 (PHP的注释跟C差不多!)
/* 本例采用多行的
注释方式 */
echo "这是第二种例子。\\n" ;
echo "这是第三种例子。\\n" ; # 本例使用 UNIX Shell 语法注释
?>
4、变量类型:
$mystring = "我是字符串" ;
$NewLine = "换行了\\n" ;
$int1 = 38 ;
$float1 = 1.732 ;
$float2 = 1.4E+2 ;
$MyArray1 = array( "子" , "丑" , "寅" , "卯" );
这里引出两个问题,首先PHP变量以$开头,第二PHP语句以;结尾,可能ASP程序员会不适应。这两个遗漏也是程序上大多错误所在。
5、运算符号:
数**非法字眼已被屏蔽**算:
符号 意义
+ 加法运算
- 减法运算
* 乘法运算
/ 除法运算
% 取余数
++ 累加
-- 递减
字符串运算:
运算符号只有一个,就是英文的句号。它可以将字符串连接起来,变成合并的新字符串。类似ASP中的&
<?
$a = "PHP 4" ;
$b = "功能强大" ;
echo $a.$b;
?>
这里也引出两个问题,首先PHP中输出语句是echo,第二类似ASP中的<%=变量%>,PHP中也可以<?=变量?>。
逻辑运算:
符号 意义
< 小于
> 大于
<= 小于或等于
>= 大于或等于
== 等于
!= 不等于
&& 而且 (And)
and 而且 (And)
或者 (Or)
or 或者 (Or)
xor 异或 (Xor)
! 不 (Not)
学习目的:掌握php的流程控制
1、if..else 循环有三种结构
第一种是只有用到 if 条件,当作单纯的判断。解释成 "若发生了某事则怎样处理"。语法如下:
if (expr) statement
其中的 expr 为判断的条件,通常都是用逻辑运算符号当判断的条件。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 。
范例:本例省略大括号。
<?php
if ($state==1)echo "哈哈" ;
?>
这里特别注意的是,判断是否相等是==而不是=,ASP程序员可能常犯这个错误,= 是赋值。
范例:本例的执行部分有三行,不可省略大括号。
<?php
if ($state==1)
echo "哈哈 ;
echo "<br>" ;
?>
第两种是除了 if 之外,加上了 else 的条件,可解释成 "若发生了某事则怎样处理,否则该如何解决"。语法如下
if (expr) statement1 else statement2 范例:上面的例子来修改成更完整的处理。其中的 else 由于只有一行执行的指令,因此不用加上大括号。
<?php
if ($state==1)
echo "哈哈" ;
echo "<br>";
else
echo "呵呵";
echo "<br>";
?>
第三种就是递归的 if..else 循环,通常用在多种决策判断时。它将数个 if..else 拿来合并运用处理。
直接看下面的例子
<?php
if ( $a > $b )
echo "a 比 b 大" ;
elseif ( $a == $b )
echo "a 等于 b" ;
else
echo "a 比 b 小" ;
?>
上例只用二层的 if..else 循环,用来比较 a 和 b 两个变量。实际要使用这种递归 if..else 循环时,请小心使用,因为太多层的循环容易使设计的逻辑出问题,或者少打了大括号等,都会造成程序出现莫名其妙的问题。
2、 for 循环就单纯只有一种,没有变化,它的语法如下
for (expr1; expr2; expr3) statement
其中的 expr1 为条件的`初始值。expr2 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断的条件。expr3 为执行 statement 后要执行的部份,用来改变条件,供下次的循环判断,如加一..等等。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 。
下例是用 for 循环写的的例子。
<?php
for ( $i = 1 ; $i <= 10 ; $i ++)
echo "这是第".$i."次循环<br>" ;
?>
3、 switch 循环,通常处理复合式的条件判断,每个子条件,都是 case 指令部分。在实作上若使用许多类似的 if 指令,可以将它综合成 switch 循环。
语法如下
switch (expr) case expr1: statement1; break; case expr2: statement2; break; default: statementN; break;
其中的 expr 条件,通常为变量名称。而 case 后的 exprN,通常表示变量值。冒号后则为符合该条件要执行的部分。注意要用 break 跳离循环。
<?php
switch ( date ( "D" ))
case "Mon" :
echo "今天星期一" ;
break;
case "Tue" :
echo "今天星期二" ;
break;
case "Wed" :
echo "今天星期三" ;
break;
case "Thu" :
echo "今天星期四" ;
break;
case "Fri" :
echo "今天星期五" ;
break;
default:
echo "今天放假" ;
break;
?>
这里需要注意的是break;别遗漏了,default,省略是可以的。
很明显的,上述的例子用 if 循环就很麻烦了。当然在设计时,要将出现机率最大的条件放在最前面,最少出现的条件放在最后面,可以增加程序的执行效率。上例由于每天出现的机率相同,所以不用注意条件的顺序。
学会构建数据库
在PHP中,MY SQL的命令行编辑可能会令初学者感到很麻烦,不要紧,你下载一个PHPMYADMIN安装一下,以后建立编辑数据库可以靠它了。
下面说一下它的使用。
进入了phpmyadmin后,我们首先需要建立一个数据库,
Language (*) 这里选择中文简体,然后在左边的 创建一个新的数据库 这里填写数据库名字,点击创建即可。
然后在左边下拉菜单中选择那个已经创建的数据库。在下面的
在数据库 shop 中创建一个新表 :
名字 :
字段数 :
中填写表名字和大致你认为的字段数(不够或者多了都不要紧,以后可以再添加或者缺省),按执行。
然后就可以开始建立表了。
第一栏是字段的名字;第二栏选择字段类型:
我们常用的是以下几个:
1)VARCHAR,文本类型
2)INT,整数类型
3)FLOAT,浮点数类型
4)DATE,日期型
5)大家或许会问,自动添加的ID在哪里?这个只要选择INT类型,在后面的额外中选择 auto_increment 就可以了。
建立了表以后,可以在左边看到你建立的表,点击以后,你可以:
1)按右边的结构:查看修改表结构
2)按右边的浏览:查看表中的数据
3)按右边的SQL:运行SQL语句
4)按右边的插入:插入一行记录
5)按右边的清空:删除表中所有记录
6)按右边的删除:删除表
还有一个很重要的功能就是导入和导出,当我们本机做好了程序和数据库的时候,需要在服务器上也有一个本地镜像,如果是ASP的ACCESS简单了,直接上传MDB文件即可,如果是SQL SERVER也可以连接远端服务器进行导入。那么MY SQL中你可以导出所有的SQL语句,到了远端服务器的PHPMYADMIN上,创建数据库后按SQL,粘帖你刚才复制下来的所有本级生成的SQL语句即可。
学会连接数据库
PHP简直就是一个函数库,丰富的函数使PHP的某些地方相当简单。建议大家down一本PHP的函数手册,总用的到。
我这里就简单说一下连接MYSQL数据库。
1、mysql_connect
打开 MySQL 服务器连接。
语法: int mysql_connect(string [hostname] [:port], string [username], string [password]); 返回值: 整数
本函数建立与 MySQL 服务器的连接。其中所有的参数都可省略。当使用本函数却不加任何参数时,参数 hostname 的默认值为 localhost、参数 username 的默认值为 PHP 执行行程的拥有者、参数 password 则为空字符串 (即没有密码)。而参数 hostname 后面可以加冒号与端口号,代表使用哪个端口与 MySQL 连接。当然在使用数据库时,早点使用 mysql_close() 将连接关掉可以节省资源。
2、 mysql_select_db
选择一个数据库。
语法: int mysql_select_db(string database_name, int [link_identifier]); 返回值: 整数
本函数选择 MySQL 服务器中的数据库以供之后的资料查询作业 (query) 处理。成功返回 true,失败则返回 false。
最简单的例子就是:
$conn=mysql_connect ("127.0.0.1", "", "");
mysql_select_db("shop");
连接机MY SQL数据库,打开SHOP数据库。在实际应用中应当加强点错误判断。
学会读取数据
先看两个函数:
1、mysql_query
送出一个 query 字符串。 语法: int mysql_query(string query, int [link_identifier]); 返回值: 整数
本函数送出 query 字符串供 MySQL 做相关的处理或者执行。若没有指定 link_identifier 参数,则程序会自动寻找最近打开的 ID。当 query 查询字符串是 UPDATE、INSERT 及 DELETE 时,返回的可能是 true 或者 false;查询的字符串是 SELECT 则返回新的 ID 值,当返回 false 时,并不是执行成功但无返回值,而是查询的字符串有错误。
2、mysql_fetch_object 返回类资料。 语法: object mysql_fetch_object(int result, int [result_typ]); 返回值: 类
本函数用来将查询结果 result 拆到类变量中。若 result 没有资料,则返回 false 值。
看一个简单的例子:
<?
$exec="select * from user";
$result=mysql_query($exec);
while($rs=mysql_fetch_object($result))
echo "username:".$rs->username."<br>";
?>
当然,表user中有一个username的字段,这就类似asp中的
<%
exec="select * from user"
set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,1
do while not rs.eof
response.write "username:"&rs("username")&"<br>"
rs.movenext
loop
%>
当然先要连接数据库,一般我们 require_once('conn.php');而conn.php里面就是上一次说的连接数据库的代码。
小小的两条命令可以完成读取数据的工作了
学会添加删除修改数据
mysql_query($exec);
单这个语句就可以执行所有的操作了,不同的就是$exec这个sql语句
添加:$exec="insert into tablename (item1,item2) values ('".$_POST['item1']."',".$_POST['item1'].")";
删除:$exec="delete from tablename where...";
修改:$exec="update tablename set item1='".$_POST['item1']."' where ...";
说到这里就要说一下表单和php变量传递,如果表单中的一个 <input name="item1" type="text" id="item1">
表单以POST提交的,那么处理表单文件就可以用$_POST['item1']得到变量值,同样以GET提交的就是$_GET['item1']
是不是很简单?但是通常$exec会有问题,因为可能您的SQL语句会很长,您会遗漏.连接符,或者'来包围字符型字段。
我们可以注释mysql_query($exec);语句用echo $exec;代替来输出$exec以检查正确性。如果您还不能察觉$exec有什么错误的话,可以复制这个sql语句到phpmyadmin中执行,看看它的出错信息。还有需要注意的是,我们不要使用一些敏感的字符串作为字段名字,否则很可能会出现问题,比如说date什么的。变量的命名,字段的命名遵循一点规律有的时候对自己是一种好处,初学者并不可忽视其重要性。
学会SESSION的使用
SESSION的作用很多,最多用的就是站点内页面间变量传递。
在页面开始我们要session_start();开启SESSION;
然后就可以使用SESSION变量了,比如说要赋值就是:$_SESSION['item']="item1";要得到值就是$item1=$_SESSION['item'];,很简单吧。这里我们可能会使用到一些函数,比如说判断是不是某SESSION变量为空,可以这么写:empty($_SESSION['inum'])返回true or false。
下面综合一下前面所说的我们来看一个登陆程序,判断用户名密码是否正确。
登陆表单是这样:login.php
<table width="100%" height="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<form action="checklogin.php" method="post"><td align="center" valign="middle"><table width="400" border="0" cellpadding="5" cellspacing="1" class="tablebg">
<tr class="tdbg">
<td colspan="2"><p align="center">Administrators Login</p></td>
</tr>
<tr class="tdbg">
<td><p align="center">Username</p></td>
<td><p align="center">
<input name="username" type="text" id="username">
</p></td>
</tr>
<tr class="tdbg">
<td><p align="center">Password</p></td>
<td><p align="center">
<input name="password" type="password" id="password">
</p></td>
</tr>
<tr class="tdbg">
<td colspan="2"><p align="center">
<input type="submit" name="Submit" value="Submit">
<input type="reset" name="Submit2" value="Clear">
</p></td>
</tr>
</table></td></form>
</tr>
</table>
处理文件是这样
<?php
require_once('conn.php');
session_start();
$username=$_POST['username'];
$password=$_POST['password'];
$exec="select * from admin where username='".$username."'";
if($result=mysql_query($exec))
if($rs=mysql_fetch_object($result))
if($rs->password==$password)
$_SESSION['adminname']=$username;
header("location:index.php");
else
echo "<script>alert('Password Check Error!');location.href='login.php';</script>";
else
echo "<script>alert('Username Check Error!');location.href='login.php';</script>";
else
echo "<script>alert('Database Connection Error!');location.href='login.php';</script>";
?>
conn.php是这样:
<?php
$conn=mysql_connect ("127.0.0.1", "", "");
mysql_select_db("shop");
?>
由于 $_SESSION['adminname']=$username;我们可以这样写验证是否登陆语句的文件:checkadmin.php
<?php
session_start();
if($_SESSION['adminname']=='')
echo "<script>alert('Please Login First');location.href='login.php';</script>";
?>
做一个分页显示
关键就是用到了SQL语句中的limit来限定显示的记录从几到几。我们需要一个记录当前页的变量$page,还需要总共的记录数$num
对于$page如果没有我们就让它=0,如果有<0就让它也=0,如果超过了总的页数就让他=总的页数。
$execc="select count(*) from tablename ";
$resultc=mysql_query($execc);
$rsc=mysql_fetch_array($resultc);
$num=$rsc[0];
这样可以得到记录总数
ceil($num/10))如果一页10记录的话,这个就是总的页数
所以可以这么写
if(empty($_GET['page']))
$page=0;
else
$page=$_GET['page'];
if($page<0)$page=0;
if($page>=ceil($num/10))$page=ceil($num/10)-1;//因为page是从0开始的,所以要-1
这样$exec可以这么写 $exec="select * from tablename limit ".($page*10).",10";
//一页是10记录的
最后我们需要做的就是几个连接:
<a href="xxx.php?page=0">FirstPage</a>
<a href="xxx.php?page=<?=($page-1)?>">PrevPage</a>
<a href="xxx.php?page=<?=($page+1)?>">NextPage</a>
<a href="xxx.php?page=<?=ceil($num/10)-1?>">LastPage</a>
注意事项
1、注意不要漏了分号
2、注意不要漏了变量前的$
3、使用SESSION的时候注意不要遗漏session_start();
如果发生错误的时候,可以采用以下方法:
1、如果是SQL语句出错,就注释了然后输出SQL语句,注意也要注释调后续的执行SQL语句
2、如果是变量为空,大多是没有传递到位,输出变量检查一下,检查一下表单的id和name
3、如果是数据库连接出错,检查是否正确打开MY SQL和是否遗漏了连接语句
4、注意缩进,排除括号不区配的错误
在做大网站的时候,我的思路是先构建数据库,确定每一个字段的作用,和表之间的关系。然后设计后台界面,从添加数据开始做起,因为添加是否成功可以直接到数据库里面验证,做好了添加再做显示的页面,最后才是两者的结合。一般来说后台就包括添加删除修改和显示,后台没有问题了,前台也没有什么大问题。前台还需要注意安全性和容错还有就是输出格式。
学会用PHP上传文件和发邮件
上传文件表单必须加上 enctype="multipart/form-data"
和 <input type="file" name="file">
下面看一下代码:
$f=&$HTTP_POST_FILES['file'];
$dest_dir='uploads';//设定上传目录
$dest=$dest_dir.'/'.date("ymd")."_".$f['name'];//我这里设置文件名为日期加上文件名避免重复
$r=move_uploaded_file($f['tmp_name'],$dest);
chmod($dest, 0755);//设定上传的文件的属性
上传的文件名为date("ymd")."_".$f['name'] ,可以在以后插入到数据库的时候用到,PHP实际上是把你上传的文件从临时目录移动到指定目录。move_uploaded_file($f['tmp_name'],$dest);这是关键
至于发邮件就更加简单,可以使用mail()函数
mail("收件人地址","主题","正文","From:发件人\\r\\nReply-to:发件人的地址");
不过mail()需要服务器的支持,在WINDOWS下还需要配置SMTP服务器,一般来说外面的LINUX空间都行。
好像上传文件和发邮件比ASP简单很多,只要调用函数就可以了。ASP还需要用到服务器的不同组件比如FSO、JMAIL什么的。
;以上是关于PHP初级教程------------------的主要内容,如果未能解决你的问题,请参考以下文章