从零开始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使用攻略 听语音 原创 | 浏览 ...
随机推荐
- 《Effective C#》快速笔记(三)- 使用 C# 表达设计
目录 二十一.限制类型的可见性 二十二.通过定义并实现接口替代继承 二十三.理解接口方法和虚方法的区别 二十四.用委托实现回调 二十五.用事件模式实现通知 二十六.避免返回对内部类对象的引用 二十七. ...
- 我们在删除SQL Sever某个数据库表中数据的时候,希望ID重新从1开始,而不是紧跟着最后一个ID开始需要的命令
一.如果数据重要,请先备份数据 二.删除表中数据 SQL: Delete From ('表名') 如:Delete From abcd 三.执行新语句 SQL: dbcc checkident('表 ...
- RPC架构-美团,京东面试题目
RPC(Remote Procedure Call) RPC服务 从三个角度来介绍RPC服务:分别是RPC架构,同步异步调用以及流行的RPC框架. RPC架构 先说说RPC服务的基本架构吧.允许我可耻 ...
- 从一个简单的main方法执行谈谈JVM工作机制
本来JVM的工作原理浅到可以泛泛而谈,但如果真的想把JVM工作机制弄清楚,实在是很难,涉及到的知识领域太多.所以,本文通过简单的mian方法执行,浅谈JVM工作原理,看看JVM里面都发生了什么. 先上 ...
- WPF绑定xaml中绑定对象需用属性表示,字段不可以绑定
在练习WPF绑定时发现对象属性可以在XAML中绑定,但字段是不可以绑定: 比如: private Person person{get;set;} 可以绑定到XAML中,<TextBox Nam ...
- 【】Python】异常处理try...except、raise
一.try...except 有时候我们写程序的时候,会出现一些错误或异常,导致程序终止.例如,做除法时,除数为0,会引起一个ZeroDivisionError 例子: 1 2 3 4 a=10 b= ...
- 【bzoj4550】小奇的博弈 博弈论+dp
题目描述 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色.最左边是白色棋子,最右边 是黑色棋子,相邻的棋子颜色不同. 小奇可以移动白色棋子,提比可以移动黑色的棋子, ...
- poj 1018 Communication System (枚举)
Communication System Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22380 Accepted: ...
- 2017 ICPC beijing F - Secret Poems
#1632 : Secret Poems 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 The Yongzheng Emperor (13 December 1678 – ...
- [AHOI2014/JSOI2014]支线剧情 有上下界费用流
---题面--- 题解: 第一眼费用流,,然后想了好久怎么建图,,,最后发现是最小费用可行流的板子题.... 其实还没有很懂这个算法,所以这里只是摆一下步骤,以后再补理解吧. 首先一个思路就是转换图, ...