标签 代码段 下的文章

PHP PDO详解攻略

在这里,有一篇名为php-使用-pdo-存取資料庫一存取步驟與常用功能介紹,感觉比大陆那些大网站们写的好多啦(* ̄︶ ̄)y y,1=^_^)y很好懂呢。

官方手册系列传送门

基本上去年在学PHP的时候也写过一篇,PHP 数据库抽象层PDO的使用

以上基本上是所有的参考文章,我们把PDO分为这样几步吧,这次我也是这么按照步骤做下来的:

  • 连接数据库
  • 编写SQL语句
  • 准备
  • 绑定相关值
  • 执行
  • (如果是查询)获取

- 阅读剩余部分 -

jQuery+PHP 大话ajax免刷新提交表单与切换页面

昨天折腾了一个晚上,今天在抽空折腾的东西,不记下来未免太浪费了,于是我决定花晚上把它写下来。

Ajax是目前最流行的优化用户体验的方法,但在过去,他往往代表着牺牲SEO以及抛弃浏览器后退前进功能,但是现在,已经不是这样了。

现在的Ajax完全可以做到兼备,所以你可以看到,基本上,在你提交表单之后再也不用跳转之后才告诉你你的输入是否正确,甚至在搜索时,一边输入字符,一边进行检索。

这些都是Ajax所带来的便利,但是鉴于我还没有前后端整站写过(只有使用前后框架[PHP MVC]以及前端的经历),所以对整个流程还不能说熟悉。这次,我们从后端写到前端,一点点来解刨Ajax的套路。

- 阅读剩余部分 -

CSS 使用after伪类清除浮动

今天早上去上班的时候还在纠结,设定before和after,可是他们的位置位于元素的哪里呢?兄弟元素?子元素?在firebug里看不到他们俩的位置,在FF自带的审查元素里倒是能看到,其实是位于该元素的子元素。

于是,以前,我们说过用一个div来清除浮动,现在我们可以把它省掉了——给父元素设定after。

如下:

element:after {
     clear: both;
     content: "";
     display: block;
}

Javascript 上帝说,我的对象想要默认值

找了下貌似这一篇没写,于是乎坑出了可能是一个月前的代码mark。

我们来看以下两段

        window.Option = {};

        Option.defaultProps = function(obj, defaults) {
            function isObject(obj) {
                return Object.prototype.toString.call(obj) === '[object Object]';
            }

            if (!isObject(obj)) {
                return defaults;
            }

            for (var key in defaults) {
                if (!defaults.hasOwnProperty(key)) {
                    continue;
                }

                var objValues = obj[key];
                var defaultValue = defaults[key];

                if (isObject(objValues)) {
                    obj[key] = Option.defaultProps(objValues, defaultValue);
                } else if (objValues === undefined) {
                    obj[key] = defaultValue;
                }
            }
            return obj;
        };

        function People() {};

        People.defaults = {
            name: 'Hi',
            job: 'Student',
            age: 19,
            friends: ['No One']
        };

        people1 = Option.defaultProps({
            name: 'Sky',
            age: 20
        }, People.defaults);

        people1.prototype = People.prototype;

        People.prototype = {
            constructor: People
        };

        People.prototype.sayName = function() {
            console.log(this.name);
        };

        People.prototype.sayName.call(people1);

        console.log(Object.getPrototypeOf(people1) == People.prototype);


        people2 = new People();

        console.log(people2.prototype);

这一种类型似乎略繁琐,但他确实实现了默认值,当然,相比之下实在是不够优秀,有各种问题,包括constructor之类的。这里我们之所以不直接定义函数,而是先用对象,再里面再加一个方法,是因为javascript没有命名空间(namespace)的概念,万一重名了=A=~

        function Person(name, age, job, friends) {
            this.name = name || "hi";
            this.age = age || 19;
            this.job = job || "Student";
            this.friends = friends || "No one";
        }

相比之下,我们来看这样一段= =唔,很明显他更加常用。

PHP Maximum execution time of 30 seconds exceeded解决方案

在安装drupal的时候,由于需要大量建立表,于是乎Loading的时候超过30s,每次都跪,发现报错是在database.incLine 2171,在前面加上set_time_limit()函数。

set_time_limit(0)表示不设置超时时间。

也可以修改php.ini:
max_execution_time = 300
秒可以设置更大,然后重起服务

jQuery prop大法好

在修改Hi GPA的时候需要增加一个全选用户的功能,结果被坑惨了。

首先,最终代码是这么写的:

var text = $('#select-all-student').html();
if (text == '全选') {
    $('input[name="studentNumber"]').prop('checked', true);
    $('#select-all-student').html('取消全选')
} else {
    $('input[name="studentNumber"]').prop('checked', false);
    $('#select-all-student').html('全选');
}

这里集成了一个全选和反选的功能,可以选中所有name为studentNumber的checkbox。

- 阅读剩余部分 -