|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
可以说你的马步已经扎的差不多了,接下来就要开始练把势的时候了,如果有条件的话,用笔或者打印一个简易的PHP手册在身上,时不时的摸出来看看,记得,去WC也不能放过(^2^)。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", $myrow[1], $myrow[2], $myrow[3]);
}
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和表格输出来相互传递信息。
在第三课里,咱们要进修若何为网页增添智能化处置才能。 总的来说,在这一个月左右的时间中,学到的不少,但是也遇到不少的问题,比如批量图片的上传,一直到现在也不懂,如何实现动态的增加上传图片的数量。 |
|