24.13 开发常见问题与解决
视频讲解:光盘TMlx24开发常见问题与解决.exe
在本系统开发和后期测试的过程中,开发人员遇到了各种各样的疑难问题。这里找出一些常见的、容易被忽略的问题加以讲解,希望能够为初学者和新手提供一些帮助,在开发程序时少走一些弯路。
24.13.1 解决Ajax的乱码问题
问题描述:当使用Ajax传递数据时,要么在数据处理页中数据不能被正确处理,要么输出返回值时显示的是一堆无法识别的乱码。
解决方法:这是因为PHP在传递数据时使用的编码默认为utf-8,这就造成了非英文字符不能正确传递的情况。解决方法如下:
在所有的PHP页中都输入代码“Header("Content-Type:text/html; charset=gb2312"); ”,这样,所有的页面即可正确显示。
24.13.2 使用JS脚本获取、输出标签内容
问题描述:获取、更改表单元素值和特定标签内容。
解决方法:使用JS脚本获取页面内容的方式主要有两种:第一种是通过表单获取表单元素的value值,格式为“表单名称.元素名.value”,该方式只能获取表单中的元素值,对于其他标签元素不适用;第二种可以通过id名来获取页面中任意标签的内容,格式为“document.getElementById('id'). value; ”或“document.getElementById ('id').innerText; ”。
使用第二种方式时要注意,标签的id名必须存在且唯一,否则就会出现错误。为标签内容赋值时,则使用如下格式:
id.innerHTML =’要显示的内容’;
24.13.3 禁用页面缓存
问题描述:使用Ajax技术可以防止页面刷新,但有时也会产生新的问题。如在“会员管理”页面,如果连续地“冻结”和“解冻”会员,那么超过3次后,该功能将失效,因为在一定时间内,如果做相同的操作,那么XMLHttpRequest对象会执行缓存中的信息,从而造成操作失败。
解决办法:使用header()函数将缓存关闭。将代码“header("CACHE-CONTROL:NO-CACHE"); ”添加到XMLHttpRequest对象所调用的处理页的顶部即可。
24.13.4 在新窗口中使用session
问题描述:使用JS的open方法打开新窗口时,原浏览器中的session值不会被传递到新窗口中,从而造成数据查询失败。
解决方法:将session值另存到隐藏域或随着url一起传递到新窗口。代码如下:
<! -- 在模板页中,将session值赋给隐藏域 --> <input id="uid" name="uid" type="hidden" value="{$smarty.session.id}"> … /* 在JS脚本中,获取到隐藏域value值 */ function getInput(){ Var uid = document.getElementById('uid').value; /* 将获取的value值通过url传给新页面 */ open("operator.php? uid="+uid, '_blank', '', false); … }
24.13.5 判断上传文件格式
问题描述:添加商品时可以上传商品的图片,但有时可能会误传非图片格式的文件,这里就自定义一个函数来判断上传文件的后缀。
解决方法:创建自定义函数f_postfix(),函数的代码如下:
/* *判断文件后缀 *$f_type:允许文件的后缀类型(数组) *$f_upfiles:上传文件名 */ function f_postfix($f_type, $f_upfiles){ $is_pass = false; $tmp_upfiles=split(".", $f_upfiles); //使用split()函数分隔文件 $tmp_num=count($tmp_upfiles); //查找文件后缀 if(in_array(strtolower($tmp_upfiles[$tmp_num-1]), $f_type)) //判断后缀是否在允许列表内 $is_pass=$tmp_upfiles[$tmp_num-1]; //如果是,则将后缀名赋给变量 return$is_pass; //返回变量 }
24.13.6 设置服务器的时间
问题描述:如果没有对PHP的时区进行设置,那么使用日期、时间函数获取的将是英国伦敦本地时间(即零时区的时间)。例如,以东八区为例,如果当地使用的是北京时间,也没有对PHP的时区进行设置,那么获取的时间将比当地的北京时间少8个小时。
解决方案:要获取本地当前的时间必须更改PHP语言中的时区设置。更改PHP语言中的时区设置有两种方法:
图24.27 设置PHP的时区
(1)在php.ini文件中,定位到[date]下的“; date. timezone =”选项,去掉前面的分号,并设置它的值为当地所在时区使用的时间。修改内容如图24.27所示。
例如,如果当地所在时区为东八区,那么就可以设置“date.timezone =”的值为PRC、Asia/Hong_Kong、Asia/Shanghai(上海)或者Asia/Urumqi(乌鲁木齐)等。这些都是东八区的时间。
设置完成后,保存文件,重新启动Apache服务器。
(2)在应用程序中,在日期、时间函数之前使用date_default_timezone_set()函数就可以完成对时区的设置。date_default_timezone_set()函数的语法如下:
date_default_timezone_set(timezone);
其中,timezone为PHP可识别的时区名称,如果PHP无法识别时区名称,则系统采用UTC时区。
例如,设置北京时间可以使用的时区包括PRC(中华人民共和国), Asia/Chongqing(重庆), Asia/Shanghai(上海)或者Asia/Urumqi(乌鲁木齐),这几个时区名称是等效的。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。