PHP项目开发全程实录(第4版)
上QQ阅读APP看书,第一时间看更新

1.14 开发技巧与难点分析

1.14.1 查询关键字描红功能

在52同城信息网前台信息检索过程中体现了方便快捷的人性化原则,为了方便浏览者查阅信息,便于查找与浏览者的关键字相符合的信息,在搜索引擎中添加描红功能。

查询关键字描红是指将查询关键字以特殊的颜色、字号或字体进行标识,这样可以使浏览者快速找到所需的关键字,方便浏览者从搜索结果中查找所需内容。查询关键字描红适用于模糊查询。下面介绍如何实现查询关键字描红。

本系统用str_ireplace()函数来替换查询关键字,当显示所查询的相关信息时,将输出的关键字的字体替换为红色。描红功能的业务流程如图1.45所示。

图1.45 描红功能的业务流程

str_ireplace()函数用于将某个指定的字符串替换为另一个指定的字符串,不区分大小写。该函数的语法如下:


    mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &count])

该函数将所有在参数subject中出现的参数search以参数replace取代,参数&count表示取代字符串执行的次数。

str_ireplace()函数的参数说明如表1.16所示。

表1.16 str_ireplace()函数的参数说明

注意

该函数在执行替换的操作时,是不区分大小写的。如果需要对大小写加以区分,可以使用str_replace()函数。

本系统应用str_ireplace()函数替换查询字符串为红色的字符串,关键代码如下:

1.14.2 表单数据的提交方式

获取表单元素提交的值是表单应用中最基本的操作方法。表单数据的传送方法有get方法和post方法两种,通过<form>的method属性来指定。下面来具体讲解一下这两种方法在实际工作中的应用范围和使用技巧。

1.通过get方法提交数据

使用get方法时,表单数据被当作url的一部分一起传过去。格式如下:


    http://url?name1=value1&name2=value2…

 url:表单响应地址。例如,127.0.0.1/index.php。

 name:表单元素的名称。例如,<input type="text" name="user">,这里name的属性值就是user。通过name值可以获取value的属性值。

 value:表单元素的值。例如,<input type="text" name="user" value="mr">,意思是名字叫user的text表单元素的值为mr。

说明

url和表单元素之间用“?”隔开,而多个表单元素之间用“&”隔开,每个表单元素的格式都是“name=value”,固定不变。

PHP使用$_GET预定义变量自动保存通过get方法传过来的值,使用格式为:


    $_GET['name']

这样,就可以直接使用名字为name的表单元素的值。

技巧

有的PHP版本中直接写$name就可以调用表单元素的值,这和php.ini文件的配置有关系,定位到GLOBAL=ON/OFF行,如果值为ON,就可以直接写成$name,反之则不可以。直接应用表单名称十分方便,但也存在一定的安全隐患。推荐读者关闭GLOBAL项。

使用文本框传值的程序中包含一个文本框元素。在文本框中输入信息,当单击“提交”按钮时,文本框内的信息就会和url一起显示在地址栏中。代码如下:


    <form name="login" method="get" action="index.php">
    …
    </form>

技巧

get方法是使用url来进行传值的,“加入收藏夹”的功能就是get方法的应用之一。想要将一个带参数的网址加入到收藏夹中,只能使用url,它可以脱离表单的束缚。文字、图片等都可以使用这种方法来传值。

2.通过post方法提交数据

get方法有个最大的缺点,就是它的信息是显示在客户端浏览器上的,这使用户的资料暴露无遗,而且url本身受长度限制(1024KB),不能传输较大的数据。这时可以选择post方法。使用时,将<form>表单中的属性method设置成post即可。post方法不依赖url,所有提交的信息在后台传输,不会显示在地址栏中,安全性高,而且没有长度限制。

使用PHP的$_POST['name']变量可以获取表单元素的值,格式和$_GET['name']类似:


    $_POST['name']

例如,使用的post方法返回文本框信息,代码如下:


    <form name="login" method="post" action="index.php">
    …
    </form>