从零开始PHP攻略(001)——Bob的汽车零部件商店
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》
从零开始PHP攻略(001)——Bob的汽车零部件商店的更多相关文章
- 从零开始PHP攻略(3)——数据的存储与检索
要点目录: I.保存数据 II.打开文件 III.创建并写入文件 IV.关闭文件 V.读文件 VI.给文件加锁 VII.删除文件 VIII.其他有用的文件操作函数 IX.数据库管理系统 1.保存数 ...
- 从零开始PHP攻略(2)——操作符与迭代整理
目录: 10.操作符整理 11.表单计算代码 12.优先级与结合性 13.可变函数 14.条件判断 15.循环迭代 16.跳出控制 17.可替换的控制结构 10.操作符 10.1 算术操作符 算术操作 ...
- [学习OpenCV攻略][001][Ubuntu安装及配置]
root登入配置 1.sudo passwd root 2.su - root 3.vim /etc/lightdm/lightdm.conf [SeatDefaults] user-session= ...
- 从零开始PHP攻略(000)——关于WAMPServer集成环境
Apache.PHP和MySQL都可以用于多种操作系统和Web服务器的组合.本篇介绍在Windows下用WampServer环境包来搭建本地php环境. W:windows A:Apache M:My ...
- 从零开始攻略PHP(9)——错误和异常处理
1.Exception类 这个类是PHP为异常处理提供的内置类.构造函数的两个参数分别是错误消息和错误代码. 除了构造函数之外,该类还提供了如下的内置方法: · getCode() 返回传递给构造函数 ...
- JAVA EE企业级开发四步走完全攻略 [转]
http://bbs.51cto.com/thread-550558-1.html 本文是J2EE企业级开发四步走完全攻略索引,因内容比较广泛,涉及整个JAVA EE开发相关知识,这是一个长期的计划, ...
- JQuery攻略(二) Jquery手册
在上一篇 JQuery攻略(一) 基础知识——选择器 与 DOM 中,我写了js的使用,如何选择元素,和一些比较常用的函数及DOM操作. 在这篇中,我将建立多个列表,将更多的 自定义选择器,函数,DO ...
- 【JAVA EE企业级开发四步走完全攻略】
本文是J2EE企业级开发四步走完全攻略索引,因内容比较广泛,涉及整个JAVA EE开发相关知识,这是一个长期的计划,单个发blog比较零散,所以整理此索引,决定以后每发一季JAVA EE blog后会 ...
- Matlab绘制子图subplot使用攻略
参考:https://jingyan.baidu.com/article/915fc414ad794b51394b20e1.html Matlab绘制子图subplot使用攻略 听语音 原创 | 浏览 ...
随机推荐
- Maven面试宝典
一.Maven有哪些优点和缺点 优点如下: 简化了项目依赖管理: 易于上手,对于新手可能一个"mvn clean package"命令就可能满足他的工作 便于与持续集成工具(jen ...
- [剑指Offer] 60.把二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. [思路]使用队列实现二叉树的层次遍历. /* struct TreeNode { int val; struct TreeN ...
- BZOJ 1791 岛屿(环套树+单调队列DP)
题目实际上是求环套树森林中每个环套树的直径. 对于环套树的直径,可以先找到这个环套树上面的环.然后把环上的每一点都到达的外向树上的最远距离作为这个点的权值. 那么直径一定就是从环上的某个点开始,某个点 ...
- 【bzoj1707】[Usaco2007 Nov]tanning分配防晒霜 贪心+Treap
题目描述 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SPF值分别为mi ...
- BZOJ4873 Shoi2017寿司餐厅(最小割)
选择了某个区间就必须选择其所有子区间,容易想到这是一个最大权闭合子图的模型.考虑将区间按长度分层,相邻层按包含关系连边,区间[i,j]的权值即di,j,其中最后一层表示长度为1的区间的同时也表示寿司本 ...
- paramiko连接远程主机,上传下载文件
Paramiko是基于SSHv2协议实现的一个Python模块,提供客户端和服务器的功能.Paramiko本身是一个围绕SSH网络概念的纯Python接口. Client: # 创建一个SSH连接对象 ...
- BZOJ 1342: [Baltic2007]Sound静音问题 | 单调队列维护的好题
题目: 给n个数字,一段合法区间[l,l+m-1]要求max-min<=c 输出所有合法区间的左端点,如果没有输出NONE 题解: 单调队列同时维护最大值和最小值 #include<cst ...
- JavaScript随机数生成方法
实现随机数是各种编程语言都很常见的一个编程任务,下面介绍一下在JavaScript如何实现随机数.第一中方法通过重写Math.random方法实现,第二种方法改自一个C实现,都可以实现编程目的. 直接 ...
- oracle数据库解锁
当我们修改数据库时用for update 或者使用rowId修改后,对表进行了锁定,由于某种原因没有对他进行关闭,我们需要关闭 select b.username,b.sid,b.serial#,lo ...
- maven的setting.xml文件中只配置本地仓库路径的方法
maven的setting.xml文件中只配置本地仓库路径的方法 即:settings标签下只有一个 localRepository标签,其他全部注释掉即可 <?xml version=&quo ...