第二个灵魂 发表于 2015-2-16 00:24:38

PHP网页设计PHP/MySQL三日通-第三天

一下弹出N多页面!很明显,你的留言本并没有做好安全防范,被人用JS代码小小的耍了一下,我很同情你这个时候的感受,但是没有别的办法了,继续努力吧!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的开辟人员本人也会列入邮件会商组,还有很多经历丰厚的高手们,他们都可以匡助您处理成绩。

  祝您编程顺遂,一切顺遂!在学习PHP这六个月里,每看到一个优秀的php脚本,就会兴奋的手舞足蹈,嘴里还不停的说:太酷了,太酷了。呵呵,很幼稚吧,但这可能就是兴趣。

再现理想 发表于 2015-2-16 01:08:45

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

透明 发表于 2015-2-16 07:25:05

如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,

冷月葬花魂 发表于 2015-2-21 06:16:46

我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。

山那边是海 发表于 2015-2-27 05:34:06

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

admin 发表于 2015-3-8 22:17:33

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

简单生活 发表于 2015-3-9 06:27:32

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

老尸 发表于 2015-3-15 03:31:49

当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,

仓酷云 发表于 2015-3-17 04:09:52

最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。

金色的骷髅 发表于 2015-3-25 02:35:33

曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ;

谁可相欹 发表于 2015-3-27 08:09:10

使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的

海妖 发表于 2015-3-28 01:23:00

兴趣是最好的老师,百度是最好的词典。

分手快乐 发表于 2015-4-3 19:40:42

本文当是我的笔记啦,遇到的问题随时填充

因胸联盟 发表于 2015-4-4 15:21:50

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

爱飞 发表于 2015-4-6 00:40:19

首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。

柔情似水 发表于 2015-4-15 19:45:14

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

兰色精灵 发表于 2015-4-20 21:36:54

本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。

活着的死人 发表于 2015-4-21 02:22:59

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

飘灵儿 发表于 2015-5-1 21:12:38

微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。
页: [1]
查看完整版本: PHP网页设计PHP/MySQL三日通-第三天