📄 mysql实例-2.htm
字号:
<TR>
<TD class=code
bgColor=#e6e6e6><font color="#000000">$joketext=ereg_replace(<BR>
"[L=([-_./a-zA-Z0-9!&%#?,'=:~]+)]".<BR>
"([-_./a-zA-Z0-9!&%#?,'=:~]+)[EL]",<BR>
"<AHREF="\1">\2</A>",$joketext);<BR>
</font></TD>
</TR>
</TBODY>
</TABLE>
<font color="#FFFFFF"><BR>
内容的分页<BR>
虽然也许没有笑话会长得要分页显示,但是许多内容驱动的站点防止内容过长的最好的方法就是将其分页显示。使用PHP的另一个正则表达式的函数可以很容易地实现这种功能。<BR>
<BR>
split是这样一个函数:它接受一个正则表达式和一个文本字符串并通过字符串对正则表达式的匹配将其分开,并存储到数组中。参看下面的例子:<BR>
</font>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580
borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code
bgColor=#e6e6e6><font color="#000000">$regexp="[]+";//一个或更多的空白字符<BR>
$text="Thisisatest.";<BR>
$textarray=split($regexp,$text);<BR>
echo("$textarray[0]<BR>");//输出"This<BR>"<BR>
echo("$textarray[1]<BR>");//输出"is<BR>"<BR>
echo("$textarray[2]<BR>");//输出"a<BR>"<BR>
echo("$textarray[3]<BR>");//输出"test.<BR>"<BR>
</font></TD>
</TR>
</TBODY>
</TABLE>
<font color="#FFFFFF"><BR>
如果用一个[PAGEBREAK]标志取代这里的空白字符,并用显示我们感兴趣的页面(在页面请求中通过$page变量传递)取代显示全部的划分结果,我们就可以成功将内容分页。<BR>
<BR>
</font>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580
borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code
bgColor=#e6e6e6><font color="#000000">//Ifnopagespecified,defaulttothe<BR>
//firstpage($page=0)<BR>
if(!isset($page))$page=0;<BR>
//Splitthetextintoanarrayofpages<BR>
$textarray=split("[PAGEBREAK]",$text);<BR>
//Selectthepagewewant<BR>
$pagetext=$textarray[$page];<BR>
</font></TD>
</TR>
</TBODY>
</TABLE>
<font color="#FFFFFF"><BR>
当然,我们需要提供一些方法以在页面之间进行切换。我们可以在当前页的顶端放置一个到上一页的链接,在底端放置一个到下一页的链接。<BR>
<BR>
如果这是第一页,我们就不需要一个到上一页的链接。我们知道如果$page变量等于零就意味着当前页是第一页。同样地,在最后一页我们也不需要到下一页的链接。要确定当前页是不是最后一页,我们需要一个新的名为count的PHP的函数,它以一个数组为参数并返回数组的数目。通过页面的数组,count会告诉我们这儿有多少页。如果有10页,那么$textarray[9]就是最后一页。这样,如果$page等于count($textarray)减一就说明当前页是最后一页。<BR>
<BR>
有关我们的页面切换的链接的代码将是这样的:<BR>
</font>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580
borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code
bgColor=#e6e6e6><font color="#000000">if($page!=0){<BR>
$prevpage=$page-1;<BR>
echo("<P><AHREF="$PHP_SELF?id=$id&page=$prevpage">".<BR>
"PreviousPage</A></P>");<BR>
}<BR>
//Outputpagecontenthere...<BR>
if($page<count($textarray)-1){<BR>
$nextpage=$page+1;<BR>
echo("<P><AHREF="$PHP_SELF?id=$id&page=$nextpage">".<BR>
"NextPage</A></P>");<BR>
}<BR>
</font></TD>
</TR>
</TBODY>
</TABLE>
<font color="#FFFFFF"><BR>
进行组装<BR>
完整的用来输出我们的笑话的内容的代码(包含了对所有特殊字符和自定义标志的转换)如下所示:<BR>
</font>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580
borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code
bgColor=#e6e6e6><font color="#000000"><!--joke.php--><BR>
...<BR>
//Getthejoketextfromthedatabase<BR>
$joke=mysql_query("SELECTJokeTextFROMJokes".<BR>
"WHEREID=$id");<BR>
$joke=mysql_fetch_array($joke);<BR>
$joketext=$joke["JokeText"];<BR>
//FilteroutHTMLcode<BR>
$joketext=htmlspecialchars($joketext);<BR>
//Ifnopagespecified,defaulttothe<BR>
//firstpage($page=0)<BR>
if(!isset($page))$page=0;<BR>
//Splitthetextintoanarrayofpages<BR>
$textarray=split("[PAGEBREAK]",$joketext);<BR>
//Selectthepagewewant<BR>
$joketext=$textarray[$page];<BR>
//Boldanditalics<BR>
$joketext=eregi_replace("[b]","<B>",$joketext);<BR>
$joketext=eregi_replace("[eb]","</B>",$joketext);<BR>
$joketext=eregi_replace("[i]","<I>",$joketext);<BR>
$joketext=eregi_replace("[ei]","</I>",$joketext);<BR>
//Paragraphsandlinebreaks<BR>
$joketext=ereg_replace("","",$joketext);<BR>
$joketext=ereg_replace("","<P>",$joketext);<BR>
$joketext=ereg_replace("","<BR>",$joketext);<BR>
//Hyperlinks<BR>
$joketext=ereg_replace(<BR>
"[L]([-_./a-zA-Z0-9!&%#?,'=:~]+)[EL]",<BR>
"<AHREF="\1">\1</A>",$joketext);<BR>
$joketext=ereg_replace(<BR>
"[L=([-_./a-zA-Z0-9!&%#?,'=:~]+)]".<BR>
"([-_./a-zA-Z0-9!&%#?,'=:~]+)[EL]",<BR>
"<AHREF="\1">\2</A>",$joketext);<BR>
if($page!=0){<BR>
$prevpage=$page-1;<BR>
echo("<P><AHREF="$PHP_SELF?id=$id&page=$prevpage">".<BR>
"PreviousPage</A></P>");<BR>
}<BR>
echo("<P>$joketext");<BR>
if($page<count($textarray)-1){<BR>
$nextpage=$page+1;<BR>
echo("<P><AHREF="$PHP_SELF?id=$id&page=$nextpage">".<BR>
"NextPage</A></P>");<BR>
}<BR>
...<BR>
</font></TD>
</TR>
</TBODY>
</TABLE>
<font color="#FFFFFF"><BR>
不要忘记提供一份相关的文档,以使得提交笑话的用户知道可以使用那些标志以及怎么用这些标志。<BR>
<BR>
内容的自动提交<BR>
如果我们花费了这么多时间和精力的内容管理系统,仅仅是供站点管理员一个人使用,那就有点可惜了。而且,虽然对于一个站点管理员来说,在维护站点的内容时不再需要编辑HTML是相当方便的,但是他还是需要将提交的文档录入到"Add
NewJoke"表单中,并将文本格式转变为我们上面开发的自已的文本格式,这至少是一个机械的单调乏味的工作。<BR>
<BR>
如果我们把"AddNewJoke"表单交到普通的网站访问者手中,那又怎么样呢?让我们回忆一下,实际上在第四章中我们曾经提供了一个表单让用户来提交他们自己的笑话。当时,这是用来演示如何在PHP脚本中使用INSERT语句的。但是我们很快又因为安全性的考虑取消了这项功能。毕竟,谁愿意将自己的站点向所有试图毁坏它的人都开放呢?<BR>
<BR>
但是接受笑话的提交并不意味着提交的内容立即在站点中显示出来。我们可以向Jokes表中添加一个新的名为Visible的数据列,这个列可以有两个值:'Y'和'N'。刚提交的笑话可以自动设置为Visible='N',而在对Jokes表的查询中添加WHERE
Visible='Y'就可以不显示这些笑话。Visible='N'的笑话仅仅是在数据库中等候内容管理者的处理,只有管理者可以将其设置为可见,或者最终将其删除。<BR>
<BR>
对于这样的一个在两个值中取一个值,而其中有一个默认值的数据列,可以使用称为ENUM的MySQL数据列类型:<BR>
</font>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=0 width=580
borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code
bgColor=#e6e6e6><font color="#000000">mysql>ALTERTABLEJokesADDCOLUMN<BR>
->VisibleENUM('N','Y')NOTNULL;<BR>
</font></TD>
</TR>
</TBODY>
</TABLE>
<font color="#FFFFFF"><BR>
圆括号中的第一个数值(这里是'N')是默认值,使用INSERT语句新插入记录时,如果没有指定这个列的数值,默认值将自动起作用。<BR>
<BR>
因为新笑话是不公开的,唯一剩下来的安全问题就是作者的识别。我们想要搞清楚一个笑话是由数据库中哪一个作者提交的,但是在"AddNewJoke"表单中使用以前的那种下拉菜单来决定作者显然是不太合适的,因为这可能在作者之间发生混淆。在这种情况下,明显地我们可以使用用户名/口令识别机制。<BR>
<BR>
在Authors数据表中存储口令和增加一个其它的列没什么不同。然后你可以要求作者在向一个数据库提交一个笑话时相应地输入他的email地址和口令。你也许还需要一个同样的登录过程以允许作者更改它自己的详细资料(姓名、email地址等等)。你也许甚至还可以给每一个作者一个“控制中心”,在那里他可以显示他提交到站点的笑话的当前状态。<BR>
<BR>
结语<BR>
对前面所讲的内容提交系统进行一下认真的钻研,你将会掌握所有必须的技巧,这样你就可以建立一个你自己的系统。你是不是想要让用户能够对站点中的笑话进行评价呢?是不是可以考虑让作者更改它提交的笑话,并在管理者对这种更改进行确认?所有的这些只需要你有足够的想象力。<BR>
<BR>
通过这一章的学习,你已经学会了建立你自己的数据库驱动的站点的基本技巧。在剩下的章节中,我们会学习一些更复杂的问题以使你的站点能够工作得更好。当然,我们也会看到有关PHP和MySQL的更多的令人兴奋的功能。<BR>
<BR>
在第八章中,我们将对我们的笑话数据库进行一些改进,并认真研究一下MySQL服务的维护和管理。我们会学习到如何对我们的数据库进行备份(对于一个基于Web的应用,这是一个需要认真对待的问题!),如何管理MySQL的用户和它们的口令,当然我们还会看到如果你忘记了你的口令,如何登录到一个MySQL服务。</font></FONT>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -