//=======================================================
1.If...Else 语句
<html>
<body>
<?php
$d=date("D");
if ($d=="Fri")
{
echo "Hello!<br />";
echo "Have a nice weekend!";
echo "See you on Monday!";
}
elseif ($d=="Sun")
echo "Have a nice Sunday!";
else
echo "Have a nice day!";
?>
</body>
</html>
//=======================================================
2.Switch 语句
<?php
switch ($x)
{
case 1:
echo "Number 1";
break;
case 2:
echo "Number 2";
break;
case 3:
echo "Number 3";
break;
default:
echo "No number between 1 and 3";
}
?>
</body>
</html>
//=======================================================
3.PHP 数组
(1)值数组--带有数字 ID 键的数组
自动分配 ID 键:$names = array("Peter","Quagmire","Joe");
人工分配 ID 键:$names[0] = "Peter"; $names[1] = "Quagmire"; $names[2] = "Joe";
(2)关联数组--数组中的每个 ID 键关联一个值
$ages = array("Peter"=>32, "Quagmire"=>30, "Joe"=>34);或者如下:
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";
(3)多维数组--包含一个或多个数组的数组
在多维数组中,主数组中的每个元素也是一个数组。在子数组中的每个元素也可以是数组,
以此类推。
$families = array
(
"Griffin"=>array
(
"Peter",
"Lois",
"Megan"
),
"Quagmire"=>array
(
"Glenn"
),
"Brown"=>array
(
"Cleveland",
"Loretta",
"Junior"
)
);
//=======================================================
4.循环
while
do...while
for ---------循环执行代码块指定的次数
foreach ------根据数组中每个元素来循环代码块
<?php
for ($i=1; $i<=5; $i++)
{
echo "Hello World!<br />";
}
?>
--------------------------------
<?php
$arr=array("one", "two", "three");
foreach ($arr as $value)
{
echo "Value: " . $value . "<br />";
}
?>
//=======================================================
5.创建 PHP 函数
所有的函数都使用关键词 "function()" 来开始
如:
<?php
function add($x,$y)
{
$total = $x + $y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
//=======================================================
6.PHP 表单和用户输入
PHP 的 $_GET 和 $_POST 用于检索表单中的值,比如用户输入。
如:
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old.
//=======================================================
7.PHP $_GET
$_GET 变量是一个数组,内容是由 HTTP GET 方法发送的变量名称和值。
$_GET 变量用于收集来自 method="get" 的表单中的值。
从带有 GET 方法的表单发送的信息,对任何人都是可见的(
会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 个字符)。
请注意,表单域的名称会自动成为 $_GET 数组中的 ID 键:
Welcome <?php echo $_GET["name"]; ?>.<br />
You are <?php echo $_GET["age"]; ?> years old!
//=======================================================
8.$_REQUEST 变量
PHP 的 $_REQUEST 变量包含了 $_GET, $_POST 以及 $_COOKIE 的内容。
PHP 的 $_REQUEST 变量可用来取得通过 GET 和 POST 方法发送的表单数据的结果。
例子:
Welcome <?php echo $_REQUEST["name"]; ?>.<br />
You are <?php echo $_REQUEST["age"]; ?> years old!
//=======================================================
9.$_POST 变量
$_POST 变量是一个数组,内容是由 HTTP POST 方法发送的变量名称和值。
$_POST 变量用于收集来自 method="post" 的表单中的值。
从带有 POST 方法的表单发送的信息,对任何人都是不可见的
(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。
Welcome <?php echo $_POST["name"]; ?>.<br />
You are <?php echo $_POST["age"]; ?> years old!
//=======================================================
10.date() 函数用于格式化时间或日期。
格式化日期:date(format,[timestamp])
创建时间戳:mktime(hour,minute,second,month,day,year,is_dst)
//=======================================================
11.服务器端引用(Server Side Includes)
通过 include() 或 require() 函数,您可以在服务器执行 PHP 文件
之前在该文件中插入一个文件的内容。除了它们处理错误的方式不同之外,
这两个函数在其他方面都是相同的。include() 函数会生成一个警告
(但是脚本会继续执行),而 require() 函数会生成一个致命错误
(fatal error)(在错误发生后脚本会停止执行)。
//=======================================================
12.文件操作:
fopen()
fclose()
feof() 函数检测是否已达到文件的末端 (EOF)。
fgets() 从文件中逐行读取文件。在调用该函数之后,文件指针会移动到下一行。
fgetc() 从文件逐字符地读取文件。在调用该函数之后,文件指针会移动到下一个字符。
//=======================================================
13.PHP 文件上传
<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。
在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。
<input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。
举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。
全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。
第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:
$_FILES["file"]["name"] - 被上传文件的名称
$_FILES["file"]["type"] - 被上传文件的类型
$_FILES["file"]["size"] - 被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码
对于 IE,识别 jpg 文件的类型必须是 pjpeg,对于 FireFox,必须是 jpeg。
服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。
这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,
我们需要把它拷贝到另外的位置:move_uploaded_file
//=======================================================
14.PHP Cookies
setcookie(name, value, expire, path, domain);
创建 cookie --------setcookie()函数;setcookie()函数必须位于 <html> 标签之前。
在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自
动解码为防止 URL 编码,请使用 setrawcookie() 取而代之)。
取回 Cookie 的值---- $_COOKIE 变量
删除 cookie---------当删除 cookie 时,您应当使过期日期变更为过去的时间点。
setcookie("user", "", time()-3600);
浏览器不支持 cookie----不得不采取其他方法在应用程序中从一张页面向另一张页面
传递信息。一种方式是从表单传递数据
//=======================================================
15.PHP Sessions
PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置。
Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个
UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。
开始 PHP Session-----在您把用户信息存储到 PHP session 中之前,首先必须启动会话。
session_start() 函数必须位于 <html> 标签之前:
<?php session_start(); ?>
<html>
<body>
</body>
</html>
存储 Session 变量-----存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量
终结 Session----------使用 unset() 或 session_destroy() 函数删除某些 session 数据
//=======================================================
16.PHP mail() 函数
mail(to,subject,message,[headers],[parameters] )
mail() 从脚本中发送电子邮件
PHP E-mail 注入
首先,请看上一节中的 PHP 代码:
<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
$email = $_REQUEST['email'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail("
[email protected]", "Subject: $subject",
$message, "From: $email" );
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='mailform.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>
以上代码存在的问题是,未经授权的用户可通过输入表单在邮件头部插入数据。
假如用户在表单中的输入框内加入这些文本,会出现什么情况呢?
[email protected]%0ACc:
[email protected]
%0ABcc:
[email protected],
[email protected],
[email protected],
[email protected]
%0ABTo:
[email protected]
与往常一样,mail() 函数把上面的文本放入邮件头部,那么现在头部有了额外的
Cc:, Bcc: 以及 To: 字段。当用户点击提交按钮时,这封 e-mail 会被发送到上面
所有的地址!
(CC/Bcc:抄送)
解决:
使用了 PHP 过滤器来对输入进行验证:
FILTER_SANITIZE_EMAIL 从字符串中删除电子邮件的非法字符
FILTER_VALIDATE_EMAIL 验证电子邮件地址
//=======================================================
17.PHP 错误处理
在 PHP 中,默认的错误处理很简单。一条消息会被发送到浏览器,
这条消息带有文件名、行号以及一条描述错误的消息。
错误处理方法:
简单的 "die()" 语句------在错误之后终止了脚本
自定义错误和错误触发器--创建了一个专用函数,该函数必须有能力处理至少
两个参数 (error level 和 error message),但是可以接受最多五个参数(
可选的:file, line-number 以及 error context):
error_function(error_level,error_message,error_file,error_line,error_context)
把上面的函数改造为脚本运行期间的默认错误处理程序。set_error_handler("customError");
触发错误:trigger_error("Value must be 1 or below")
错误报告/错误记录-------------error_log():向服务器的错误记录系统或文件发送错误记录
如:
<?php
//error handler function
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr";
}
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>
//=======================================================
18.PHP 异常处理
异常(Exception)用于在指定的错误发生时改变脚本的正常流程。
让我们触发一个异常:
<?php
//创建可抛出一个异常的函数
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//在 "try" 代码块中触发异常
try
{
checkNum(2);
//If the exception is thrown, this text will not be shown
echo 'If you see this, the number is 1 or below';
}
//捕获异常
catch(Exception $e)
{
echo 'Message: ' .$e->getMessage();
}
?>
设置顶层异常处理器 (Top Level Exception Handler)
set_exception_handler() 函数可设置处理所有未捕获异常的用户定义函数。
<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>
//=======================================================
19.PHP 过滤器(Filter)
PHP 过滤器用于验证和过滤来自非安全来源的数据。
过滤器函数:
filter_var() --------通过一个指定的过滤器来过滤单一的变量
filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
filter_input ------- 获取一个输入变量,并对它进行过滤
filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
有两种过滤器:
Validating 过滤器:
用于验证用户输入
严格的格式规则(比如 URL 或 E-Mail 验证)
如果成功则返回预期的类型,如果失败则返回 FALSE
Sanitizing 过滤器:
用于允许或禁止字符串中指定的字符
无数据格式规则
始终返回字符串
//=======================================================
19.PHP MySQL 数据库
SQL 语句对大小写不敏感
连接数据库-----mysql_connect(servername,username,password);
mysql_connect(servername,username,password);
参数
描述
servername
可选。规定要连接的服务器。默认是 "localhost:3306"。
username
可选。规定登录所使用的用户名。默认值是拥有服务器进程的用户的名称。
password
可选。规定登录所用的密码。默认是 ""。
关闭连接--------mysql_close()
mysql_query()---用于向 MySQL 连接发送查询或命令。
创建数据库-----CREATE DATABASE database_name
创建表---------CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
.......
)
mysql_select_db---在创建表之前,必须首先选择数据库。通过 mysql_select_db() 函数选取数据库。
每个表都应有一个主键字段。
主键用于对表中的行进行唯一标识。每个主键值在表中必须是唯一的。
此外,主键字段不能为空,这是由于数据库引擎需要一个值来对记录进行定位。
主键字段永远要被编入索引。这条规则没有例外。
你必须对主键字段进行索引,这样数据库引擎才能快速定位给予该键值的行。
-------------------------------------------------------------
$sql = "CREATE TABLE Persons
(
personID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(personID),
FirstName varchar(15),
LastName varchar(15),
Age int
)";
mysql_query($sql,$con);
---------------------------------------------------------
插入数据
INSERT INTO table_name
VALUES (value1, value2,....)或者:
INSERT INTO table_name (column1, column2,...)
VALUES (value1, value2,....)
选取数据
SELECT column_name(s) FROM table_name
选取匹配指定条件的数据 -----向SELECT 语句添加 WHERE 子句
SELECT column FROM table WHERE column operator value
下面的运算符可与 WHERE 子句一起使用:
运算符
说明
=
等于
!=
不等于
>
大于
<
小于
>=
大于或等于
<=
小于或等于
BETWEEN
介于一个包含范围内
LIKE
搜索匹配的模式
数据进行排序-----
SELECT column_name(s)
FROM table_name
ORDER BY column_name
默认是升序,使用 DESC 关键词来设定降序排序
根据两列进行排序----当按照多个列进行排序时,只有第一列相同时才使用第二列:
SELECT column_name(s)
FROM table_name
ORDER BY column_name1, column_name2
修改数据库表中的数据---Update
UPDATE table_name
SET column_name = new_value
WHERE column_name = some_value
从数据库表中删除行-----DELETE FROM
DELETE FROM table_name
WHERE column_name = some_value
PHP Database ODBC-----
ODBC 是一种应用程序编程接口(Application Programming Interface,API),
使我们有能力连接到某个数据源(比如一个 MS Access 数据库)。
通过一个 ODBC 连接,您可以连接到您的网络中的任何计算机上的任何数据库,
只要 ODBC 连接是可用的。这是创建到达 MS Access 数据的 ODBC 连接的方法:
(1)在控制面板中打开管理工具
(2)双击其中的数据源 (ODBC) 图标
(3)选择系统 DSN 选项卡
(4)点击系统 DSN 选项卡中的“添加”按钮
(5)选择 Microsoft Access Driver。点击完成。
(6)在下一个界面,点击“选择”来定位数据库。
(7)为这个数据库取一个数据源名 (DSN)。
(8)点击确定。
请注意,必须在您的网站所在的计算机上完成这个配置。如果您的计算机上正在运行
Internet 信息服务器 (IIS),上面的指令会生效,但是假如您的网站位于远程服务器,
您必须拥有对该服务器的物理访问权限,或者请您的主机提供商为您建立 DSN。
连接到 ODBC
------odbc_connect()
执行 SQL 语句-----odbc_exec() 函数
$conn=odbc_connect('northwind','','');
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
取回记录--odbc_fetch_row()
从记录中取回字段-----odbc_result()
关闭 ODBC 连接-------odbc_close()
//=======================================================
PHP 超全局变量
-
$GLOBALS
-
包含一个引用指向每个当前脚本的全局范围内有效的变量。该数组的键名为全局变量的名称。从 PHP 3 开始存在 $GLOBALS 数组。
-
$_SERVER
-
变量由 web 服务器设定或者直接与当前脚本的执行环境相关联。类似于旧数组 $HTTP_SERVER_VARS 数组(依然有效,但反对使用)。
-
$_GET
-
经由 URL 请求提交至脚本的变量。类似于旧数组 $HTTP_GET_VARS 数组(依然有效,但反对使用)。
-
$_POST
-
经由 HTTP POST 方法提交至脚本的变量。类似于旧数组 $HTTP_POST_VARS 数组(依然有效,但反对使用)。
-
$_COOKIE
-
经由 HTTP Cookies 方法提交至脚本的变量。类似于旧数组 $HTTP_COOKIE_VARS 数组(依然有效,但反对使用)。
-
$_FILES
-
经由 HTTP POST 文件上传而提交至脚本的变量。类似于旧数组 $HTTP_POST_FILES 数组(依然有效,但反对使用)。详细信息请参阅POST 方法上传。
-
$_ENV
-
执行环境提交至脚本的变量。类似于旧数组 $HTTP_ENV_VARS 数组(依然有效,但反对使用)。
-
$_REQUEST
-
经由 GET,POST 和 COOKIE 机制提交至脚本的变量,因此该数组并不值得信任。所有包含在该数组中的变量的存在与否以及变量的顺序均按照 php.ini 中的 variables_order 配置指示来定义。此数组在 PHP 4.1.0 之前没有直接对应的版本。参见import_request_variables()。
注意 |
自 PHP 4.3.0 起,$_FILES 中的文件信息不再存在于 $_REQUEST 中。 |
注: 当运行于命令行模式时,此数组将不会包含argv 和 argc 条目;它们已经存在于数组 $_SERVER 中。
-
$_SESSION
-
当前注册给脚本会话的变量。类似于旧数组 $HTTP_SESSION_VARS 数组(依然有效,但反对使用)。详细信息,请参照Session 处理函数章节。
=========================================================================================================================
php 错误抑制符 @
错误控制运算符
PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
如果激活了 track_errors特性,表达式所产生的任何错误信息都被存放在变量 $php_errormsg中。此变量在每次出错时都会被覆盖,所以如果想用它的话就要尽早检查。
<?php
/* Intentional file error */
$my_file = @file ('non_existent_file') or
die ("Failed opening file: error was '$php_errormsg'");
// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.
?>
Note: @ 运算符只对表达式有效。对新手来说一个简单的规则就是:如果能从某处得到值,就能在它前面加上 @ 运算符。例如,可以把它放在变量,函数和 include调用,常量,等等之前。不能把它放在函数或类的定义之前,也不能用于条件结构例如 if和 foreach等。
参见 error_reporting()及手册中错误处理及日志函数的有关章节。
Warning
目前的“@”错误控制运算符前缀甚至使导致脚本终止的严重错误的错误报告也失效。这意味着如果在某个不存在或类型错误的函数调用前用了“@”来抑制错误信息,那脚本会没有任何迹象显示原因而死在那里。