bootstrap激活tooltip
bootstrap官方帮助说:
出于性能方面的考虑,工具提示和弹框组件的data属性api是选择性加入的,也就是说你必须自己初始化他们。
初始化 在需要使用tooltip的元素里加上:
onMouseOver="$(this).tooltip('show')"
不然光靠进入js还是没办法的。然后设置上data-toggle="tooltip"
,设置好title
属性,就OK了
bootstrap官方帮助说:
出于性能方面的考虑,工具提示和弹框组件的data属性api是选择性加入的,也就是说你必须自己初始化他们。
初始化 在需要使用tooltip的元素里加上:
onMouseOver="$(this).tooltip('show')"
不然光靠进入js还是没办法的。然后设置上data-toggle="tooltip"
,设置好title
属性,就OK了
Cookie和Session是实现用户登录的最关键的道具,目前主要用的貌似还是Session,但大部分时候Session还是靠Cookie来传值的。
设置Cookie:
setcookie('username', 'skyao', time()+60*60*60+24*7);
文件管理系统懒得写完了=A=,反正差不多一个意思。
思路和上一个版本的connect
然后执行差不多,不过安全性更高。
首先我们连接数据库:
$dbh = new PDO('mysql:dbname=filesystem;host=localhost', 'root', '');
header()
真的是个好东西,下载的本体其实就是把路径给出来,未知格式浏览器无解自然会弹出下载框,已知格式怎么破呢?比如html
,这不就成了直接打开了吗?
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Length: '.filesize($filename));
readfile($filename);
加上header()
之后读取文件,收工。
PHP文件基本操作函数有:unlink()
删除文件rename()
重命名文件或目录copy()
复制文件
另外还有文件夹操作mkdir()
建立文件夹rmdir()
删除空文件夹(非空会报错)
比如rename()
手册上会这么写:bool rename ( string $oldname , string $newname [, resource $context ] )
嗯 我个人觉得有点坑,其实与其说name
不如说带上路径的文件/目录名好了,它不仅是要name,还要route啊!!
die()
其实也就是exit()
,可以输出内容并且结束脚本,否则PHP还是会继续向下运行,除非是致命错误:
这样我们就不需要再设变量然后嵌套if来达成如果这里报错了。
写成die('错误')
,那么就会在运行到这行结束脚本并且输出错误
if (strpos($route, '..') !== FALSE || strpos($route, 'upload') === FALSE) {
echo '路径非法';
//$problem = TRUE;
die();
}
比如这个 本来想用$problem嵌套之后判断在运行之后的代码,但用了die()之后就直接搞定了,如果是有报错的部分,也可以与@
配合使用(@
能忽略报错提示)
事实上,这不应该属于PHP的部分而更应该说是HTTP协议(?)所以说我还得去补一补协议的说……
传值分为GET和POST,POST相对比较保险,因为内容不可见的,想传什么也可以加个hidden
传过去(唔,如果有人篡改表单会怎么样),GET的实现比较容易,网址后面加个?xxx=yyy,那么我们就能用$_GET['xxx']
这个超全局变量获取到yyy
了,可是更不好,万一有人改了这个就很混乱了=A=
所以光学PHP还是不大够啊,目前我的大多数内容都是用GET来传值的=_=因为GET更容易,POST我的能力内只有提交表单才能POST一下=A=
如果要限制输出1行 怎么办?其实用LIMIT
就能搞定了
用法大概酱紫:
SELECT * FROM table LIMIT 1
那么如果要偏移,也就是取第三行呢:(offset是第一个参数,limit是第二个)
SELECT * FROM table LIMIT 2, 1
当然还找到了一个更酷的用法:
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.
通过limit和offset的连用就能实现分页功能了
不扩展的阅读:http://www.phpweblog.net/peiyinjin/archive/2008/04/15/3199.html
这是我初期的一大问题,两个表之间怎么建立关联,实际上,有个东西叫做JOIN,然后还有INNER JOIN,RIGHT JOIN,LEFT JOIN
我基本上用的都是LEFT JOIN,那么RIGHT JOIN大家懂得=A=其他我也没用过
不同的参考:
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
关于这点的详细阅读:http://php.net/manual/zh/language.types.array.php
自 5.4 起可以使用短数组定义语法,用[]
替代array()
。
我们必须在意的地方是:从5.4开始,不注意就死了,因为现在主流虚拟主机用的还是5.3之类的,版本不够新,导致所有的数组定义方式都得改成老版,这神坑害我把整个项目的array都重写了=A=,虽然短数组定义比起array()
好,但是兼容性问题也不可以忽略,尤其是=A=当你买不起VPS或者这货要给好多人用的时候。