从零开始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使用攻略 听语音 原创 | 浏览 ...
随机推荐
- URL中编码问题
1.http协议传输统一iso-8859-1传输 jsp中用request.getparameter("keword");得到的是iso-8859-1翻译过来的,要用 keywor ...
- 如何实时获取DBGrid 中当前单元格输入的内容?
如何获取DBGrid 中当前单元格输入的内容? 还没输入完成,我想实时获取 Cell中的内容,以便作其他处理, 用什么事件呢? 所以Field的Onchange事件是没用的. 这个问题简单啊,每输入1 ...
- js 关键字 in 判断 一个属性或方法是否属于一个对象
判断对象是否为数组/对象的元素/属性: 格式:(变量 in 对象)......注意,,, 当“对象”为数组时,“变量”指的是数组的“索引”: 当“对象”为对象是,“变量”指的是对象的“属性”. 判断 ...
- Oracle 以某字段分组,以某字段排序,取前几条
select * from (select row_number() over(partition by 以此字段为分组 order by 以此字段排序 desc rn from dual) whe ...
- AOP拦截+权限验证+返回默认接口对象
接口如:public IList<string> TestAOP(string token); public IMethodReturn Invoke(IMethodInvocation ...
- BFS的小结
写这类搜索题.首先感觉要有个框架.比如我的框架对于BFS来说(对于DFS,我想有两个一个是递归版一个是栈版).这里是BFS小结.所以介绍一下BFS.我的框架.(也是搜集了网上许多神人的作品.) 1:节 ...
- BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4946 https://www.luogu.org/problemnew/show/P3826 ht ...
- 【套题】qbxt国庆刷题班D1
Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...
- 【极值问题】【CF1063B】 Labyrinth
传送门 Description 给你一个\(n~\times~m\)的矩阵,一开始你在第\(r\)行第\(c\)列.你的上下移动不受限制,向左最多移动\(x\)次,向右最多移动\(y\)次.求你最多能 ...
- django 给前端传递HTML内容
django从view向template传递HTML字符串的时候,django默认不渲染此HTML,原因是为了防止这段字符串里面有恶意攻击的代码. 如果需要渲染这段字符串,需要在view里这样写: f ...