PHP网页编程之PHP/MySQL三日通-第二天
建议大家买一本书,而不光是在网上看一些零碎的资料,一本书毕竟会讲的系统一些,全面一些,而且印刷的书不受电脑的限制,但是建议在看书的时候最好旁边有电脑,这样可以很及时地上机实践。mysql 1、 while轮回在这一课里,咱们将会持续深切下去,利用PHP和MySQL来写出一些复杂而有效的页面。咱们从 昨天创立的数据库入手下手,显示库中的数据,然而会再略微加以润饰。
起首,咱们用上面的代码来查询数据库内容。
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
echo "<table border=1>\n";
echo "<tr><td>姓名</td><td>职位</td></tr>\n";
while ($myrow = mysql_fetch_row($result)) {
printf("<tr><td>%s %s</td><td>%s</td></tr>\n", $myro
w, $myrow, $myrow);
}
echo "</table>\n";
?>
</body>
</html>
您能够已注重到,咱们在这个法式里加进了一些新器材。最分明的是while()轮回。该轮回是说,只需数据库里还有纪录可读(利用mysql_fetch_row()函数),那就把该纪录赋给变量$myrow,然后履行大括号({})内的指令。细心看一下这里,这局部是对照主要的。
咱们应当注重一下mysql_fetch_row()函数。这里有一点小成绩,它前往的是一个数组,必需以数组下标来会见个中的某个字段。第一个字段下标为0,第二个是1,依此类推。在履行某些庞杂查询时,这么做几乎其实是太烦琐了。
如今咱们更细心地研讨一下轮回进程。法式前几行咱们在第一课的例子中已看到过了。然后,在while()轮回中,咱们从查询了局中读取一笔记录并把该纪录赋给数组$myrow。接着,咱们用printf函数把数据中的内容显示在屏幕上。随后,轮回重复履行,读取下一笔记录赋给$myrow。如许持续下去,直到一切纪录都已被读取完为止。
利用while()轮回的一个优点是,假如数据库查询没有前往任何纪录,那您也不会收到毛病信息。在刚履行轮回语句时,轮回前提就不知足,不会有任何数据赋给$myrow,法式就直接往下运转了。
然而假如查询未前往任何数据,咱们怎样让用户晓得这一点呢?咱们或许该供应点儿相干的动静给用户吧。这是可以做到的,上面咱们就看看怎样做。>>
2、 if-else
请看上面的法式。
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
if ($myrow = mysql_fetch_array($result)) {
echo "<table border=1>\n";
echo "<tr><td>姓名</td><td>住址</td></tr>\n";
do {
printf("<tr><td>%s %s</td><td>%s</tr>\n", $myrow["first"],
$myrow["last"], $myrow["address"]);
} while ($myrow = mysql_fetch_array($result));
echo "</table>\n";
} else {
echo "对不起,没有找到纪录!";
}
?>
</body>
</html>
这段法式中包括有很多新内容,不外这些内容都相当复杂。起首是mysql_fetch_array()函数。该函数与mysql_fetch_row()非常邻近,只要一点分歧:利用这个函数时,咱们可以经由过程字段名而不是数组下标来会见它前往的字段,好比$myrow["first"]。如许咱们就能够省很多力量了。别的,法式中还加进了do/while轮回和if-else前提剖断语句。
if-else前提剖断语句的含义是,假如咱们胜利地把一笔记录赋给了$myrow变量,那就持续;不然,就跳到else局部,履行那边的指令。
do/while轮回是咱们在上页顶用户的while()轮回的一个变体。咱们要用到do/while的缘由是:在最后的if语句中,咱们已把查询前往的第一笔记录赋给变量$myrow了。假如这时候咱们履行普通的while轮回(好比,while ($myrow = mysql_fetch_row($result)),那咱们就会把第二笔记录赋给$myrow,而第一笔记录就被冲失落了。然而do/while轮回可让咱们履行一次轮回体内容以后再来剖断轮回前提。因而,咱们就不会不当心漏失落第一笔记录了。
最初,假如查询了局没有任何纪录的话,法式就会履行包括在else{}局部的那些语句。假如您想看到这局部法式的履行情形,可以把SQL语句改成SELECT * FROM employees WHERE id=6,或改成其他模式,使得查询了局中没有任何纪录。
上面咱们来扩大一下轮回if-else 代码,使得页面内容加倍丰厚。信任您会喜好的。>>
3、 第一个法式剧本
咱们方才学到了轮回语句,上面咱们将在一个加倍实践一点的例子中看看若何应用它。然而在这之前,您应当晓得若何处置Web表格、查询参数串,和表单的GET办法和POST办法。不久之前咱们方才有文章引见这局部内容,您假如对这一局部还不太熟习的话可以看看那篇文章。
如今,咱们要处置查询参数串,正如您所晓得的,有三种办法可以把参数内容写入到查询参数串中。第一种是在表格中利用GET办法;第二种是在阅读器的地址栏中输出网址时直接加上查询参数;第三种是把查询参数串嵌入到网页的超链接中,使得超链接的内容象上面如许:
<a href="http://my_machine/mypage.php3?id=1">
咱们如今要用到最初这一种办法。
一入手下手,咱们再来查询咱们的数据库,列出员工姓名。看看上面的法式,个中大局部内容咱们都已很熟习了。
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
if ($myrow = mysql_fetch_array($result)) {
do {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n",
$PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]);
} while ($myrow = mysql_fetch_array($result));
} else {
echo "对不起,没有找到纪录!";
}
?>
</body>
</html>
这里没甚么出格的,只是printf函数有些分歧。那咱们就来细心研讨一下。
起首要注重的是,一切的引号后面都有一个反斜杠。这个反斜杠告知PHP直接显示前面的字符,而不克不及把前面的字符看成法式代码来处置。别的要注重变量$PATH_INFO的用法。该变量在所用法式中都可以会见,是用来保留法式本身的称号与目次地位的。咱们之所以用到它是由于要在页面中再挪用这个法式自己。利用$PATH_INFO,咱们可以做到,即便法式被挪到其他目次,乃至是其他机械上时,咱们也能包管准确地挪用到这个法式。
正如我方才提到的,法式所生成的网页,个中包括的超链接会再次挪用法式自己。不外,再次挪用时,会到场一些查询参数。
PHP见到查询参数串中包括有“名字=值”如许的成对格局时,会作一些出格的处置。它会主动生成一个变量,变量称号与取值都与查询参数串中所给定的称号和取值不异。这一功效使得咱们可以在法式中判别出是第一次履行本法式仍是第二次。咱们所要做的只是问问PHP$id这个变量是不是存在。
当我晓得这个成绩的谜底后,我可以在第二次挪用法式时显示一些分歧的了局出来。请看:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
// display individual record
// 显示单笔记录内容
if ($id) {
$result = mysql_query("SELECT * FROM employees WHERE id=$id",$db);
$myrow = mysql_fetch_array($result);
printf("名: %s\n<br>", $myrow["first"]);
printf("姓: %s\n<br>", $myrow["last"]);
printf("住址: %s\n<br>", $myrow["address"]);
printf("职位: %s\n<br>", $myrow["position"]);
} else {
// show employee list
// 显示员工列表
$result = mysql_query("SELECT * FROM employees",$db);
if ($myrow = mysql_fetch_array($result)) {
// display list if there are records to display
// 假如有纪录,则显示列表
do {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PATH_INFO,
$myrow["id"], $myrow["first"], $myrow["last"]);
} while ($myrow = mysql_fetch_array($result));
} else {
// no records to display
// 没有纪录可显示
echo "对不起,没有找到纪录!";
}
}
?>
</body>
</html>
法式入手下手变得庞杂了,所以我在这外面加了正文,来注释一下究竟产生了甚么。您可以用//到场单行正文,或用/*和*/来括住大段的正文。
到这里,咱们已学会了第一个真正有效的PHP/MySQL剧本法式!如今,咱们要看看如何把Web表格加出去,而且向数据库发送数据。>>
4、 向办事器发送数据
如今咱们从数据库读取数据已没有太多坚苦了。然而怎样反过去向数据库发送数据呢?其实这不是PHP的成绩。
首选,咱们创立一个带有复杂表格的网页。
<html>
<body>
<form method="post" action="<?php echo $PATH_INFO?>">
名:<input type="Text" name="first"><br>
姓:<input type="Text" name="last"><br>
住址:<input type="Text" name="address"><br>
职位:<input type="Text" name="position"><br>
<input type="Submit" name="submit" value="输出信息">
</form>
</body>
</html>
一样要注重$PATH_INFO的用法。就象我在第一课里讲到的,您可以在HTML代码中的恣意地位利用PHP。您也会注重到,表格中的每个元素都对应着数据库中的一个字段。这类对应关系并非必需的,这么做只是更直不雅一些,便于您今后了解这些代码。
还要注重的是,我在Submit按钮中到场了name属性。如许我在法式中可以摸索$submit变量是不是存在。因而,当网页被再次挪用时,我就会晓得挪用页面时是不是已填写了表格。
我应当指出,您纷歧定要把下面的网页内容写到PHP法式中,再返过去挪用法式自己。您完整可以把显示表格的网页和处置表格的法式分隔放在两个网页、三个网页乃至更多网页中,悉听尊便。放在一个文件中只是可使内容加倍紧凑罢了。
那好,咱们如今到场一些代码,来反省用户在表格中输出的内容。我会把用$HTTP_POST_VARS把一切查询参数变量都显示出来,这只不外是为了证实PHP的确把一切变量都传给了法式。这类办法是一个很有效的调试手腕。假如您要想看全体的变量,可以用$GLOBALS。
<html>
<body>
<?php
if ($submit) {
// 处置表格输出
while (list($name, $value) = each($HTTP_POST_VARS)) {
echo "$name = $value<br>\n";
}
} else{
// 显示表格
?>
<form method="post" action="<?php echo $PATH_INFO?>">
名:<input type="Text" name="first"><br>
姓:<input type="Text" name="last"><br>
住址:<input type="Text" name="address"><br>
职位:<input type="Text" name="position"><br>
<input type="Submit" name="submit" value="输出信息">
</form>
<?php
} // end if,if停止
?>
</body>
</html>
法式如今运转正常,那咱们如今就能够取到表格输出的内容,并把它们发送给数据库。
<html>
<body>
<?php
if ($submit) {
// 处置表格输出
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$sql = "INSERT INTO employees (first,last,address,position)
VALUES ('$first','$last','$address','$position')";
$result = mysql_query($sql);
echo "Thank you! Information entered.\n";
} else{
// 显示表格内容
?>
<form method="post" action="<?php echo $PATH_INFO?>">
名:<input type="Text" name="first"><br>
姓:<input type="Text" name="last"><br>
住址:<input type="Text" name="address"><br>
职位:<input type="Text" name="position"><br>
<input type="Submit" name="submit" value="输出信息">
</form>
<?php
} // end if,if停止
?>
</body>
</html>
您如今已向数据库中拔出数据了。不外还有良多完美的任务要做。假如用户没有填写某一栏怎样办?在需求填入数字的中央填了文字怎样办?或填错了怎样办?
别忧虑。咱们一步一步来。>>
5、修正数据
在个教程中,我都把要履行的SQL语句放到一个变量($sql)中,然后才用mysql_query()来履行数据库查询。在调试时这是很有效的。假如法式出了甚么成绩,您随时可以把SQL语句的内容显示出来,反省个中的语法毛病。
咱们已进修了若何把数据拔出到数据库中。如今咱们来进修若何修正数据库中已有的纪录。数据的编纂包含两局部:数据显示和经由过程表格输出把数据前往给数据库,这两局部咱们后面都已讲到了。但是,数据编纂仍是有一点点分歧,咱们必需先在表格中显示出相干的数据。
起首,咱们回过火再看看第一课的法式代码,在网页中显示员工姓名。然而此次,咱们要把数据显示在表格中。法式看起来象上面如许:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
if ($id) {
// 查询数据库
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
?>
<form method="post" action="<?php echo $PATH_INFO?>">
<input type=hidden name="id" value="<?php echo $myrow["id"] ?>">
名:<input type="Text" name="first" value="<?php echo
$myrow["first"] ?>"><br>
姓:<input type="Text" name="last" value="<?php echo
$myrow["last"] ?>"><br>
住址:<input type="Text" name="address" value="<?php echo
$myrow["address"] ?>"><br>
职位:<input type="Text" name="position" value="<?php echo
$myrow["position"] ?>"><br>
<input type="Submit" name="submit" value="输出信息">
</form>
<?php
} else {
// 显示员工列表
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PATH_INFO,
$myrow["id"], $myrow["first"], $myrow["last"]);
}
}
?>
</body>
</html>
咱们方才是把字段内容写入到响应表格元素中的value属性里,这是响应复杂的。咱们再往行进一步,使法式可以把用户修正过的内容写回数据库去。一样,咱们经由过程Submit按钮来判别是不是处置表格输出内容。还要注重,咱们用的SQL语句稍稍有些分歧。
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
if ($id) {
if ($submit) {
$sql = "UPDATE employees SET first='$first',last='$last',
address='$address',position='$position' WHERE id=$id";
$result = mysql_query($sql);
echo "感谢!数据更改完成\n";
} else {
// 查询数据库
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
?>
<form method="post" action="<?php echo $PATH_INFO?>">
<input type=hidden name="id" value="<?php echo $myrow["id"] ?>">
名:<input type="Text" name="first" value="<?php
echo $myrow["first"] ?>"><br>
姓:<input type="Text" name="last" value="<?php echo
$myrow["last"] ?>"><br>
住址:<input type="Text" name="address" value="<?php echo
$myrow["address"] ?>"><br>
职位:<input type="Text" name="position" value="<?php echo
$myrow["position"] ?>"><br>
<input type="Submit" name="submit" value="输出信息">
</form>
<?php
}
} else {
// 显示员工列表
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PATH_INFO,
$myrow["id"], $myrow["first"], $myrow["last"]);
}
}
?>
</body>
</html>
就是如许。在这个法式中已包括了咱们学过所大多半特征。您也已看到,咱们在一个if()前提辨别语句中又加了一个if()语句,来反省多重前提。
上面,咱们要把一切器材全都加在一同,写出一个很好的法式来。>>
6、完全的法式
在本课停止前,咱们要把一切器材到场到一个法式中,使它具有增添、编纂修正、删除纪录的功效。这是后面一切内容的一个延长,也能够作为极好的温习办法。看看上面的法式。
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
if ($submit) {
// 假如没有ID,则咱们是在增添纪录,不然咱们是在修正纪录
if ($id) {
$sql = "UPDATE employees SET first='$first',last='$last',
address='$address',position='$position' WHERE id=$id";
} else {
$sql = "INSERT INTO employees (first,last,address,position)
VALUES ('$first','$last','$address','$position')";
}
// 向数据库收回SQL号令
$result = mysql_query($sql);
echo "纪录修正胜利!<p>";
} elseif ($delete) {
// 删除一笔记录
$sql = "DELETE FROM employees WHERE id=$id";
$result = mysql_query($sql);
echo "纪录删除胜利!<p>";
} else {
// 假如咱们还没有按submit按钮,那末履行上面这局部法式
if (!$id) {
// 假如不是修正形态,则显示员工列表
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a> \n",
$PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]);
printf("<a href=\"%s?id=%s&delete=yes\">(DELETE)</a><
br>", $PATH_INFO, $myrow["id"]);
}
}
?>
<P>
<a href="<?php echo $PATH_INFO?>">ADD A RECORD</a>
<P>
<form method="post" action="<?php echo $PATH_INFO?>">
<?php
if ($id) {
// 咱们是在编纂修正形态,因些选择一笔记录
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
$id = $myrow["id"];
$first = $myrow["first"];
$last = $myrow["last"];
$address = $myrow["address"];
$position = $myrow["position"];
// 显示id,供用户编纂修正
?>
<input type=hidden name="id" value="<?php echo $id ?>">
<?php
}
?>
名:<input type="Text" name="first" value="<?php echo $first ?>"><br>
姓:<input type="Text" name="last" value="<?php echo $last ?>"><br>
住址:<input type="Text" name="address" value="<?php echo $address ?>"><br>
职位:<input type="Text" name="position" value="<?php echo $position ?>"><br>
<input type="Submit" name="submit" value="输出信息">
</form>
<?php
}
?>
</body>
<`/html>
这段法式看起来很庞杂,但实践上其实不难。法式次要有三个局部。第一个if()语句反省咱们是不是已按下了谁人“输出信息”的数据提交按钮。假如是,法式再反省$id是不是存在。假如不存在,那咱们就是在增添纪录形态,不然,咱们是在修正纪录形态。
接上去咱们反省变量$delete是不是存在。假如存在,咱们是要删除纪录。注重,第一个if()语句反省的是用POST办法发送来的变量,而这一次咱们反省的是GET办法中传递过去的变量。
最初,法式默许的举措是显示员工列表和表格。一样,咱们要反省变量$id是不是存在。假如存在,咱们就依据它的值检索出响应的纪录显示出来。不然,咱们会显示一个空的表格。
如今,咱们已把所学的器材全体都放在一个法式外头了。咱们用到了while()轮回,用到了if()语句,而且履行了全体的SQL根基操作 - SELECT、INSERT、UPDATE和DELETE。别的,咱们也晓得若何在分歧的网页之间经由过程URL和表格输出来相互传递信息。
在第三课里,咱们要进修若何为网页增添智能化处置才能。即使你理解不了PHP,但是也必须先跟它混个脸熟,看,一遍遍的看,看的同时一边琢磨,一边按照它所教的打代码,即使你搞不清楚那些代码到底是干嘛的,但是起码你应该找找感觉。 真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎, 多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 当然这种网站的会员费就几十块钱。 其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。 写的比较杂,因为我也是个新手,不当至于大家多多指正。 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。 实践是检验自己会不会的真理。 首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 本文当是我的笔记啦,遇到的问题随时填充 其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
页:
[1]