select trunc(sysdate,'hh24')+(to_char(sysdate,'mi')-mod(to_char(sysdate,'mi'),5))/60/24 from dual;
2011-11-22 10:00:00
此时为:2011-11-22 10:04:00
向
DB类<?php
header('Content-Type:text/html; charset=utf-8');
basename($_SERVER['PHP_SELF'])=='mysql.inc.php'&&header;
('Location:http://'.$_SERVER['HTTP_HOST']); //禁止直接访问本页
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
※※※※※※※※
【文件名】: mysql.inc.php
【作 用】: mysql
数据库
操作类
【作 者】: Riyan
【版 本】: version 2.0
【修改日期】: 2010/02/11
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
※※※※※※※※
class mysql{
private $host; //
数据库
主机
private $user; //
数据库
用户名
private $pass; //
数据库
密码
private $data; //
数据库
名
private $conn; //
数据库
连接标识
private $sql; // sql语句
private $code; //
数据库
编码,GBK,UTF8,GB2312
private $result; // 执行query命令的结果数据集
private $errLog=true; // 是否开启错误日志,默认开启
private $showErr=true; // 显示所有错误,具有安全隐患,默认开启
private $pageNo=1; //
当前
页
private $pageAll=1; // 总页数
private $rsAll=0; // 总记录
private $pageSize=10; // 每页显示记录条数
/******************************************************************
-- 函数名:__construct($host,$user,$pass,$data,$code,$conn)
-- 作 用:构造函数
-- 参 数:$host
数据库
主机地址(必填)
$user
数据库
用户名(必填)
$pass
数据库
密码(必填)
$data
数据库
名(必填)
$conn
数据库
连接标识(必填)
$code
数据库
编码(必填)
-- 返回值:无
-- 实 例:无
*******************************************************************/
public function __construct($host,$user,$pass,$data,$code='utf8',
$conn='conn'){
$this->host=$host;
$this->user=$user;
$this->pass=$pass;
$this->data=$data;
$this->conn=$conn;
$this->code=$code;
$this->connect();
public function __get($name){return $this->$name;}
public function __set($name,$value){$this->$name=$value;}
//
数据库
连接
private function connect(){
if ($this->conn=='pconn') $this->conn=mysql_pconnect($this-
>host,$this->user,$this->pass); // 永久链接
else $this->conn=mysql_connect($this->host,$this->user,$this-
>pass); // 临时链接
if (!$this->conn) $this->show_error('无法连接服务器');
$this->select_db($this->data);
$this->query('SET NAMES '.$this->code);
$this->query("SET CHARACTER_SET_CLIENT='{$this->code}'");
$this->query("SET CHARACTER_SET_RESULTS='{$this->code}'");
//
数据库
选择
public function select_db($data){
$result=mysql_select_db($data,$this->conn);
if (!$result) $this->show_error('无法连接
数据库
'.$data);
return $result;
/******************************************************************
-- 函数名:get_info($num)
-- 作 用:取得 MySQL 服务器信息
-- 参 数:$num 信息值(选填)
-- 返回值:字符串
-- 实 例:无
*******************************************************************/
public function get_info($num){
switch ($num){
case 1:
return mysql_get_server_info(); // 取得 MySQL 服务器信息
break;
case 2:
return mysql_get_host_info(); // 取得 MySQL 主机信息
break;
case 3:
return mysql_get_proto_info(); // 取得 MySQL 协议信息
break;
default:
return mysql_get_client_info(); // 取得 MySQL 客户端信息
/******************************************************************
-- 函数名:query($sql)
-- 作 用:
数据库
执行语句,可执行查询添加修改删除等任何sql语句
-- 参 数:$sql sql语句(必填)
-- 返回值:布尔
-- 实 例:无
*******************************************************************/
public function query($sql){
if (empty($sql)) $this->show_error('SQL语句为空');
$this->sql=preg_replace('/ {2,}/',' ',trim($sql));
$this->result=mysql_query($this->sql,$this->conn);
if (!$this->result) $this->show_error('SQL语句有误',true);
return $this->result;
/******************************************************************
-- 函数名:create_db($data)
-- 作 用:创建添加新的
数据库
-- 参 数:$data
数据库
名称(必填)
-- 返回值:字符串
-- 实 例:无
*******************************************************************/
public function create_database($data=''){$this->query("CREATE
DATABASE {$data}");}
// 查询服务器所有
数据库
public function show_database(){
$this->query('SHOW DATABASES');
$db=array();
while ($row=$this->fetch_array()) $db[]=$row['Database'];
return $db;
// 查询
数据库
下所有的表
public function show_tables($data=''){
if (!empty($data)) $db=' FROM '.$data;
$this->query('SHOW TABLES'.$data);
$tables=array();
while ($row=$this->fetch_row()) $tables[]=$row[0];
return $tables;
/******************************************************************
-- 函数名:copy_tables($tb1,$tb2,$where)
-- 作 用:复制表
-- 参 数:$tb1 新表名(必填)
$tb2 待复制表的表名(必填)
$Condition 复制条件(选填)
-- 返回值:布尔
-- 实 例:无
*******************************************************************/
public function copy_tables($tb1,$tb2,$Condition=''){$this->query
("SELECT * INTO `{$tb1}` FROM `{$tb2}` {$Condition}");}
/******************************************************************
-- 函数名:Get($Table,$Fileds,$Condition,$Rows)
-- 作 用:查询数据
-- 参 数:$Table 表名(必填)
$Fileds 字段名,默认为所有(选填)
$Condition 查询条件(选填)
$Rows 待查询记录条数,为0表示不限制(选填)
-- 返回值:布尔
-- 实 例:$DB->Get('mydb','user,password','order by id desc',10)
*******************************************************************/
public function Get($Table,$Fileds='*',$Condition='',$Rows=0){
if (!$Fileds) $Fileds='*';
if ($Rows>0) $Condition.=" LIMIT 0,{$Rows}";
$sql="SELECT {$Fileds} FROM `{$Table}` {$Condition}";
return $this->query($sql);
// 只查询一条记录
public function GetRs($Table,$Fileds='*',$Condition=''){
if (!$Fileds) $Fileds='*';
$this->query("SELECT {$Fileds} FROM `{$Table}` {$Condition}
LIMIT 0,1");
return $this->fetch_array();
/******************************************************************
-- 函数名:Add($Table,$Data)
-- 作 用:添加数据
-- 参 数:$Table 表名(必填)
$Data 待添加数据,可以为数组(必填)
-- 返回值:布尔
-- 实 例:$DB->Add('mydb',array
('user'=>'admin','password'=>'123456','age'=>'18') 数组类型
$DB->Add('mydb','user=admin,password=123456,age=18') 字符
*******************************************************************/
public function Add($Table,$Data){
if (!is_array($Data)){
$arr=explode(',',$Data);
$Data=array();
foreach ($arr as $val){
list($key,$val)=explode('=',$val);
if (!$val) $val='';
$Data[$key]=$val;
$Fileds='`'.implode('`,`',array_keys($Data)).'`';
$Value="'".implode("','",array_values($Data))."'";
return $this->query("INSERT INTO `{$Table}` ({$Fileds}) VALUES
({$Value})");
/******************************************************************
-- 函数名:Set($Table,$Data,$Condition,$unQuot)
-- 作 用:更改数据
-- 参 数:$Table 表名(必填)
$Data 待更改数据,可以为数组(必填)
$Condition 更改条件(选填)
$unQuot 不需要加引号的字段,用于字段的加减运算等情况,多个
字段用,分隔或者写入一个数组(选填)
-- 返回值:布尔
-- 实 例:$DB->Set('mydb',array
('user'=>'admin','password'=>'123456','WHERE id=1') 数组类型
$DB->Set('mydb',"user='admin',password='123456'",'WHERE
id=1') 字符串类型
*******************************************************************/
public function Set($Table,$Data,$Condition='',$unQuot=''){
if (is_array($Data)){
if (!is_array($unQuot)) $unQuot=explode(',',$unQuot);
foreach ($Data as $key=>$val){
$arr[]=$key.'='.(in_array($key,$unQuot)?$val:"'$val'");
$Value=implode(',',$arr);
}else $Value=$Data;
return $this->query("UPDATE `{$Table}` SET {$Value}
{$Condition}");
/******************************************************************
-- 函数名:Del($Table,$Condition)
-- 作 用:删除数据
-- 参 数:$Table 表名(必填)
$Condition 删除条件(选填)
-- 返回值:布尔
-- 实 例:$DB->Del('mydb','id=1')
*******************************************************************/
public function Del($Table,$Condition=''){return $this->query
("DELETE FROM `{$Table}`".($Condition?" WHERE {$Condition}":''));}
// 取得结果数据
public function result($result=''){
if (empty($result)) $result=$this->result;
if ($result==null) $this->show_error('未获取到查询结果',true);
return mysql_result($result);
/******************************************************************
-- 函数名:fetch_array($Table,$Condition)
-- 作 用:根据从结果集取得的行生成关联数组
-- 参 数:$result 结果集(选填)
$type 数组类型,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和
MYSQL_BOTH(选填)
-- 返回值:布尔
-- 实 例:$DB->Del('mydb','id=1')
*******************************************************************/
public function fetch_array($result='',$type=MYSQL_BOTH){
if (empty($result)) $result=$this->result;
if (!$result) $this->show_error('未获取到查询结果',true);
return mysql_fetch_array($result,$type);
// 获取关联数组,使用$row['字段名']
public function fetch_assoc($result=''){
if (empty($result)) $result=$this->result;
if (!$result) $this->show_error('未获取到查询结果',true);
return mysql_fetch_assoc($result);
// 获取数字索引数组,使用$row[0],$row[1],$row[2]
public function fetch_row($result=''){
if (empty($result)) $result=$this->result;
if (!$result) $this->show_error('未获取到查询结果',true);
return mysql_fetch_row($result);
// 获取对象数组,使用$row->content
public function fetch_obj($result=''){
if (empty($result)) $result=$this->result;
if (!$result) $this->show_error('未获取到查询结果',true);
return mysql_fetch_object($result);
// 取得上一步 INSERT 操作产生的 ID
public function insert_id(){return mysql_insert_id();}
// 指向确定的一条数据记录
public function data_seek($id){
if ($id>0) $id=$id-1;
if (!mysql_data_seek($this->result,$id)) $this->show_error('指定
的数据为空');
return $this->result;
/******************************************************************
函数名:num_fields($result)
作 用:查询字段数量
参 数:$Table
数据库
表名(必填)
返回值:字符串
实 例:$DB->num_fields("mydb")
*******************************************************************/
public function num_fields($result=''){
if (empty($result)) $result=$this->result;
if (!$result) $this->show_error('未获取到查询结果',true);
return mysql_num_fields($result);
// 根据select查询结果计算结果集条数
public function num_rows($result=''){
if (empty($result)) $result=$this->result;
$rows=mysql_num_rows($result);
if ($result==null){
$rows=0;
$this->show_error('未获取到查询结果',true);
return $rows>0?$rows:0;
// 根据insert,update,delete执行结果取得影响行数
public function affected_rows(){return mysql_affected_rows();}
// 获取地址栏参数
public function getQuery($unset=''){ //$unset表示不需要获取的参数,
多个参数请用,分隔(例如:getQuery('page,sort'))
if (!empty($unset)){
$arr=explode(',',$unset);
foreach ($arr as $val) unset($_GET[$val]);
foreach ($_GET as $key=>$val) $list[]=$key.'='.urlencode($val);
return is_array($list)?implode('&',$list):'';
/******************************************************************
函数名:getPage($Table,$Fileds,$Condition,$pageSize)
作 用:获取分页信息
参 数:$Table 表名(必填)
$Fileds 字段名,默认所有字段(选填)
$Condition 查询条件(选填)
$pageSize 每页显示记录条数,默认10条(选填)
返回值:字符串
实 例:无
*******************************************************************/
public function getPage($Table,$Fileds='*',$Condition='',
$pageSize=10){
if (intval($pageSize)>0){$this->pageSize=intval($pageSize);}
if (isset($_GET['page']) && intval($_GET['page'])){$this-
>pageNo=intval($_GET['page']);}
if (empty($Fileds)){$Fileds='*';}
$sql="SELECT * FROM `{$Table}` {$Condition}";
$this->query($sql);
$this->rsAll=$this->num_rows();
if ($this->rsAll>0){
$this->pageAll=ceil($this->rsAll/$this->pageSize);
if ($this->pageNo<1){$this->pageNo=1;}
if ($this->pageNo>$this->pageAll){$this->pageNo=$this-
>pageAll;}
$sql="SELECT {$Fileds} FROM `{$Table}` {$Condition}".$this-
>limit(true);
$this->query($sql);
return $this->rsAll;
// 构造分页limit语句,和getPage()函数搭配使用
public function limit($str=false){
$n=($this->pageNo-1)*$this->pageSize;
return $str?' LIMIT '.$n.','.$this->pageSize:$n;
// 显示分页,必须和getPage()函数搭配使用
public function showPage($number=true){
$pageBar='';
if ($this->pageAll>1){
$pageBar.='<ul class="page">'.chr(10);
$url=$this->getQuery('page');
$url=empty($url)?'?page=':'?'.$url.'&page;=';
if ($this->pageNo>1){
$pageBar.='<li><a href="'.$url.'1">首页</a></li>'.chr
(10);
$pageBar.='<li><a >pageNo-1).'">上页
</a></li>'.chr(10);
}else{
$pageBar.='<li class="stop"><span>首页</span></li>'.chr
(10);
$pageBar.='<li class="stop"><span>上页</span></li>'.chr
(10);
if ($number){
$arr=array();
if ($this->pageAll<6){
for ($i=0;$i<$this->pageAll;$i++) $arr[]=$i+1;
}else{
if ($this->pageNo<3)
$arr=array(1,2,3,4,5);
elseif ($this->pageNo<=$this->pageAll&&$this-
>pageNo>($this->pageAll-3))
for ($i=1;$i<6;$i++) $arr[]=$this->pageAll-5+$i;
for ($i=1;$i<6;$i++) $arr[]=$this->pageNo-3+$i;
foreach ($arr as $val){
if ($val==$this->pageNo) $pageBar.='<li
class="curr"><span>'.$val.'</span></li>'.chr(10);
else $pageBar.='<li><a href="'.$url.$val.'">'.
$val.'</a></li>'.chr(10);
if ($this->pageNo<$this->pageAll){
$pageBar.='<li><a >pageNo+1).'">下页
</a>'.chr(10);
$pageBar.='<li><a >pageAll.'">尾页
</a></li>'.chr(10);
}else{
$pageBar.='<li class="stop"><span>下页</span></li>'.chr
(10);
$pageBar.='<li class="stop"><span>尾页</span></li>'.chr
(10);
$pageBar.='<li class="stop"><span>';
$pageBar.="页次:{$this->pageNo}/{$this->pageAll} {$this-
>pageSize}条/页 总记录:{$this->rsAll} 转到:";
$pageBar.="<input id=\"page\" value=\"{$this->pageNo}\"
type=\"text\" onblur=\"goPage('{$url}',{$this->pageAll});\" />";
$pageBar.='</span></li></ul>'.chr(10);
echo $pageBar;
// 获得客户端真实的IP地址
public function getip(){
if ($_SERVER['HTTP_X_FORWARDED_FOR']) return $_SERVER
['HTTP_X_FORWARDED_FOR'];
elseif ($_SERVER['HTTP_CLIENT_IP']) return $_SERVER
['HTTP_CLIENT_IP'];
elseif ($_SERVER['REMOTE_ADDR']) return $_SERVER['REMOTE_ADDR'];
elseif (getenv('HTTP_X_FORWARDED_FOR')) return getenv
('HTTP_X_FORWARDED_FOR');
elseif (getenv('HTTP_CLIENT_IP')) return getenv
('HTTP_CLIENT_IP');
elseif (getenv('REMOTE_ADDR')) return getenv('REMOTE_ADDR');
else return '';
/******************************************************************
-- 函数名:show_error($message,$sql)
-- 作 用:输出显示错误信息
-- 参 数:$msg 错误信息(必填)
$sql 显示错误的SQL语句,在SQL语句错误时使用(选填)
-- 返回值:字符串
-- 实 例:无
*******************************************************************/
public function show_error($msg='',$sql=false){
$err='['.mysql_errno().']'.mysql_error();
if ($sql) $sql='SQL语句:'.$this->sql;
if ($this->errLog){
$dirs='error/'; //设置错误日志保存目录
$fileName=date('Y-m-d').'.log';
$filePath=$dirs.$fileName;
if (!is_dir($dirs)){
$dirs=explode('/',$dirs);
$temp='';
foreach($dirs as $dir){
$temp.=$dir.'/';
if (!is_dir($temp)){
mkdir($temp,0777) or die('__无法建立目录'.
$temp.',自动取消记录错误信息');
$filePath=$temp.$fileName;
$text="错误事件:".$msg."\r\n错误原因:".$err."\r\n".($sql?
$sql."\r\n":'')."客户端IP:".$this->getip()."\r\n记录
时间
:".date('Y-m-d
H:i:s')."\r\n\r\n";
$log='错误日志:__'.(error_log($text,3,$filePath)?'此错误信
息已被自动记录到日志'.$fileName:'写入错误信息到日志失败');
if ($this->showErr){
echo '
<fieldset class="errlog">
<legend>错误信息提示</legend>
<label class="tip">错误事件:'.$err.'</label>
<label class="msg">错误原因:'.$msg.'</label>
<label class="sql">'.$sql.'</label>
<label class="log">'.$log.'</label>
</fieldset>';
exit();
/******************************************************************
-- 函数名:drop($table)
-- 作 用:删除表(请慎用,无法恢复)
-- 参 数:$table 要删除的表名,默认为所有(选填)
-- 返回值:无
-- 实 例:$DB->drop('mydb')
*******************************************************************/
public function drop($table){
if ($table){
$this->query("DROP TABLE IF EXISTS `{$table}`");
}else{
$rst=$this->query('SHOW TABLES');
while ($row=$this->fetch_array()){
$this->query("DROP TABLE IF EXISTS `{$row[0]}`");
/******************************************************************
-- 函数名:makeSql($table)
-- 作 用:从数据表读取信息并生成SQL语句
-- 参 数:$table 待读取的表名(必填)
-- 返回值:字符串
-- 实 例:无
*******************************************************************/
public function makeSql($table){
$result=$this->query("SHOW CREATE TABLE `{$table}`");
$row=$this->fetch_row($result);
$sqlStr='';
if ($row){
$sqlStr.="--
---------------------------------------------------------------\r\n";
$sqlStr.="-- Table structure for `{$table}`\r\n";
$sqlStr.="--
---------------------------------------------------------------\r\n";
$sqlStr.="DROP TABLE IF EXISTS `{$table}`;\r\n{$row[1]};\r
$this->Get($table);
$fields=$this->num_fields();
if ($this->num_rows()>0){
$sqlStr.="\r\n";
$sqlStr.="--
---------------------------------------------------------------\r\n";
$sqlStr.="-- Records of `{$table}`\r\n";
$sqlStr.="--
---------------------------------------------------------------\r\n";
while ($row=$this->fetch_row()){
$comma='';
$sqlStr.="INSERT INTO `{$table}` VALUES (";
for($i=0;$i<$fields;$i++){
$sqlStr.=$comma."'".mysql_escape_string($row
[$i])."'";
$comma=',';
$sqlStr.=");\r\n";
$sqlStr.="\r\n";
return $sqlStr;
/******************************************************************
-- 函数名:readSql($filePath)
-- 作 用:读取SQL文件并过滤注释
-- 参 数:$filePath SQL文件路径(必填)
-- 返回值:字符串/布尔/数组
-- 实 例:无
*******************************************************************/
public function readSql($filePath){
if (!file_exists($filePath)) return false;
$sql=file_get_contents($filePath);
if (empty($sql)) return '';
$sql=preg_replace('/(\/\*(.*)\*\/)/s','',$sql); //过滤批量注释
$sql=preg_replace('/(--.*)|[\f\n\r\t\v]*/','',$sql); //过滤单行
注释与回车换行符
$sql=preg_replace('/ {2,}/',' ',$sql); //将两个以上的连续空格替
换为一个,可以省略这一步
$arr=explode(';',$sql);
$sql=array();
foreach ($arr as $str){
$str=trim($str);
if (!empty($str)) $sql[]=$str;
return $sql;
/******************************************************************
-- 函数名:saveSql($sqlPath,$table)
-- 作 用:将
当前
数据库
信息保存为SQL文件
-- 参 数:$sqlPath SQL文件保存路径,如果为空则自动以
当前
日期为文件
名并保存到
当前
目录(选填)
$table 待保存的表名,为空着表示保存所有信息(选填)
-- 返回值:字符串
-- 实 例:$DB->saveSql('../mydb.sql');
*******************************************************************/
public function saveSql($sqlPath='',$table=''){
if (empty($table)){
$result=$this->query('SHOW TABLES');
while ($arr=$this->fetch_row($result)){
$str=$this->makeSql($arr[0]);
if (!empty($str)) $sql.=$str;
$text="/***************************************************************
\\r\\n";
$text.="-- Database: $this->data\r\n";
$text.="-- Date Created: ".date('Y-m-d H:i:s')."\r\n";
$text.="***************************************************************/
\r\n\r\n";
}else{
$text='';
$sql=$this->makeSql($table);
if (empty($sql)) return false;
$text.=$sql;
$dir=dirname($sqlPath);
$file=basename($sqlPath);
if (empty($file)) $file=date('YmdHis').'.sql';
$sqlPath=$dir.'/'.$file;
if (!empty($dir)&&!is_dir($dir)){
$path=explode('/',$dir);
$temp='';
foreach ($path as $dir){
$temp.=$dir.'/';
if (!is_dir($temp)){
if (!mkdir($temp,0777)) return false;
$sqlPath=$temp.$file;
$link=fopen($sqlPath,'w+');
if (!is_writable($sqlPath)) return false;
return fwrite($link,$text);
fclose($link);
/******************************************************************
-- 函数名:loadSql($filePath)
-- 作 用:从SQL文件导入信息到
数据库
-- 参 数:$filePath SQL文件路径(必填)
-- 返回值:字符串
-- 实 例:无
*******************************************************************/
public function loadSql($filePath){
$val=$this->readSql($filePath);
if ($val==false) $this->show_error($filePath.'不存在');
elseif (empty($val)) $this->show_error($filePath.'中无有效数
else{
$errList='';
foreach ($val as $sql){
$result=mysql_query($sql);
if (!$result) $errList.='执行语句'.$sql.'失败<br />';
return $errList;
return false;
// 释放结果集
public function free(){mysql_free_result($this->result);}
// 关闭
数据库
public function close(){mysql_close($this->conn);}
// 析构函数,自动关闭
数据库
,垃圾回收机制
public function __destruct(){
$this->free();
$this->close();
目录使用urlib发送请求处理异常解析链接分析Robots协议使用requests基本用法高级用法
爬虫首先是需要获取某个网页的源代码,从而才能获取你想要的信息。
当主机向网站服务器发送一个请求,服务器返回的就是网页的源代码。同时在网页中鼠标右击 —>查看网页源代码 即可看见
当前
网页中的源代码。但是,并不是说页面呈现给你什么内容,源代码里就会出现什么内容。部分内容是采用JS或者PHP等服务器脚本动态从
数据库
中获取并渲染到页面上的,所以,经常在源代码中看到本来应该是数据的地方是一个JS代码或者只有一个
块。当然,可以通过其他方法获取源代码。
下面介绍几种获取网页源代码的方式
使用urlib
7.5.2 行的边框颜色——bordercolor 135
7.5.3 行的背景颜色——bgcolor、background 136
7.5.4 行文字的水平对齐方式——align 137
7.5.5 行文字的垂直对齐方式——valign 139
7.5.6 表格标题的垂直对齐方式——align 140
7.6 调整单元格属性 141
7.6.1 单元格大小——width、height 141
7.6.2 单元格水平跨度——colspan 142
7.6.3 单元格垂直跨度——rowspan 143
7.6.4 单元格对齐方式——align、valign 144
7.6.5 单元格的背景色 146
7.6.6 单元格的边框颜色——bordercolor 147
7.6.7 单元格的亮边框——bordercolorlight 148
7.6.8 单元格的暗边框——bordercolordark 150
7.6.9 单元格的背景图像——background 151
7.7 表格的结构 152
7.7.1 表格的表头标记——thead 153
7.7.2 表格的表主体标记——tbody 154
7.7.3 表格的表尾标记——tfoot 156
7.8 表格的嵌套 157
7.9 小结 159
7.10 习题 159
第8章 层标记——div 161
教学录像:33
分钟
8.1 层 162
8.1.1 层的分类 162
8.1.2 定义数据块 162
8.2 <div>标签 163
8.2.1 <div>标签的简介 163
8.2.2 <div>标签的属性 164
8.2.3 <span>标签与<div>标签 170
8.3 <iframe>标签 172
8.3.1 <iframe>标签的简介 172
8.3.2 <iframe>标签的属性 172
8.4 <layer>标签和<ilayer>标签 174
8.4.1 标签层的使用 175
8.4.2 <layer>标签和<ilayer>标签的区别 176
8.5 应用div制作下拉菜单导航条 176
8.6 小结 179
8.7 习题 179
第9章 编辑表单 181
教学录像:26
分钟
9.1 使用表单标签——form 182
9.1.1 处理动作——action 182
9.1.2 表单名称——name 183
9.1.3 传送方法——method 183
9.1.4 编码方式——enctype 184
9.1.5 目标显示方式——target 185
9.2 添加控件 185
9.3 输入类的控件 186
9.3.1 文字字段——text 186
9.3.2 密码域——password 187
9.3.3 单选按钮——radio 188
9.3.4 复选框——checkbox 189
9.3.5 普通按钮——button 190
9.3.6 提交按钮——submit 191
9.3.7 重置按钮——reset 192
9.3.8 图像域——image 193
9.3.9 隐藏域——hidden 195
9.3.10 文件域——file 195
9.4 列表/菜单标记 197
9.5 文本域标记——textarea 198
9.6 id标记 199
9.7 小结 200
9.8 习题 200
第10章 多媒体页面 202
视频讲解:18
分钟
10.1 设置滚动文字 203
10.1.1 滚动文字标签——marquee 203
10.1.2 滚动方向属性——direction 203
10.1.3 滚动方式属性——behavior 204
10.1.4 滚动速度属性——scrollamount 205
10.1.5 滚动延迟属性——scrolldelay 206
10.1.6 滚动循环属性——loop 207
10.1.7 滚动范围属性——width、height 208
10.1.8 滚动背景颜色属性——bgcolor 209
10.1.9 滚动空间属性——hspace、vspace 209
10.2 添加背景音乐 211
10.2.1 设置背景音乐——bgsound 211
10.2.2 设置循环播放次数——loop 212
10.3 添加多媒体文件 213
10.3.1 添加多媒体文件标记——embed 213
10.3.2 设置自动运行——autostart 214
10.3.3 设置媒体文件的循环播放——loop 215
10.3.4 隐藏面板——hidden 216
10.3.5 添加其他类型的媒体文件 217
10.4 小结 217
10.5 习题 218
第2篇 HTML 5高级应用
第11章 HTML 5的新特性 221
视频讲解:6
分钟
11.1 谁在开发HTML 5 222
11.2 HTML 5的新认识 222
11.2.1 兼容性 222
11.2.2 实用性和用户优先 222
11.2.3 化繁为简 223
11.3 无插件范式 223
11.4 HTML 5的新特性 224
11.5 小结 224
第12章 HTML 5与HTML 4的区别 225
视频讲解:51
分钟
12.1 语法的改变 226
12.1.1 HTML 5的语法变化 226
12.1.2 HTML 5中的标记方法 226
12.1.3 HTML 5语法中的3个要点 227
12.1.4 标签实例 228
12.2 新增的元素和废除的元素 228
12.2.1 新增的结构元素 228
12.2.2 新增的块级的语义元素 230
12.2.3 新增的行内的语义元素 231
12.2.4 新增的嵌入多媒体元素与交互性元素 231
12.2.5 新增的input元素的类型 232
12.2.6 废除的元素 233
12.3 新增的属性和废除的属性 234
12.3.1 新增的属性 234
12.3.2 废除的属性 236
12.4 全局属性 237
12.4.1 contentEditable属性 237
12.4.2 designMode属性 238
12.4.3 hidden属性 239
12.4.4 spellcheck属性 239
12.4.5 tabindex属性 240
12.5 小结 240
12.6 习题 240
第13章 HTML 5的结构 242
视频讲解:20
分钟
13.1 新增的主体结构元素 243
13.1.1 article元素 243
13.1.2 section元素 245
13.1.3 nav元素 247
13.1.4 aside元素 248
13.1.5 time元素 250
13.1.6 pubdate属性 250
13.2 新增的非主体结构元素 251
13.2.1 header元素 251
13.2.2 hgroup元素 252
13.2.3 footer元素 252
13.2.4 address元素 253
13.3 小结 253
13.4 习题 254
第14章 HTML 5中的表单 255
视频讲解:50
分钟
14.1 新增表单元素与属性 256
14.1.1 新增的属性 256
14.1.2 增加与改良的input元素的种类 259
14.1.3 output元素的添加 264
14.1.4 应用新增元素制作注册表单 264
14.2 对表单的验证 266
14.2.1 自动验证 266
14.2.2 checkValidity显式验证法 267
14.2.3 避免验证 268
14.2.4 使用setCustomValidity方法自定义
错误信息 268
14.3 增加的页面元素 269
14.3.1 新增的figure元素 270
14.3.2 新增的details元素 271
14.3.3 新增的mark元素 272
14.3.4 新增的progress元素 274
14.3.5 新增的meter元素 275
14.3.6 改良的ol列表 276
14.3.7 改良的dl列表 276
14.3.8 加以严格限制的cite元素 277
14.3.9 重新定义的small元素 278
14.4 小结 278
14.5 习题 279
第15章 HTML 5中的文件与拖放 280
视频讲解:40
分钟
15.1 选择文件 281
15.1.1 通过file对象选择文件 281
15.1.2 使用blob接口获取文件的类型与大小 282
15.1.3 通过类型过滤选择的文件 283
15.2 使用FileReader接口读取文件 285
15.2.1 检测浏览器是否支持FileReader接口 285
15.2.2 FileReader接口的方法 285
15.2.3 使用readAsDataURL方法预览图片 286
15.2.4 使用readAsText方法读取文本文件 287
15.2.5 FileReader接口中的事件 288
15.3 拖放API 290
15.3.1 实现拖放的步骤 290
15.3.2 通过拖放显示欢迎信息 291
15.4 dataTransfer对象应用详解 293
15.4.1 使用effectAllowed和dropEffect属性
设置拖放效果 293
15.4.2 使用setDragImage方法设置拖放图标 294
15.5 小结 295
15.6 习题 295
第16章 多媒体播放 296
视频讲解:35
分钟
16.1 HTML 5多媒体的简述 297
16.1.1 HTML 4中多媒体的应用 297
16.1.2 HTML 5页面中的多媒体 297
16.2 多媒体元素基本属性 298
16.3 多媒体元素常用方法 302
16.3.1 媒体播放时的方法 302
16.3.2 canPlayType(type)方法 304
16.4 多媒体元素重要事件 304
16.4.1 事件处理方式 304
16.4.2 事件介绍 305
16.4.3 事件实例 306
16.5 小结 308
16.6 习题 309
第17章 绘制图形 310
视频讲解:1小时32
分钟
17.1 canvas的基础知识 311
17.1.1 canvas是什么 311
17.1.2 在页面中放置canvas元素 311
17.1.3 绘制带边框的矩形 312
17.2 在画布中使用路径 314
17.2.1 使用arc方法绘制圆形 314
17.2.2 使用moveTo与lineTo路径绘制火柴人 316
17.2.3 贝塞尔和二次方曲线 317
17.3 运用样式与颜色 319
17.3.1 fillStyle 和 strokeStyle属性 319
17.3.2 透明度 globalAlpha 321
17.3.3 线型 Line styles 323
17.4 绘制渐变图形 325
17.4.1 绘制线性渐变 325
17.4.2 绘制径向渐变 326
17.5 绘制变形图形 328
17.5.1 坐标的变换 328
17.5.2 矩阵变换 330
17.6 组合多个图形 333
17.7 给图形绘制阴影 335
17.8 应用图像 336
17.8.1 绘制图像 336
17.8.2 图像的局部放大 338
17.8.3 图像平铺 339
17.8.4 图像裁剪 341
17.8.5 像素的处理 342
17.9 绘制文字 344
17.10 保存与恢复状态 345
17.11 文件的保存 346
17.12 对画布绘制实现动画 347
17.13 综合实例——桌面时钟 348
17.14 小结 350
17.15 习题 351
第18章 数据存储 352
视频讲解:50
分钟
18.1 初识Web Storage 353
18.1.1 什么是Web Storage 353
18.1.2 使用Web Storage中的API 353
18.1.3 sessionStorage和localStorage的实例
——计数器 355
18.1.4 Web Storage综合实例——留言本 357
18.1.5 JSON对象的存数实例——用户信息卡 359
18.2 本地
数据库
361
18.2.1 Web SQL
数据库
简介 361
18.2.2 使用Web SQL Database API 362
18.2.3 本地
数据库
实例——用户登录 363
18.3 小结 367
18.4 习题 367
第19章 离线应用程序 368
视频讲解:13
分钟
19.1 HTML 5离线Web应用概述 369
19.1.1 离线Web应用概述 369
19.1.2 本地缓存与浏览器网页缓存的区别 370
19.2 创建HTML 5离线应用 370
19.2.1 缓存清单(manifest) 370
19.2.2 配置IIS服务器 372
19.2.3 浏览缓存清单 372
19.3 浏览器与服务器的交互过程 373
19.4 applicationCache对象 374
19.4.1 swapCache方法 375
19.4.2 applicationCache对象的事件 376
19.5 小结 379
19.6 习题 379
第20章 使用Web Worker处理线程 380
视频讲解:25
分钟
20.1 Web Worker概述 381
20.1.1 创建和使用Worker 381
20.1.2 Web Worker应用实例——求和运算 382
20.2 在Worker内部能做什么 383
20.3 多个JavaScript文件的加载与执行 384
20.4 线程嵌套 384
20.4.1 单层嵌套 385
20.4.2 在多个子线程中进行数据的交互 387
20.5 小结 390
20.6 习题 390
第21章 通信API 391
视频讲解:4
分钟
21.1 跨文档消息通信 392
21.1.1 使用postMessageAPI 392
21.1.2 跨文档消息传输 392
21.2 小结 394
第22章 获取地理位置信息 395
视频讲解:12
分钟
22.1 Geolocation API的概述 396
22.1.1 使用getCurrentPosition方法获取
当前
地理位置 396
22.1.2 持续监视
当前
地理位置的信息 398
22.1.3 停止获取
当前
用户的地理位置信息 398
22.2 position对象 398
22.3 在google地图上显示“我在这里” 399
22.4 小结 401
22.5 习题 401
第3篇 HTML 5项目实战
第23章 旅游信息网
前
台页面 405
视频讲解:20
分钟
23.1 概述 406
23.2 网站预览 406
23.3 关键技术 410
23.3.1 网站主体结构设计 410
23.3.2 HTML 5结构元素的使用 410
23.4 网站公共部分设计 411
23.4.1 设计网站公共header 411
23.4.2 设计网站公共footer 418
23.5 网站主页设计 419
23.5.1 显示网站介绍及相关图片 419
23.5.2 主页左侧导航的实现 421
23.6 留下足迹页面设计 424
23.6.1 播放音乐 424
23.6.2 添加留言功能的实现 425
23.7 小结 426
附录 习题参考答案 427
HTML 5从入门到精通
一、
获取当前时间
戳 方法1:通过time函数time();
方法2:通过$_SERVER中的REQUEST_TIME元素$_SERVER['REQUEST_TIME'];
方法3:通过strtotime函数strtotime('now'));
二、
获取当前时间
通过date函数格式化
时间
戳echo date('Y-m-d h:i:s', time()); // 2016-12-31 ...
可以使用TIMESTAMPDIFF函数
获取当前时间
与最小
时间
的
时间
差。具体的查询语句如下:
SELECT TIMESTAMPDIFF(SECOND, MIN(create_time), NOW()) AS time_diff FROM table_name;
其中,create_time为表中
时间
列的名称,table_name为表名。该语句将返回
当前
时间
与最小
时间
的
时间
差,单位为秒。您可以根据自己的需要,将
时间
差转化为其他
时间
单位,例如
分钟
、小时、天等。