做一个简单的功能既然做了这么久

要给柒仟这个网站case页面做一个上一页、下一页的导航按钮,本来感觉很简单的,硬是做到现在,主要是因为是在以前代码的基础上面修改的,于是各种漏洞百出,自己写的代码自己都忘记了。这告诉我一个道理,想要问题要一步到位,别抱着以后去优化的心态去敲代码。

情况是这样的,数据库有n条数据,每一条对应网站的一个case子页面,每个页面用数据的id来区分,一开始,我是这么做上一页和下一页链接的:获取当前页面的id,分别+1和-1就得到上一页下一页的链接,后来发现一个问题是,数据库中的记录是不连贯的,特么的请注意id是不连贯的,出现这样的情况是有时网站编辑会删掉一些不必要的记录,这样一来,比如删掉的记录的id为25,那么id为24的这个页面上的下一页按钮就是错误的,因为下一页应该是id为26或者27或者28等等的记录生成的页面,想到这,晚上要睡就开始改代码,本来思路很明了的,如下:

查询整个个表,得到最小的id和最大的id:

$link = $case->order('id ASC')->select();
$min_id = $link[0]['id'];
$max_id = $link[count($link)-1]['id'];

得到下一页的id,将当前id+1得到暂时的下一个id,循环判断下一个id是否能从数据库取得数据,如果不能,这让这个id和最大的id $max_id进行比较,如果比这个id小,则让id++并继续循环,如果大于最大的id,则跳出循环(说明当前页面已经是最新的页面),因为通过这个id查询不到记录,于是进入这个id的页面的话会跳到错误提示页面:

if ($data == null)
    $this->error("不存在该作品!", 'tp_case');
$next_id = I('get.id')+1;
while(($case->where('id="'.$next_id.'"')->getField('id')) == false)
{
    if ($next_id >= $max_id) {
        break;
    }
    $next_id++;
}
$this->assign('next_case', $next_id);

同理,上一页id方法类似,不必多说。最大的障碍是没有仔细看以前写的东西,还有就是刚开始忘记了要判断要查询的id是否在有效id区间。

更新

后来,发现“下一篇文章”这样的功能完全没有必要这么复杂,虽然上面的代码行的通,但是我相信一个有经验的程序员绝对不会用上面的代码来完成这样一个简单的功能,当时选择了用这个方案,是因为经验不够,文档看的少,如果多看看书,完全是可以写出下面这样一行就能搞定的代码的:

$nextId = $case->where("id > " . intval(I('get.id')))->limit(1)->getField('id');

php文件操作

下面是一些常用函数和代码块,可以配合使用,比如一键删除某个目录下的文件,或者批量创建文件(对于需要创建缩略图的应用很有必要),或者读取文件内容,以及客户各种撩骚的要求:

basename(string  $filename)

返回filename此文件的文件名部分;


dirname(string  $filename)

返回filename此文件所在的绝对路径部分,不包括结尾’/’;


unlink(string $filename),rmdir()

删除文件,删除文件夹


file_get_contents(string $path)

返回由$path指定的文件内容,可以是网络地址,如file_get_contents('http://www.baidu/.com');


dir(string  $directory)

打开$directory指定的路径,并返回一个对象。这个对象包含三个方法:read() , rewind() 以及 close()
若成功,则该函数返回一个目录流,否则返回 false 以及一个 error。可以通过在函数名前加上 "@" 来隐藏 error 的输出。下面演示用这个函数遍历一个目录下面所有的文件和文件夹:


$dir = dir(“./images”);

while (($file = $dir->read()) !== false) {
    if ($file !== '.' and $file != '..') {
    echo 'file: ' . $file . "\n";
    }
}

$dir->close();

opendir() 

opendir() 函数打开一个目录句柄,可由 closedir()readdir()rewinddir() 使用。
若成功,则该函数返回一个目录流,否则返回 false 以及一个 error。可以通过在函数名前加上 "@" 来隐藏 error 的输出。实现的功能与dir()类似,不过dir()返回的是一个对象。

$dir = opendir(“images”);
while (($file = readdir($dir)) !== false)
{
    if ($file !== '.' and $file != '..') {
    echo “filename: ” . $file . "\n";
    }
}

closedir($dir);
?>

害怕

突然害怕自己有一天会死掉,会承受巨大的痛苦,会面临和亲人永别,会承受巨大的心理压力。

必须承认,这都是不可避免会发生的。

最让人不能忍受的是对这一生抱有无比的愧疚。

我觉得我,不应该盲目的活着,

多锻炼,让自己长寿,远离疾病的烦扰;

多学习,丰富自己的知识;

多思考,知道该怎么赚钱;

多陪陪身边的人,两个人能走到一起很不容易。

 

php 二维数组的遍历

意识到我对二维数组还不是很了解,是因为我正在看这段代码:

foreach($users_list as $key => $val)
{
if (!$val['url_token'])
{
$users_list[$key]['url_token'] = urlencode($val['user_name']);
}
}

本代码来自wecenter,很明显,如果把数组$user_list当作一维数组是行不通的,因为$val[‘url_token’]会让你不知所措,

我们都知道,二维数组的形式如下:

$arr = array(

‘first-sub’ => array(‘url_token’=>’jake’,’id’=>’1991′),

‘second-sub’ => array(‘url_token’=>’jake’,’id’=>’1991′),

)

很明显,每个foreach循环都把第一行当作一个结果赋值给$val,而$val有时候恰好又是一个数组,所以就导致了有

$users_list[$key]['url_token']
这样的写法,即是得到$user_list数组的所有子数组索引为'url_token'的元素

选择自己的生活

这个世界很大,我只能做我能做到的。

 

我记得高中的时候写日记周记月记什么的都很勤快的,现在不了,数月上半年都不会写一写这些时间发生了什么有什么新的想法,果然是每个人都会变,虽然想法还是会千奇百怪,但是不会记下来了。有些事情你不去思考不去回忆就会好像真的没有发生过一样。

很惭愧长这么大了脾气还是不能好好的改改,过年在家有时会不知不觉跟老爸吵起来,吵完之后都想不起来是怎么吵起来的。老爸在外打工很辛苦的,我俩脾气都很奇怪,我还是希望自己将来能好好工作,让老爸安享晚年。

在大学差不多已经四年了,学到的也只是做网页的一些皮毛而已,相比名牌大学的大神感觉自己好水……别人的博客跟自己的博客比起来就是不一样,有的内容很充实,有的做设计,bootstrap,jQuery应用自如,做出的界面炫得靓丽而又低调,而我却还看不懂别人写的代码……也有想过做web前端或者html5 方面的工作,虽然对这方面比较感兴趣,但是有感觉这类工作不够“高端”,说直接点就是“逼格”不够高,跟知乎上面的“大神”前面一句架构后面一句并发比起来,感觉差太远。

对于未来,还是多做些实际的东西吧,背背单词赶紧把六级过了也好,学习一个php框架(目前是thinkphp)按照自己现在的水平半个月估计就够了,现在就算有学车还有大把的空余时间,弄的好下半年就可以去实习了。

异地恋很痛苦的,所以要好好学到东西,早点走出校园这个温室,要成长,就要肩负更多的责任,我的责任除了赡养父母,还有自己喜欢的和喜欢自己的人。。(●’◡’●)ノ)。。。

可以另外再学一下C#,微软的开发技术还是很niubility的,虽然用户体验上还不是很到位,但是Visual Studio的强大也是总所周知的,毕竟php是“世界上最好的语言”,所以

通过网址获取IP

import java.net.*;
import java.io.*;
public class InetAddressTest {
    public static void main(String args[])
    {
        try{
        InetAddress SunAddress  =  InetAddress.getByName("blog.yeskn.com");
        System.out.println(" 计算机名:"+SunAddress.getHostName());
        System.out.println(" IP地址:"+SunAddress.getHostAddress());
        }
        catch(Exception e)
        {
            System.out.println("ERROR:"+e);
        }
        System.out.println();

    }

}