1.创建订单表单
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>创建订单表单</title> </head> <body> <form action="processorder.php" method="post"> <table border="0" cellspacing="" cellpadding=""> <tr bgcolor="#ccc"> <td width="150">Item</td> <td width="15">Quantity</td> </tr> <tr> <td>Tires</td> <td align="center"> <input type="text" name="tireqty" size="3" maxlength="3" /> </td> </tr> <tr> <td>Oil</td> <td align="center"> <input type="text" name="oilqty" size="3" maxlength="3" /> </td> </tr> <tr> <td>Spark Plugs</td> <td align="center"> <input type="text" name="sparkqty" size="3" maxlength="3" /> </td> </tr> <tr> <td colspan = "2" align="center"> <input type="submit" value="Submit Order" /> </td> </tr> </table> </form> </body> </html>
注意,该表单的动作被设置为能够处理客户订单的PHP脚本名称。
2.表单处理
创建在form标记的action属性中指定的脚本processorder.php。
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Bob's Auto Parts - Order Results</title> </head> <body> <h1>Bob's Auto Parts</h1> <h2>Order Results</h2> </body> </html>
3.在HTML中嵌入PHP
在以上代码的<h2>标记处,添加如下代码:
<?php echo '<p>Order processed.</p>'; ?>
保存后在浏览器中载入1中创建的表单,填写该表单,点击“Submit Order”按钮:
通过浏览器查看源代码时看不到php语句,这是因为PHP解释器已经运行了该脚本,并且用该脚本的输出代替了脚本本身。
3.1 PHP标记
PHP标记有4种风格可供使用。
XML风格:<?php echo '<p>Order processed.</p>'; ?>
简短风格:<? echo '<p>Order processed.</p>'; ?>
SCRIPT风格:<script language=’php’>echo '<p>Order processed.</p>';</script>
ASP风格:<% echo '<p>Order processed.</p>'; %>
推荐使用XML风格。
3.2 PHP语句
通过将PHP语句放置在PHP的开始和结束标记之间,可以告诉PHP解释器进行何种操作。
3.3 空格
间隔字符,例如换行、空格和Tab,都被认为是空格。浏览器将会会略这些HTML的空格字符。PHP引擎同样。
3.4 注释
PHP支持C、C++和Shell脚本风格的注释。
4.添加动态内容
使用服务器端脚本语言的主要原因就是能够为站点用户提供动态内容。
使用如下所示的代码替换processorder.php脚本中的PHP代码:
<?php echo "<p>Order processed at"; echo date('H:i, jS F Y'); echo "</p>"; ?>
也可以使用连接操作符(.)将其编写在一行代码中。
<?php echo "<p>Order processed at".date('H:i, jS F Y')."</p>"; ?>
上面使用PHP内置的date()函数来告诉客户其订单被处理的日期和时间。
4.1 调用函数
将一个封闭在圆括号内的字符串(文本数据)传递给该函数。这个字符串就是函数的自变量或参数。
4.2 使用date()函数
H是24小时格式的小时,i是分钟,如果小时数和分钟数是个位数,需要在前面补0,j是该月的日期,不需要前面的补0,而s表示顺序后缀(在这个例子中是“th”),F是月份的全称。
5.访问表单变量
使用订单的目的是为了收集客户订单。
5.1 简短、中等以及冗长风格的表单变量
PHP的变量名称都是以$符号开始的。
$tireqty // short style $_POST[‘tireqty’] // medium style $HTTP_POST_VARS[‘tireqty’] // long style
其中,中等风格($_POST[‘tireqty’])是如今所推荐的。
下面,让我们看一个创建便于使用的变量副本的例子。
将如下代码块放置在订单处理脚本的开始处。
<?php // create short variable names $tireqty = $_POST['tireqty']; $oilqty = $_POST['oilqty']; $sparkqty = $_POST['sparkqty']; ?>
这段代码将创建3个新变量:$tireqty、$oilqty和$sparkqty,并且将通过POST方法从表单中传送过来的数据分别赋值给这3个变量。
在PHP脚本结束处添加如下所示的代码:
echo '<p>Your order is as follows: </p>'; echo $tireqty. 'tires<br />'; echo $oilqty. 'bottles of oil<br />'; echo $sparkqty. 'spark plugs<br />';
从用户输入直接获得输入并输出到浏览器是一个有风险的操作,它可能带来安全隐患,应该对数据进行过滤,这个将在后面介绍。
该脚本输出结果如下,具体的数值取决于在表单中输入的数据:
5.2 字符串的连接
点号是字符串连接符,它可以将几段文字连接成一个字符串:
echo $tireqty. ‘tires<br/>’;
对于任何简单类型的变量,都可以将变量写入到一个由双引号引进来的字符串中:
echo “$tireqty tires<br/>”;
这个语句和上面的等价。用一个字符串的内容来代替一个变量的操作就是插值。
注意,插值操作只是双引号引用的字符串特性之一。不能将一个变量名称放置在一个由单引号引用的字符串中。那样会被视为文本。
5.3 变量和文本
PHP将试着计算双引号字符串,而单引号字符串将被当做是真正的文本。
此外还有第3种指定字符串的方法:heredoc语法(<<<),通过指定一个用来结束字符串的结束印记。
6.理解标识符
标识符是变量的名称。
标识符的一些简单规则:
1)标识符可以是任何长度,可以由任何字母、数字、下划线组成。
2)不能以数字开始
3)标识符区分大小写(函数名称可以任意大小写)
4)一个变量名称可以与一个函数名称相同。但应尽量避免。此外,不能创建一个具有与已有函数同名的函数。
PHP的特性之一就是它不要求在使用变量之前声明变量。当第一次给一个变量赋值时,你才创建了这个变量。
7.检查变量类型
变量类型是指能够保存在该变量中的数据类型。
7.1 PHP的数据类型
1)Integer(整数)
2)Float(浮点数)
3)String(字符串)
4)Boolean(布尔值)
5)Array(数组)
6)Object(对象)
此外还有两个特殊的类型:NULL(空)和resource(资源)。
没有被赋值、已经被重置或者被赋值为特殊值NULL的变量就是NULL类型的变量。
特定的内置函数(例如数据库函数)将返回resource类型的变量。它们都代表外部资源(例如数据库连接)。
基本上不能直接操作一个resource变量,但是通常它们都将被函数返回,而且必须作为参数传递给其他函数。
7.2 类型强度
PHP是一种弱类型语言。弱类型不代表弱。在PHP中,变量的类型是由赋给变量的值确定的,这很灵活。
PHP将“自动地”获得输入的数据类型。
7.3 类型转换
$totalqty = 0; $totalamount = (float)$totalqty;
第2行代码的意思是“取出保存在$totalqty中的变量值,将其解释成一个浮点类型,并且将其保存在$totalamount”中。$totalamount变量将变成浮点类型。而被转换的变量并不会改变其类型,因此$totalqty仍然是整数类型。
7.4 可变变量
可变变量允许我们动态地改变一个变量的名称。
这个特性的工作原理是用一个变量的值作为另一个变量的名称。例如:
$varname = ‘tireqty’; $$varname = 5;
这个代码等价于:
$tireqty = 5;
8.声明和使用常量
我们可以改变保存在一个变量中的值。也可以声明常量。一个常量可以保存一个值,常量值一旦被设定后,在脚本的其他地方就不能再更改。
可以使用define函数定义这些变量:
define('TIREPRICE',100); define('OILPRICE',10); define('SPARKPRICE',4);
注意,常量名称都是由大写字母组成的。非必须,但便于维护。
常量和变量之间的一个重要不同点在于引用一个常量的时候,他前面并没有$符号。
PHP还预定义了许多常量。了解这些常量的简单方法就是运行phpinfo()函数。
变量和常量的领一个差异在于常量值可以保存布尔值、整数、浮点数或字符串等标量数据。
9.理解变量的作用域
作用域是指在一个脚本中某个变量可以使用或可见的范围。
6项基本的作用域规则:
1)内置超级全局变量可以在脚本的任何地方使用和可见。
2)常量一旦被声明将可以在全局可见。
3)在一个脚本声明的全局变量在整个脚本中是可见的,但不是在函数内部
4)函数内部使用的变量声明为全局变量时,其名称要与全局变量名称一致
5)在函数内部创建并被声明为静态的变量无法在函数外部可见,但是可以在函数的多次执行过程中保持该值
6)在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了
超级全局变量的完整列表:
1)$GLOBALS,所有全局变量数组
2)$_SERVER,服务器环境变量数组
3)$_GET,通过GET方法传递给该脚本的变量数组
4)$_POST,通过POST方法传递给该脚本的变量数组
5)$_COOKIE,cookie变量数组
6)$_FILES,与文件上传相关的变量数组
7)$_ENV,环境变量数组
8)$_REQUEST,所有用户输入的变量数组
9)$_SESSION,会话变量数组
整理自《PHP and MySQL Web Development》