乐观 发表于 2015-2-4 00:28:58

PHP编程:php & mysql三日通 3

培训的第二阶段,开始了PHP语言语法结构和应用的学习。mysql   1、根基函数

  接待离开本教程的第三课,也是最初一课。假如您已学过第一课和第二课,那末您已把握了MySQL和PHP的装置及编程的根基常识。上面咱们要引见PHP的一些其他函数,这些函数能够会对您有效,使您的开辟进程加倍复杂。起首咱们来看看头文件。

  人人应当晓得头文件的一些根基概念吧?头文件是一个内部文件,它的内容被包括到主法式中。办法也非常复杂:在法式文件中援用头文件名,这个头文件就会包括出去了。在PHP中利用头文件,会触及两个函数:include()和require()。这两个函数不同很小,却很主要,所以咱们要仔细研讨一下。require()函数任务体例与XSSI相相似;不论在法式的哪一个局部利用了这个函数,只要法式一入手下手运转,头文件的内容就被作为法式自己的一局部来处置。因而,假如您在一个前提剖断语句中利用了require()函数,那末即便这个前提即便不为真,头文件也会被包括出去。

  而include()函数只是在履行到这一条语句时才会把头文件内容包括出去。假如法式没运转到这里,那PHP是不会管它的。这就意味着,您在前提剖断局部利用include时,它会完整依照您但愿的那样任务。

  还有,假如您用了require()函数,而您指定的头文件其实不存在,那末法式将会中断运转并发生毛病。假如您用了include(),法式会发生一个正告信息,然而会持续运转。您可以亲身试一下,运转上面的法式,然后把include()换成require(),再对照两个法式运转的了局。


<html>
<body>
<?php
include("emptyfile.inc");
echo "Hello World";
?>
</body>
</html>

 

 我喜好把头文件的后缀名起成.inc,如许就能够把头文件和普通的法式辨别开来。假如您也这么做,那末请您修正Web办事器软件的设置装备摆设文件,使它可以把.inc文件也看成PHP文件来处置。不然,黑客们或许会猜到您的头文件名,然后用阅读器把头文件内容以纯文本格局显示出来。此时假如您的头文件中有些秘密信息(如数据库口令等)那就糟了。

  那末,您用头文件来做甚么呢?很复杂!把对一切法式都通用的那些内容放到头文件里。象HTML文件头啦,脚注啦,数据库毗连代码啦,还有您本人界说的一些函数甚么的。把上面的文字拷贝到一个文件中,保留为header.inc。


<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
?>
<html>
<head>
<title>
<?php echo $title ?>
</title>
</head>
<body>
<center><h2><?php echo $title ?></h2></center>



  然后再创立别的一个文件,名字是footer.txt,该文件可以包括一些法式停止时用到的一些文字和标志。

  如今,咱们再来创立一个文件,这个文件外面是真实的PHP法式代码。试一下上面的代码,固然,您要确认MySQL数据库办事器正在运转。


<?php
$title = "Hello World";
include("header.inc");
$result = mysql_query("SELECT * FROM employees",$db);
echo "<table border=1>\n";
echo "<tr><td>名字</td><td>职位</tr>\n";
while ($myrow = mysql_fetch_row($result)) {
printf("<tr><td>%s %s</td><td>%s</tr>\n", $myrow, $myrow, $myrow);
}
echo "</table>\n";
include("footer.inc");
?>



  看到产生了甚么事了吗?头文件里的内容被兼并到法式中,PHP把一切的代码都履行了一遍。注重在包括header.inc头文件之前$title是若何界说的。在header.inc中的代码可以会见到它的值。如许,网页的题目就被改失落了。如今,您可以在任何法式中利用header.inc头文件了,您所要做的不外是在每一个主法式中为$title变量取一个适合的值。

  头文件、HTML、前提剖断语句,还有轮回语句,这些器材加在一些,您就能够用最简洁的代码,写出功效各别的各类庞杂法式来。在与函数同时利用时,头文件更能发扬它的效率,咱们前面就会看到。

  接下去,咱们会引见出色的局部:数据校验。>>



2、 数据校验

  想象一下如许的情况:咱们把数据库都设计妥善了,如今请用户输出信息来写到数据库中去。假定您有一个字段是请求数字类型的信息,好比价钱;而某个心爱的用户,却在这一栏里输出了文字信息,使得您的使用法式的履行进程呈现了毛病。对您在SQL语句中供应的文字类型的数据,MySQL数据库拒不承受,并向您提出了“严明抗议”。

  怎样办呢?您要用数据校验来避免以上情况产生。

  复杂地讲,数据校验是指咱们对数据(凡是是用户经过HTML表格传过去的)停止反省,看看它是不是服从必定的划定规矩。划定规矩可所以多种多样的,好比某一数据元素不克不及为空,或请求某一数据项的内容必需知足必定的请求(例如后面的例子中请求必需是数字而不是文字,或请求电子邮件地址中必定要包括一个“@”字等等)。

  数据校验既可以在办事器一端作,也能够在客户端来作。PHP是用来作办事器一真个数据校验的,而JavaScript或其他客户端剧本编程言语则可以供应客户真个数据校验功效。本文说的是PHP,所以咱们在这里侧重引见办事器真个校验。假如您想找一些现成的、在客户端运转的数据较验法式,那您可以去网猴法式库看看。

  临时把数据库放在一边不谈,咱们先来讲说PHP的数据校验办法。假如您情愿(或说,您想纪录咱们要校验的那些数据的话),您可以在后面所建的员工数据库的里到场其他字段,很复杂,用MySQL的ALTER 语句就好了。

  有好几个PHP功效都可以用来作数据校验的任务,有些很复杂,有些则庞杂一些。个中strlen()是对照复杂的一个函数,它可以告知咱们一个变量的长度。

  更庞杂一点儿的是ereg(),这个函数可以处置完全的惯例表达式来停止庞杂的校验。我不想就惯例表达式讲得太深,由于很多书都是专门写这个成绩的。不外我会鄙人一页中给出一些复杂的例子。

  咱们先从一个复杂的例子入手下手吧。上面这个法式要反省一个变量是不是存在。


<html>
<body>
<?php
if ($submit) {
if (!$first || !$last) {
$error = "对不起,您必需填写一切的栏目!";
} else {
// 处置表格输出内容
echo "感谢!";
}
}
if (!$submit || $error) {
echo $error;
?>
<P>
<form method="post" action="<?php echo $PHP_SELF ?>">
第一栏: <input type="text" name="名" value="<?php echo $first ?>"><br>
第二栏: <input type="text" name="姓" value="<?php echo $last ?>"><br>
<input type="Submit" name="submit" value="输出信息">
</form>
<?php
} // if停止
?>
</body>
</html>



  这段法式中关头的中央是嵌套的前提剖断语句。第一层反省用户是不是按了发送数据的按钮。假如是,法式接着反省$first和$last两个变量是不是都存在。谁人 || 符号暗示“或”,而 ! 符号暗示“非”。那一句法式用普通言语描写就是“假如$first不存在或$last不存在,那末就把 $error变量置成上面的值。”

  接上去,咱们再进一步,反省一段文字的长度。这对用户口令的反省是很有需要的,由于您不想让某些怠惰的用户输出只要1、两个字的口令,能够会请求他们输出六位长的口令。

  咱们已讲到strlen()这个函数了。它只是复杂地前往一个数字,该数字等于被测变量中所包括的字符个数。这里,我修正一下下面的法式,反省一下$first与$last的长度。


<html>
<body>
<?php
if ($submit) {
if (strlen($first) < 6 || strlen($last) < 6) {
$error = "对不起,您必需填写一切栏目!";
} else {
// 处置表格输出内容
echo "感谢!";
}
}
if (!$submit || $error) {
echo $error;
?>
<P>
<form method="post" action="<?php echo $PHP_SELF ?>">
第一栏: <input type="text" name="名" value="<?php echo $first ?>"><br>
第二栏: <input type="text" name="姓" value="<?php echo $last ?>"><br>
<input type="Submit" name="submit" value="输出信息">
</form>
<?php
} // if停止
?>
</body>
</html>



  您可以履行一下这段法式,输出六个字或少于六个字的内容。这类校验很复杂,但很无效?>

3、 处置惯例表达式

  咱们略微讲讲用ereg()和eregi()两个函数处置惯例表达式。后面我已提过,这些函数有的很复杂,有的很庞杂,看您的实践需求而定。

  利用惯例表达式,您可以对一个字符串停止反省,搜刮个中的一些布局形式,剖断这些形式是不是知足您的划定。最广泛的用法包含反省电子邮件地址是不是无效(固然,即便这类举措剖断无效,也不克不及包管邮件地址真的存在)。

  咱们在这里不细究惯例表达式的庞杂细节了,仅仅给出几个实例。您可使用上一页顶用过的表格 - 把响应的法式代码复制过去,添加到上面的代码段中,就能够看到它是如何任务的。

  起首,咱们要确保表格中各栏只能输出字母。上面的惯例表达式在用户输出一个或多个小写字母时剖断为真,而输出数字是不答应的:

if (!ereg("", $first) || !ereg("", $last)) {

如今咱们更进一步,反省字符串的长度是不是是四到六位字符长。用[[:alpha:]]是反省字符是否是字母的复杂体例。大括号内的数字反省字符个数。还要申明的是,^ 和 $ 分离代表字符串的入手下手和停止。

if (!ereg("^[[:alpha:]]{4,6}$", $first) || !ereg("^[[:alpha:]]{4,6}$", $last)) {

最初,咱们来机关一个惯例表达式,来查验电子邮件地址的无效性。这类查验体例的后果已激发了相当多的会商。没有甚么器材是浑然一体的,不外我上面给出的这段法式仍是非常见效的。

  我这段宝物法式是从PHP邮件会商组上得来的。那可是个好去向 - 常去看看吧。不错,这段法式看起来是有点乱糟糟的。


if (!ereg('^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\/0-9=?A-Z^_`a-z{|}~]+\.'.
'[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+$', $last)) {



别花太多工夫来细究这段代码了,仍是先到下一页内容吧。

4、 简捷办法

  后面的惯例表达式怎样?很成心思,是吧?如果在每一个需求反省电子邮件地址的法式里都写上这么一段法式,那才真叫成心思呢?!想一想看吧,得写那末七零八落的一段法式,还得写上那末多遍!...不外,固然了,还有更简捷的办法。

  还记得后面咱们学过的头文件吗?它能让咱们写一段法式,象是这个电子邮件地址的反省法式,然后把这段法式包括进多个法式外面去。如许,咱们要改写这段法式时,只须修改一处就好了,不必修正多个文件。

  然而,要做到这一点,咱们必需用到函数。

  咱们已用过良多次函数了。每次咱们查询数据库或反省字符串长度时,咱们都是用函数来做的。这些函数是PHP自带的。假如您是位热情的法式员,您可以用本人编写的函数来扩大PHP自己的功效。但对本教程而言,这局部内容是太甚深邃了一点。咱们要创立的函数不是那一种,而是写在PHP剧本法式外部的函数。

  函数就是一段法式代码,咱们可以把一个或多个值传给这段代码,然后这段代码会处置咱们传给它的数据并前往一个值。依据实践需求,函数可以很复杂,也能够非常庞杂。然而只需咱们传出来一个数,然后能失掉一个数,您管它外面有是庞杂仍是复杂呢!这就是函数的心爱的地方。

  PHP里的函数与C言语里的函数体现差不多。当咱们界说函数时,必需指明函数需求吸收甚么样的数据。一入手下手好象不太好了解为何它要吸收数据出来,不外如许可以避免产生一些奇异的成绩。函数之所以能做到这一点,是由于函数外面的变量都是公有变量,也就是说,它只在该函数外部存在。例如,您在法式中有一个变量叫$myname,假如您创立了一个函数,想让这个函数也利用谁人$myname变量(值也不异),那是不可的。您可以在函数外部创立一个变量,名字也叫$myname,这两个变量可以各平相处,而各自取分歧的值。不外我可不建议您这么做!您假如真的这么做了,等半年后您再来修正如许的法式时,您能够就会被弄懵懂了。

  那咱们如今就来创立一个函数,先来个复杂的。咱们要给它取个名字,指定它要吸收甚么的变量。在挪用这个函数之前,咱们还得界说这个函数。  


<html>
<body>
<?php
function addnum($first, $second) {
$newnum = $first + $second;
return $newnum;
}
echo addnum(4,5);
?>
</body>
</html>



这就好了!起首,咱们创立了第一个本人的函数。咱们界说了两个新变量,$first和$second,注重它们是如何被界说的。在挪用这个函数时,要给这两个变量按它们呈现的按次赋好值 - 4赋给$first,5赋给$second。然后咱们复杂地把这两个数加在一同,前往了局。“前往”在这里的意思是把了局送归去。在法式最初局部咱们把数字9显示出来。

  咱们再来创立一个函数,让它对咱们的数据库使用有点匡助。一个能妥帖处置毛病的函数怎样?尝尝上面的法式:


<html>
<body>
<?php
function do_error($error) {
echo "噢,好象有点儿成绩...<br>";
echo "体系呈报的毛病是:$error.\n<br>";
echo "最好是临时封闭网站并告诉体系办理员。";
die;
}
if (!$db = @mysql_connect("localhost","user", "password")) {
$db_error = "没法毗连到MySQL数据库";
do_error($db_error);
}
?>
</body>
</html>



  在运转法式之前,尝尝封闭MySQL数据库,或利用毛病的用户名或口令。您会看到友爱的、有效的毛病信息 。仔细的伴侣会注重到在mysql_connect()函数之前的谁人@符号。它会克制体系毛病信息,使得法式只能从do_error()函数那边失掉有关的毛病信息。您还会注重到,咱们可以把一个在别处界说的变量作为参数传给函数,而不是在挪用时直接赋一个值。

  还记得我过函数利用的是公有变量吧?这话说得不完整对。现实上,您可让函数会见到函数里面的变量。您能够要写一个函数,用它来查询数据库,然后把了局显示在多个网页中。您不想每次都把数据库毗连标识都传给函数。在这类情形下,您可以把毗连标识界说成一个全局的变量。例如:


<html>
<body>
<?php
function db_query($sql) {
global $db;
$result = mysql_query($sql,$db);
return $result;
}
$sql = "SELECT * FROM mytable";
$result = db_query($sql);
?>
</body>
</html>

 

 这是个很复杂的函数,但主要的是,您在挪用这个函数时,不用传递$db变量 - 您可以经由过程 global这个字使得函数可以会见到该变量。在这条语句中您可以界说多个全局变量,各个全局变量之间用逗号离隔。

  最初,您可使用可选参数,如许看起来您已是真实的专家了。这外面关头的一点是,在函数中界说参数时要给它指定一个缺省值。然后您在挪用这个函数时,假如不为该参数变量指定其他值,那末函数会主动把缺省值赋给这个变量。假如您指定了其他值,那末缺省值就不起感化了。

  不太分明?例如说,您在毗连数据库时,几近老是毗连到不异的办事器,而且利用不异的用户名和口令。不外有时分,您也需求毗连到其他的办事器。看看上面的法式:


<html>
<body>
<?php
function db_connect($host = "localhost", $user="username", $pass="graeme") {
$db = mysql_connect($host, $username, $password);
return $db;
}
$old_db = db_connect();
$new_host = "site.com";
$new_db = db_connect($new_host);
?>
</body>
</html>



  很“酷”是否是?在界说函数时,函数外部用到的变量也界说好了。第一次挪用这个函数时,全体参数变量都是用的缺省值。第二次挪用时,办事器名变了,而用户名和口令没有变。真是太棒了!

  想一想您在甚么中央还能用到函数。您可以用函数来作数据校验,来完成经常使用的功效,等等。在对Web网页上显示的文字作处置时,我用到了良多函数。我可以一次完成对文字的反省、解析和修正,来到场换行符和HTML标志等。

  如今,剩下的就是我要给您的一些忠言了。

5、进阶技能

  谈起数据库开辟,咱们有良多器材要学。假如您还没有进修过如何停止数据库设计,和如何在分歧的平台上牢靠地运转数据库,那末请您从速去找本这方面的好书来读一读。这方面的才能会带给您没法估计的优点,从久远的目光看,它会为您节俭大批的工夫与精神。还有,仔细学学MySQL。这是一个庞杂而风趣的数据库,有良多不错的文档。学学数据库的表布局、数据类型,还有SQL。假如您真正把握了SQL,您可以完成相当多的实践任务。

  最初,还有PHP。您想要的一切几近都可以在PHP的网站上找到,包含周全的文档、邮件会商组的会商内容、法式代码库,等等。进修PHP的一个绝好的举措是研讨用户手册中给出的实例,并查阅网上的代码。网友们宣布的代码包含很多函数和类,您可以在本人的法式中直接利用,而不用本人从头来过。别的,假如您碰到成绩,邮件会商组是一个十分值得使用的资本。PHP的开辟人员本人也会列入邮件会商组,还有很多经历丰厚的高手们,他们都可以匡助您处理成绩。

怎么配置呢 ,问最好的老实百度,问啥都有答案。所以用好搜索引擎是学好的令1个关键,程序会出各样的问题,没有1个人可能会碰到所有的问题,所有就可以问百度这个大家精华的集合了。

柔情似水 发表于 2015-2-4 18:43:58

建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。

精灵巫婆 发表于 2015-2-8 18:35:06

Ps:以上纯属原创,如有雷同,纯属巧合

只想知道 发表于 2015-2-25 22:04:21

写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。

蒙在股里 发表于 2015-3-3 11:51:45

微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。

冷月葬花魂 发表于 2015-3-11 10:40:28

遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。

兰色精灵 发表于 2015-3-11 13:36:16

其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎

admin 发表于 2015-3-18 14:36:41

Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81

仓酷云 发表于 2015-3-24 16:41:50

说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。

若天明 发表于 2015-3-27 09:09:43

对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。

灵魂腐蚀 发表于 2015-3-28 02:20:31

Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81

小魔女 发表于 2015-4-1 13:00:32

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。

山那边是海 发表于 2015-4-5 21:51:59

我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。

分手快乐 发表于 2015-4-10 11:30:44

php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)

活着的死人 发表于 2015-4-26 01:11:39

在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、

因胸联盟 发表于 2015-5-1 15:11:54

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

透明 发表于 2015-5-3 02:31:58

至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。

谁可相欹 发表于 2015-6-24 21:59:38

这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。

变相怪杰 发表于 2015-6-27 22:47:46

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
页: [1]
查看完整版本: PHP编程:php & mysql三日通 3