第一个php网站的一些心得和体会

先说下在做的过程中遇到的一些问题,以及解决的方法吧

1.关于书写错误

 

最开始做的是一个登陆模块,在登陆验证的时候,使用$_POST接收的参数,然后在验证的时候,却怎么也接收不到这两个值,后来才发现$_POST写错了,写成$POST  少个下划线,结果无法正确的验证,很是郁闷。花了好长时间,才找到原因,而且还是一个低级错误,当时在没有找到原因的时候,发在论坛里群里,都让帮忙找原因,当找到原因的时候,很是惭愧,从那以后,再遇到错误,我非常的慎重,先从语法上检查,如果保重在语法没有错误的前提下,如果还找不到原因,再去问别人。

 

2.就是退出跳转。在登陆成功之后,点退出的时候,会跳到登陆界面,并清除session。代码如下:

<a href="login.php?action=logout" target="_parent" onClick="return confirm('您确定要退出吗?');">退出</a>

 

后台其实是一个frameset框架,而退出连接就在left.php里,我的这个退出验证是写在left.php里的,

比如:

if($_GET[action]==logout){

     //做一些清理session操作

}

可是这时候,session并没有清除,这个退出只是完成了一个超连接的作用,连接到了login.php页面,后来才弄明白,这个超连接是连接的login.php,所以上面的那个if判断应该是写在login.php里,接收action==logout,这样才正确,而我却把它写在了left.php里了,所以才没有成功。

 

3.再下来就是一个乱码的问题了.

在config.php里,我设置了set names的编码格式是uft-8,页面的meta里也是设置的utf-8,数据库里也是使用的utf-8的编码,但是依然是出现乱码,后来才发现,set names这后面的utf-8 应该写成utf8   其实含义都是一样的,只是mysql称为utf8  而网页称它为utf-8,就像一个人,有一个书面的名字,也有一个小时候的乳名,其实都是同一个人。

 

再另一个乱码的问题是在分页的时候,我的那个分页导航是从网上找的。直接拿到程序中用了,可是奇怪的时候,其它的都正常,只有分页导航是乱码,后来在网上找了很多资料,都不是特别的清楚.一个偶尔的机会,我在打开我的那个分页函数所在的文件的时候,发现里面全是乱码才知道,设置成utf-8编码只是其中一步,文件在保存的时候,也需要保存成utf-8的编码才可以,我转换之后,就正常了。

 

不过有一些疑问,假如我使用的编码不是utf-8的,如果是gbk或者是gb2312编码的时候,这时候,在保存文件选择编码是否也有讲究?

关于乱码,还是有些迷糊,比如页面是utf8 数据库使用gb2312 set names该怎么设置,这些东西,还是找个时间,好好查下清楚吧,

 

4.就是关于引用文件路径的一个问题。我的项目结构大致是这样的

mysite

     ----admin

           ------files

                  a.php

           ----confing.php

     ----config

          -----config.php

 

也就是说mysie下有两个文件夹,admin和config,admin下有一个config.php文件和一个files下的a.php    config文件夹下有一个config.php文件   admin/config.php  文件里引用了config/config.php文件,而a.php文件又引用了admin/config.php文件,这时候,a.php中就会报错,说找不到config/config.php文件。后来查了许多资料,有些说要定义一个单一入口什么的,对这个不太了解,后来找了一个折衷的办法,就是每个引用文件不在单纯的使用比如admin/config.php引用config/config.php文件时,一般的写法就是include('../config/config.php');  现在换成include(dirname(dirname(__FILE__)).'/config/config.php');

dirname(__FILE__)就是当前页的目录 ,再加个嵌套就是上一层,依次类推,不过目前不知道这样做有没有什么弊端,听一些网友说性能方面不如绝对路径。

 

5.关于图片上传。

这个上传也是从网上找的。经过一些小的修改,但是在保存图片路径的时候,有一个问题比较棘手,因为我的项目是分前后面的,上传图片目录一般是保存在mysite根目录下的,也就是和admin目录是同级,而upload.php文件是在admin/files/upload.php,那么这时候,要想上传到upload文件夹下上传路径为../../upload/ 而如果保存路径的话,那么数据库里就需要保存成../../upload/xx.jpg,而我的前台显示的相关文件是在根目录下的,和admin是同一级别,在引用文件的时候,直接是upload/xx.jpg就可以了,可是数据库里保存的却是../../upload/xx.jpg这时候不知道该怎么处理,后来想了一个折衷的办法,就是在数据库里只保存文件名,至于路径,在admin/config.php文件里定义一个常量为define(ADMIN_UPLOAD,'../../upload/');这个路径是后台专用的,前台想使用的话,就在confing/config.php里定义常量为define(UPLOAD,'upload/'); 就可以了。

 

6.最后就是关于图片显示,如图:

这个是做的最终效果,刚开始的时候,想使用ajax实现,因为刚学这个东西,一时半会儿也学不会,后来在网上找到了一种插件是prototype的一个lightbox插件,就是专门用显示图片的,感兴趣的可以到网上搜索下,这里就不再多说了。刚开始使用这个插件的时候,搞了半天没有弄成功,先简单介绍下这个插件的使用方法吧:

从网上下载之后,在页面的head里加入下面的几句代码,然后在稍微的加一些属性就可以了

<script type="text/javascript" src="../images/js/prototype.js"></script>
<script type="text/javascript" src="../images/js/scriptaculous.js?load=effects,builder"></script>
<script type="text/javascript" src="../images/js/lightbox.js"></script>

//上面是他的三个js文件,这个是基于prototype写的,所以在写的时候,注意顺序,必须是先引入prototype.js再引入其它,不然,可能会出错,
<link rel="stylesheet" href="../images/css/lightbox.css" type="text/css" media="screen" />

//下面的是一个css文件

 

然后在<a href="" rel="lightbox" title=""><img src="" /></a>

引入相关文件之后,然后在超连接的标签中设置rel="lightbox" 就可以了,而title就是显示上面的标题可以显示一些描述性的文字。

 

我刚设置好之后,没有效果,郁闷了半天,后来才发现,我少两个js文件,就是

<script type="text/javascript" src="../images/js/scriptaculous.js?load=effects,builder"></script>这一句里面的load后面的两个文件,effects.js和builder.js文件。后来从官网上下载了两个,设置了下,就成功了。

 

本来的图片上只是显示相关文字的,是不能有编辑功能的,后来想了一个办法,做成了上面的图,就是在绑定图片数据的时候,构造一个字符串,比如:

$title="<form method='post'><input type='text'  value='".$row[imgtitle]."' name='title'/><br /><input type='submit' value='编辑' name='submit' /><input type='hidden' name='img_id' value='".$row[id]."' /></form>";

而且,在titile="<?php echo $title ?>";   就可以了。本来是想用ajax的,后来看了一些资料,比较迷茫,先暂时使用这种方式吧,等学会了ajax,再慢慢改造。

 

效果出来以后,在浏览图片的时候,发现在输入N和P字母的时候,会响应上一张和下一张的事件,我想,应该是一个快捷键吧,后来在lightbox.js里把判断这两个键的代码注释掉,就OK了。

 

不过这个效果有两个不好的地方,

 第一就是,我后台使用的是iframset框架,所以这个遮罩只遮住了子窗口,并不能全部都遮住,所以,以后使用后台导航功能,尽量使用div+css的进行控制,不使用这种。

第二就是,在浏览图片的时候,按小键盘上的数字键3会自动的取消浏览,就相当于点那个关闭按钮一样,不知道为什么,我看了源代码,并没有做这个键的判断,不知道是不是bug。目前没有特别好的解决办法。

7.动态输出几行几列

这个在显示图片的时候根据读取数据库中的数据的条数,然后一行显示3张图片,进行显示,后来根据自己的改造,自己写了一个算法,先把模型贴出来吧。

<table>   
<tr>
<?php
$i=1;
while ($i<=20){
    if($i<3)
    {

       //如果小于3按单元格显示
        echo "<td>".$i."</td>";
    }

    if($i%3==0 ){

        //如果是3的倍数显示每行的最后一个单元格,然后输出<tr>标签
        echo "<td>".$i."</td>";
        echo"</tr><tr>";
       
         
    }
    if($i>3 && $i%3!=0){

        //如果大于3并且不是3的倍数
        echo "<td>".$i."</td>";
    }
   
    $i++;
}
?>
</tr>
<table>
不过有一个不好的地方就是如果数据的总记录数不是3的倍数,那么最后一行,可能就只有两个单元格了,这个怎么填充,暂时没有想法,以后补出来。

 

8.就是关于jquer的validate插件的一些使用,过程中也遇到过一些问题,暂时就先不多述了,就说这么多吧,感觉收获蛮大的。

 

接下来想使用thinkphp重新把这个网站再做一遍,之前使用的大部分是表格模板,控制起来,非常的困难,这次使用的时候,找一个div的模板。顺便学下这方面的知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值