lamp技术
在你开始前
关于本教程
在任何企业中,您都必须能够访问信息,对其进行处理并使其可在任何地方使用。 在用户希望能够从任何位置提取所需信息的永远在线的世界中,此要求尤其重要。
本教程探讨了Linux-Apache-MySQL-PHP或LAMP Web开发框架,并展示了该框架如何帮助您构建应用程序来解决常见的业务问题。 本教程首先探讨LAMP架构,然后介绍基本PHP概念。 在扎实地扎根PHP之后,本教程介绍了MySQL的支持,重点介绍了数据库概念以及如何从PHP访问MySQL。 所有这些技术都是在真实客户管理示例的上下文中讨论的。
先决条件
要完成本教程,您需要以下工具:
- 一个有效的LAMP系统(使该系统正常运行的最简单方法是通过XAMPP Apache发行版 ,其中包含所有必需的组件。
- phpMyAdmin(包含在XAMPP中)
- Web浏览器(推荐使用Mozilla Firefox)
- 文字编辑器
插入LAMP革命
数据组织挑战
假设您为一个在管理组织数据方面确实存在问题的中型组织工作。 您已经使用随机堆积在桌子上的便条纸来管理有关客户,产品,交易和会议的所有信息。 您知道需要更好地管理信息,但是您没有足够的时间来解决问题,也没有时间学习大量的编程语言和工具集。 您需要快速解决方案。
幸运的是,可以使用大量工具组合来帮助您构建可以解决问题的应用程序。 本教程说明了如何使用LAMP产品组合来解决基本的数据管理问题,并提供了将数据存储在数据库中并将其显示在网页上所需的基本技能。
LAMP平台由以分层方式构造的四个组件组成。 每层都提供了整个软件堆栈的关键部分:
- Linux。 Linux是最低层,并提供操作系统。 Linux实际上运行其他每个组件。 但是,您并不仅限于Linux。 您可以轻松地在Microsoft®上运行其他每个组件; Windows®,Mac OS X或UNIX®(如果需要)。
- 阿帕奇 下一层是Web服务器Apache。 Apache提供了将网页发送给用户的机制。 Apache是稳定的,具有关键任务功能的服务器,它可以运行Internet上所有网站的65%以上。 PHP组件实际上位于Apache内部,并且您将Apache和PHP一起使用来创建动态页面。
- MySQL的。 MySQL提供了LAMP系统的数据存储方面。 使用MySQL,您可以访问功能强大的数据库,适合运行大型和复杂的站点。 在Web应用程序中,所有数据,产品,帐户和其他类型的信息都将以您可以使用SQL语言轻松查询的格式驻留在此数据库中。
- PHP。 PHP是一种简单高效的编程语言,为LAMP系统的所有其他部分提供了粘合剂。 您使用PHP编写能够访问MySQL数据库中数据的动态内容以及Linux提供的某些功能。
开始吧
首先,您将构建一个客户信息工具。 使用LAMP产品组合中的工具,您将构建一个应用程序,该应用程序提供了一种将客户数据存储在数据库中的方法,然后您可以在网页上显示和管理这些数据。
开发应用程序时,切记仅使用HTML布置页面是很重要的:您不能使用HTML执行动态过程,例如从数据库中提取数据。 要提供此动态功能,您必须将PHP代码放入要动态化的页面部分。 例如,在本教程的后面,您将把从数据库派生的一些客户信息添加到网页的特定部分。 您将光标移至要显示信息的网页部分,并编写PHP代码以从数据库中提取信息并显示它。 当将此PHP代码滚动到页面中时,将代码添加在<?php
和?>
符号之间。
创建index.php
首先创建一个名为index.php的新页面。 然后,插入以下代码:
<html>
<body>
<h1>A simple example</h1>
This is normal HTML
<?php
echo "This is PHP!";
?>
</body>
</html>
在此示例中,您可以在一些HTML标记内看到一个特殊PHP块。 在<?php
和?>
符号中,您还可以看到第一个PHP命令echo
。 该命令仅在浏览器中的双引号中显示文本。 还要注意,每个PHP命令都以分号(;)结尾。 当echo
将文本发送到浏览器时,您也可以在双引号内使用HTML标记。 例如,可以使用<strong>
HTML标记使PHP变为粗体:
echo "This is <strong>PHP</strong>";
创建MySQL数据库
phpMyAdmin客户端
在创建Web应用程序之前,必须首先创建客户信息所在的数据库。 您将使用此数据库来存储数据,显示数据等等。 为应用程序提供MySQL支持需要几个步骤。 首先,您必须创建一个数据库以及要进入的数据库,这是phpMyAdmin客户端的用处。
phpMyAdmin客户端提供了一个Web界面(请参见图1),通过它可以管理MySQL数据库的各个方面,包括管理用户,创建数据库,添加表,插入数据以及创建关系。 SQL实际上控制着MySQL数据库的各个方面。
图1. phpMyAdmin Web界面
创建MySQL数据库
加载并登录phpMyAdmin后,请执行以下步骤来创建数据库:
- 类型
customer
在创建新的数据库文本框中创建名称的数据库,然后单击创建 。 新数据库将显示在左侧面板中。 - 通过输入
customerlist
作为表名,并输入3
作为字段数来创建一个新表。
出现设计窗口,您可以在其中配置表中的三个字段。 每个字段在一行中都有几个选项。 在此表中,您需要创建以下字段:
- ID。 该字段为表中的每个记录提供唯一的ID。 拥有可用于标识记录的唯一字段总是一个好主意。 实现此目的的最简单方法是创建一个名为ID的数字字段,并确保每个记录都有一个不同的数字。 MySQL可以通过自动添加唯一编号来帮助您。
- 姓 此字段包含表中客户的姓氏。
- 姓。 此字段包含姓氏。 我建议将名字和姓氏分开,因为您的数据越抽象,数据库的灵活性就越大。 (有关数据抽象和参照完整性的更多信息,请参阅相关主题 。)
填写字段
在phpMyAdmin中填写这些字段很简单。 只需从第一行开始添加以下信息:
- 在第一行的“ 字段”框中键入
id
,然后将“ 类型”设置为INT
。 从“ 额外”下拉列表中选择auto_increment 。 (auto_increment选项设置MySQL为您更新id字段,并在每次添加记录时向该字段添加一个新数字。)最后,在行末选择PRIMARY KEY选项以防止MySQL允许重复值在这个领域里。 - 在第二行的“ 字段”框中键入
forename
,将“ 类型”设置为VARCHAR
,并将“ 长度”设置为20
。 在此字段中,将数据类型设置为可变字符的类型,以确保该字段的长度不超过20个字符,但是在添加数据时仅占用适当的内存量。 - 第三行与第二行相同,但在“ 字段”框中具有
surname
。
单击Save创建表(请参见图2)。
图2.创建MySQL表
查看SQL输出
关于phpMyAdmin需要注意的重要一点是,只要您在界面中执行任何交互,就会向您显示执行该操作所执行SQL。 这种行为是学习SQL细节的一种绝妙的方法,因此始终要注意观察此输出以查看使用了什么SQL命令来执行您的请求。 对于刚刚创建的表,您将获得以下SQL:
CREATE TABLE `customerslist` (
`id` INT NOT NULL AUTO_INCREMENT ,
`forename` VARCHAR( 20 ) NOT NULL ,
`surname` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `id` )
);
将数据添加到表
现在,您必须向创建的表中添加一些数据。 这样做,单击插入选项卡。 phpMyAdmin界面显示两种形式,您可以在其中添加两条记录(参见图3)。 您实际上不需要添加两个记录,但是当您需要添加大量数据时,具有两种形式很方便。 填写名字及姓氏领域,切记不要添加任何东西到id字段; auto_increment选项可确保为您填充此字段。 添加几条记录,使您的数据库看起来充满了客户。
图3.在数据库表中插入记录
添加记录后,单击Browse选项卡以查看表的内容,其外观类似于图4。
图4.浏览数据库记录
通过PHP访问数据库
用PHP连接到MySQL
创建一个表后,您就可以开始合作,并把MySQL吸引到PHP中。 执行此过程的第一步是建立与MySQL服务器的连接。 建立连接后,就可以与服务器进行交互了。
首先,创建以下四个变量,以包含有关数据库的位置以及如何连接数据库的详细信息。 这些变量是db_host
, db_username
, db_password
和db_database
。 请注意,PHP中的变量以美元符号($)开头:
$db_host = "localhost";
$db_username = "bob";
$db_password = "sum65for!";
$db_database = "customers";
这四个变量包含有关数据库连接的重要信息。 第一个变量$db_host
指示MySQL服务器的位置。 (除非您在单独的联网计算机上运行服务器,否则此位置可能是localhost。) $db_username
和$db_password
变量包含连接的身份验证详细信息(在这种情况下,名为bob的用户使用sum65for!作为密码)。 。 最后,您需要指出要处理的是MySQL服务器上的哪个数据库。 $db_database
将此数据库指定为客户数据库。
执行连接
请记住,此时您尚未真正连接到数据库。 您仅使用相关信息创建了一些变量。 要连接到数据库,请运行以下两行代码:
$db = mysql_connect($db_host, $db_username, $db_password);
mysql_select_db($db_database, $db);
第一行实际上创建了连接。 它使用mysql_connect
函数将主机,用户名和密码信息从变量传递到服务器。 此连接的结果存储在$db
变量中。 在第二行代码中,然后使用mysql_select_db
函数指示要使用服务器上的哪个数据库。 为此,传递$db_database
变量,该变量包含您选择的数据库,并指出要从( $db
)中选择该数据库的连接。 输入这两行后,您应该建立了成功的连接。
执行查询
创建成功的连接后,下一步实际上是向数据库询问一些信息,以便您可以以有用的方式使用它。 在此项目中,您要从数据库中提取客户信息并将其显示在屏幕上。
执行查询的第一步是创建SQL。 在您刚刚编写的数据库连接代码下,添加以下行:
$sql = "SELECT * FROM customers;";
在此行中,从客户表中选择所有值。 您可以这样从左到右阅读此命令:从( FROM
)客户表( customers
)中选择( SELECT
)所有值( *
),然后结束查询( ;
)。 同样,在脚本的这一点上,查询实际上尚未执行:您仅将SQL查询放入变量中。 要将查询实际发送到数据库,请使用以下命令:
$result = mysql_query($sql);
在此命令中,使用mysql_query
函数将$sql
变量发送到服务器。 然后,该查询的结果(包含查询结果的信息的集合)在$result
变量中可用。 存储在$result
变量中的实际数据称为“ 记录集”,它提供了一个包含信息以及结果的容器。
键值对和数组
当您引用记录集中的数据时,会将其作为键值对引用。 这个概念很重要,在将数据从数据库中拉出之前,我将稍作讨论以讨论这些键值对。
键值对的想法是您拥有一系列与值相关联的键。 例如,您可能要存储一个收藏夹选项列表,并将blue
值与colour
键关联,将10
值与number
键关联。 使用这些值,如果您在数组中查找colour
,则需要返回blue
。 您可以使用array()
函数设置此数组以及任何其他类型的数组:
$array = array("colour" => "blue", "number" => 10);
在此代码行中,将colour
元素设置为blue
值,并将number
元素设置为10
值。 现在,您可以使用以下代码行来引用colour
键:
echo $array['colour'];
运行此行代码时,您会看到blue
的输出方式,这提供了一种方便的方法来存储有关页面上键值对中特定事物的信息。 此设置使阵列适合于存储详细信息,例如配置信息和首选项。
如果要使用foreach
再次遍历数组,请使用以下代码:
foreach($array as $key => $value) {
echo $key . " contains: " . $value . "<br />";
}
在这个例子中,你的名字的变量来访问数据为$key
对键和$value
的价值。 然后,您将所有这些信息粘贴在echo
语句中,并使用该语句连接键,一些包含该值的文本,然后是一个<br />
标记,就像回车符一样,将每个项目放在新行上。
将客户拉出数据库
那么,所有这些阵列理论与从数据库中获取客户信息有何关系? 您使用数组存储每一行的详细信息,并将数据存储在一系列键值对中。 这样,如果要获取forename字段的内容,请在数组中查找forename
键。
要遍历记录集中的每一行,请使用以下示例:
while($row = mysql_fetch_assoc($result)) {
echo $row['forename'] . " " . $row['surname'];
}
您应该看到图5显示的输出记录。
图5.显示客户表的内容
while
循环的目的是简单地一遍又一遍地重复{
和}
括号之间的代码, while
语句旁边的括号中的值为true。 在这种情况下,括号中的条件为$row = mysql_fetch_assoc($result)
。 该行将结果集放入$result
,并将其放入mysql_fetch_assoc
函数中,以拉出第一行并将其放入名为$row
的关联数组中。 当将此行置于while()
循环条件中时,循环将遍历记录集中的每一行,并将每一行放入$row
关联数组中。 此功能提供了一个方便的系统,可以使用相同的数组名( $row
)访问记录集中的所有数据。
while()
循环中的代码通过引用$row
数组中的字段名称,仅显示页面上每一行的内容。 这样, $row['forename']
显示数据库中每一行中的forename字段的内容。 在这个特殊的例子,你可以看到你如何串连录名字字段,然后一个空格,然后姓,这将导致名称被从表中显示。
级联
当您使用PHP进行编码时,最基本的概念之一(使大多数新PHP用户崩溃的一个概念)是串联。 该技术是指使用来将变量内容和其他信息粘合在一起.
符号。 在以下示例中,您可以看到.
将一些纯文本和$name
变量粘合在一起:
$name = "Bob Smith";
echo "Your name is " . $name;
在上一个示例中,建议您按照建议将字符串和变量连接起来,但是实际上不必这样做。 您可以将其编写为以下行:
echo "Your name is $name";
该行可能更容易理解,但是串联可创建看上去更简洁的代码。 此外,大多数文本编辑器无法对未连接的代码应用正确的语法突出显示,并且还要求对数组使用连接。
微调您SQL
在连接到MySQL的第一个示例中,SQL非常简单。 SQL非常灵活,您可能想搜索特定的记录,并可能以不同的方式对返回的数据进行排序。 您可以在SQL中完成所有这些操作,因此您PHP脚本可以在很大程度上保持不变。
phpMyAdmin内是玩此游戏的好地方。 如前所述,无论何时与phpMyAdmin进行交互,都会显示为每次交互生成SQL。 在phpMyAdmin中,您还可以运行任意SQL语句来探索语言并尝试其他查询。 为此,请单击phpMyAdmin界面左侧栏中SQL窗口小图标。 出现一个新窗口(如果使用的是Firefox,请确保弹出窗口阻止程序不会阻止该窗口),您可以在其中输入SQL查询。 当您添加了一个查询,点击开始 。 主界面窗口随查询结果更新。
执行不同的查询类型
即使使用简单的客户表,您也可以执行几种不同类型的查询,以不同方式带回信息。 例如,如果只希望与特定客户ID匹配的行,请尝试以下查询:
SELECT * FROM customers WHERE id = 1;
该查询带回用户ID为1
的记录。 (这就是为什么每个表都具有唯一的主键如此重要的原因。)您还可以尝试以下查询:
SELECT * FROM customers WHERE surname = "Curtis";
此查询将带回所有在姓氏字段中具有Curtis的用户。 如果您的客户数据库很大,则可能需要订购这些数据的返回方式。 为此,您可以使用ORDER BY字段:
SELECT * FROM customers WHERE surname = "Smith" ORDER BY forename ASC;
在这个查询,你问的是都姓史密斯的所有记录,但结果排序按字母顺序回录名字域。 ASC
部分指的是升序,您可以使用DESC
来颠倒顺序。
创建Web应用程序
显示客户信息:创建链接
Web上常用的一种机制是向下钻取。 此技术显示汇总链接的列表,然后使用户有机会单击链接并转到另一个页面以查看有关其单击的内容的更多信息。 在此项目中,您将创建客户名称的深入信息:单击客户名称时,将查看有关用户的更多详细信息。
为此,您首先需要向客户表添加一些额外的字段以显示在链接页面上。 添加字段,例如描述,地址,电话以及您需要的任何其他类型的信息。
显示客户信息:从数据库中提取信息
现在,您必须确保从数据库中提取所有数据。 将您SQL行设置为以下内容:
$sql = "SELECT * FROM customers;";
接下来,调整while
循环的内容并将其更改为链接,该链接将记录的ID连接到该链接中。 这应该导致一个链接,例如http://localhost/customerinfo.php?id = 1:
echo "<a href='customerinfo.php?cust_id="
. $row['id'] ."'>"
. $row['forename'] . " "
. $row['surname']
. "</a>";
该行动态创建一个链接,并为每个记录附加正确的ID。 如果将鼠标悬停在链接上,则应该在状态栏中看到动态ID(请参见图6)。
图6.为带有GET变量的记录创建链接
显示客户信息:创建信息页面
现在,您需要创建信息页面。 创建一个名为productinfo.php的新页面,然后首先包含数据库连接信息:
$db_host = "localhost";
$db_username = "bob";
$db_password = "sum65for!";
$db_database = "customers";
$db = mysql_connect($db_host, $db_username, $db_password);
mysql_select_db($db_database, $db);
接下来,从地址栏中读取该值并将其放入一个单独的变量中:
$theid = $_GET['cust_id'];
在这一行中,您可以使用$_GET
访问URL末尾的变量。 PHP中的此功能称为Superglobal,您可以使用它来获取GET
变量(即,出现在URL末尾的变量)。 然后,理想情况下,您将希望通过一些验证检查来运行变量,以确保人们不会尝试利用该变量,但是出于本教程的目的,我将使脚本保持简单。
显示客户信息:提取特定记录
现在,从表中拉出具有ID现在存储在$theid
变量中的特定记录。 使用以下代码执行此操作:
$sql = "SELECT * FROM customers WHERE id = " . $theid . ";";
$result = mysql_query($sql);
该代码将执行查询,您现在可以通过简单地回显结果来显示信息(请参见图7):
echo $row['forename'] . "<br />";
echo $row['surname'] . "<br />";
echo $row['description'] . "<br />";
图7.当用户单击一条记录时,显示完整的记录信息
摘要
摘要
本教程提供了一个简单的应用程序,可帮助您入门PHP和MySQL编程的核心原理。 LAMP是一个巨大的主题,而我只刮过LAMP系统的表面。 LAMP系统非常灵活。 尽管我仅介绍了LAMP开发涉及的各个方面的子集,但此处讨论的概念可以为您提供坚实的基础,这将使您准备通过散布在Internet上的大量LAMP教程和文档进行学习。
翻译自: https://www.ibm.com/developerworks/web/tutorials/wa-lamp/wa-lamp.html
lamp技术