欧美三区四区_av先锋影音资源站_亚洲第一论坛sis_影音先锋2020色资源网_亚洲精品社区_在线免费观看av网站_国产一区二区伦理_亚洲欧美视频一区二区_99视频精品全部免费在线_精精国产xxxx视频在线

PHP實(shí)例:一無限分類的處理類_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:PHP實(shí)例:PHP批量生成縮略圖
到今天我學(xué)PHP已經(jīng)快一年了。不過小弟資質(zhì)相當(dāng)有限,一直沒有做出什么好東西來。在工作中有時(shí)需要把大批量的圖片變小,這是一件很簡單但很無聊的事情。有一天突發(fā)奇想,怎么不用PHP來做一個(gè)小程序呢?于是昨天完成了一個(gè)批量生成縮略圖的小程序。現(xiàn)在發(fā)布出

PHP代碼:--------------------------------------------------------------------------------

<?php
/* 名稱: 對(duì)分類操作的業(yè)務(wù)邏輯封裝

* 說明: 本類中引用的其它類(DB、Table、Item)均未提供,所以本類只能做個(gè)參考,不能直接應(yīng)用
* 不是本人小氣不提供其它類,實(shí)在是因?yàn)槟切┒际且粌赡昵皩懙念悾軤。怕大家看后對(duì)大
* 造成誤導(dǎo). 在此發(fā)表這個(gè)類,只希望大家能從中學(xué)到一些程序設(shè)計(jì)的方法。

* 特點(diǎn):
* 采用遞歸調(diào)用的方法,對(duì)分類數(shù)據(jù)只需一次數(shù)據(jù)庫查詢可生成樹狀結(jié)構(gòu)。 無限遞歸層次(視機(jī)器堆棧而定)
*
* 數(shù)據(jù)庫定義:
* ID smallint unsigned primary #如果數(shù)據(jù)量很大可用int
* ParentID smallint unsigned index #如果數(shù)據(jù)量很大可用int, 請(qǐng)索引此字段
* #如果為根分類,則ParentID = 0
*
* RootID smallint unsigned index #如果數(shù)據(jù)量很大可用int, 請(qǐng)索引此字段
* #如果是根分類則RootID = 0, 否則RootID = 最上層的父分類ID
* CategoryName varchar(n) #此大小自定
* 如需有其它字段定義附在后面

* 注意事項(xiàng):
* 不要試圖直接調(diào)用本類,除非你有和我定義那另外那幾個(gè)類相對(duì)應(yīng)的接口, 否則不會(huì)成功
* 在合適的地方定義 DBTABLE_CATEGORY 這個(gè)常量 190-711 190-721 ,使其指向你的分類數(shù)據(jù)表名字
*
* 程序構(gòu)架:
* ├─基礎(chǔ)類 <!-- 完成底層數(shù)據(jù)庫操作、數(shù)據(jù)抽象、語言、模板、異常、雜項(xiàng)等)操作 -->
* │
* │
* └─業(yè)務(wù)邏輯層(此類所處層次) <!-- 利用基礎(chǔ)類中數(shù)據(jù)操作、數(shù)據(jù)抽象等類根據(jù)表現(xiàn)層傳遞的參數(shù)完成數(shù)據(jù)處理,并返回?cái)?shù)據(jù)或操作結(jié)果 -->
* │
* │
* └───表現(xiàn)層(用戶界面) <!-- 利用業(yè)務(wù)邏輯層將取得的數(shù)據(jù)或操作數(shù)據(jù)的結(jié)果通過基礎(chǔ)類中的界面等類進(jìn)行顯示 -->
*/

define('DBTABLE_CATEGORY', 'xxx');

class Category_Logic
{
var KernelRef = NULL; //系統(tǒng)核心的引用
var tblObj = NULL; //包含當(dāng)前分類數(shù)據(jù) Table 類的實(shí)例

var _CurrentItem = NULL; //包含當(dāng)前分類數(shù)據(jù) TItem類的實(shí)例

var CategoryID = 0; //當(dāng)前分類ID,如果沒有當(dāng)前分類此項(xiàng)為 0

//---------------------------------------------------------------------------
//private array GetNodeData(array Data, int ParentNode)
// 根據(jù)一顆指定根的并且以兄弟雙親法表示的樹和當(dāng)前分類的ID,返回當(dāng)前分類在整個(gè)分類表中所處的位置
//
// @param: Data 2維數(shù)組 Array(
// Array(
// 'ID' => 分類ID,
// 'ParentID' => 父分類ID,
// 'RootID' => 根分類ID,
// 'CategoryName' => 分類名稱,
// ),
// ……
// );
// 表示的一顆樹
//
// @param: ParentNode 父分類ID, 每一次由調(diào)用者給出,遞歸時(shí)由程序計(jì)算傳遞
//
// return value: 返回以兄弟雙親法表示的所有分類的樹
// 注意: 確保當(dāng)前分類已經(jīng)設(shè)置,否則此函數(shù)無返回
//
//---------------------------------------------------------------------------
function GetNodeData(Data, ParentNode)
{
arr = Array();

ArrayCount = 0;

for(i = 0, cnt = Count(Data); i < cnt; i++)
{
if(Data[i]['ParentID'] == ParentNode)
{
arr[ArrayCount] = Data[i];
arr[ArrayCount++]['Child'] = this->GetNodeData(Data, Data[i]['ID']);
}
}

return arr;
}

//---------------------------------------------------------------------------
//private String _CurrentLevel(array Data, int Current, String ProcessFunc = '')
// 根據(jù)一顆指定根的并且以兄弟雙親法表示的樹和當(dāng)前分類的ID,返回當(dāng)前分類在整個(gè)分類表中所處的位置
//
// @param: Data 兄弟雙親法表示的樹, 由調(diào)用者傳遞
//
// @param: Current 當(dāng)前分類ID,第一次調(diào)用時(shí)由調(diào)用者給出,遞歸時(shí)由程序自行計(jì)算
//
// @param: ProcessFunc 指定對(duì)分類數(shù)據(jù)的處理函數(shù), 函數(shù)原型定義見 this->PrintCurrentLevel 中的注釋
//
// return value: 返回當(dāng)前分類在分類樹中的位置
// 注意: 確保當(dāng)前分類已經(jīng)設(shè)置,否則此函數(shù)無返回
//
//---------------------------------------------------------------------------
function _CurrentLevel(Data, Current, ProcessFunc = '')
{
for(i = 0; i < Count(Data); i++)
{
if(Data[i]['ID'] == Current)
{
if(Data[i]['ParentID'] != 0)
{
str = this->_CurrentLevel(Data, Data[i]['ParentID'], ProcessFunc) . ' -&gt; ';

if(ProcessFunc) str .= ProcessFunc(Data[i]);
else str .= Data[i]['CategoryName'];
}
else
{
if(ProcessFunc) str = ProcessFunc(Data[i]);
else str = Data[i]['CategoryName'];
}
break;
}
}

return str;
}

//---------------------------------------------------------------------------
//public Category_Logic(Object &Kernel, int CategoryID = -1)
// 本類構(gòu)造函數(shù)
//
// @param: Kernel 此參數(shù)為當(dāng)前系統(tǒng)核心類的一個(gè)引用, 核心類中包括
// 數(shù)據(jù)庫類、輸入輸出類、系統(tǒng)配置類等
//
// @param: CategoryID 當(dāng)前分類ID。
// 當(dāng)想調(diào)用 PrintCurrentLevel、GetRootID、GetParentID、GenerateTypeTreeList及
// 調(diào)用_CurrentItem成員的方法時(shí)請(qǐng)先設(shè)置此值.
//
// 調(diào)用GenerateTypeTreeList時(shí)設(shè)置此值,則沒有ID為此的分類默認(rèn)被選擇,沒設(shè)置則無默認(rèn)
//
// return value: none
//
//---------------------------------------------------------------------------
function &Category_Logic(&Kernel, CategoryID = -1)
{
this->KernelRef = &Kernel;

this->tblObj = new Table(Kernel->DBObj, DBTABLE_CATEGORY);

if(CategoryID != -1)
{
this->SetCategoryID(CategoryID);
}
}

//---------------------------------------------------------------------------
//public void SetCategoryID(int CategoryID)
// 設(shè)置當(dāng)前分類ID
//
// return value: none
//
//---------------------------------------------------------------------------
function SetCategoryID(CategoryID)
{
if(!CategoryID) return;

Item = new TItem(this->KernelRef->DBObj, DBTABLE_CATEGORY, '*', CategoryID ,'ID');

this->_SelfData = &Item;

this->CategoryID = CategoryID;
}

//---------------------------------------------------------------------------
//public int GetRootID()
// 返回當(dāng)前分類的根分類ID
// 注意:只有設(shè)置的當(dāng)前分類時(shí)此函數(shù)才有效
//
// return value: 返回當(dāng)前分類的根分類ID
//
//---------------------------------------------------------------------------
function GetRootID()
{
return this->_SelfData->Get('RootID');
}

//---------------------------------------------------------------------------
//public int GetParentID()
// 返回當(dāng)前分類的父分類ID
// 注意:只有設(shè)置的當(dāng)前分類時(shí)此函數(shù)才有效
//
// return value: 返回當(dāng)前分類的父分類ID
//
//---------------------------------------------------------------------------
function GetParentID()
{
if(this->CategoryID) return this->_SelfData->Get('ParentID');
}


//---------------------------------------------------------------------------
//public String GenerateTypeTreeList(array Data, String ProcessFunc, int floor = 0)
// 返回整個(gè)分類的樹狀結(jié)構(gòu)放在OptionList中的列表
//
// @param: Data 此參數(shù)由 this->DumpTypeDataToTree() 返回
//
// @param: ProcessFunc 處理顯示分類信息的回調(diào)函數(shù), 函數(shù)原型請(qǐng)參照: this->PrintCurrentLevel()
//
// @param: floor 本參數(shù)不能人為給出,是程序自動(dòng)計(jì)算的中間值
//
// return value:
// 結(jié)構(gòu)為一顆兄弟雙親表示法表示的樹
// 設(shè)如分類數(shù)據(jù)如下:
// ├──1級(jí)分類
// │
// │
// │
// ├─2級(jí)分類
// │ │
// │ └─3級(jí)分類
// │
// └─2級(jí)分類
//
// 則返回值為 Array(
// 0 => Array(
// 'ID' => '',
// 'ParentID' => '',
// 'RootID' => '',
// 'CategoryName' => '',
// 'Child' => ....
// )
// .....
// )
//
//---------------------------------------------------------------------------
function DumpTypeDataToTree(RootID = 0, Fields = '*')
{
this->tblObj->SetFields(Fields);
this->tblObj->SetCondition('');

List = this->tblObj->MapResult(this->tblObj->Select());

return this->GetNodeData(List, RootID);
}

//---------------------------------------------------------------------------
//public String GenerateTypeTreeList(array Data, String ProcessFunc = '', int floor = 0)
// 返回整個(gè)分類的樹狀結(jié)構(gòu)放在OptionList中的列表
//
// @param: Data 此參數(shù)由 this->DumpTypeDataToTree() 返回
//
// @param: ProcessFunc 處理顯示分類信息的回調(diào)函數(shù), 函數(shù)原型請(qǐng)參照: this->PrintCurrentLevel()
//
// @param: floor 本參數(shù)不能人為給出,是程序自動(dòng)計(jì)算的中間值
//
// return value: 返回一個(gè)<option>分類名稱1</option> ... <option>分類名稱n</option>
//
// ps: 調(diào)用時(shí)echo "<select name='xxxx'>" . _c->GenerateTypeTreeList(Data, 'ProcessFunc') . "</select>";
//
//---------------------------------------------------------------------------
function GenerateTypeTreeList(Data, ProcessFunc, floor = 0)
{
Str = '';
for(i = 0, cnt = Count(Data); i < cnt; i++)
{
if(this->CategoryID == Data[i]['ID'])
{
Str .= "<option value='{Data[i]['ID']}' selected>"
. str_repeat("&nbsp;", floor * 3)
. '├'
. (ProcessFunc ? ProcessFunc(Data[i]) : Data[i]['CategoryName'])
. "</option>\n";
}
else
{
Str .= "<option value='{Data[i]['ID']}'>"
. str_repeat("&nbsp;", floor * 3)
. '├'
. (ProcessFunc ? ProcessFunc(Data[i]) : Data[i]['CategoryName'])
. "</option>\n";
}

if(Data[i]['Child']) Str .= this->GenerateTypeTreeList(Data[i]['Child'], ProcessFunc, floor + 1);
}

return Str;
}

//---------------------------------------------------------------------------
//public String GenerateTypeTreeView(array Data, String ProcessFunc = '')
// 返回整個(gè)分類的樹狀結(jié)構(gòu)視圖
//
// @param: Data 此參數(shù)由 this->DumpTypeDataToTree() 返回
//
// @param: ProcessFunc 處理顯示分類信息的回調(diào)函數(shù), 函數(shù)原型請(qǐng)參照: this->PrintCurrentLevel()
//
// return value: 返回生成的一顆HTML形式顯示的樹
//
//---------------------------------------------------------------------------
function GenerateTypeTreeView(Data, ProcessFunc)
{
Str = '<ul style="Line-Height:200%">';

for(i = 0, cnt = Count(Data); i < cnt; i++)
{
if(ProcessFunc) Str .= '<li>' . ProcessFunc(Data[i]) . '</li>' . "\n";
else Str .= '<li>' . Data[i]['CategoryName'] . '</li>' . "\n";

if(Data[i]['Child']) Str .= '<li>' . this->GenerateTypeTreeView(Data[i]['Child'], ProcessFunc) . '</li>';
}

Str .= '</ul>';

return Str;
}

//---------------------------------------------------------------------------
//public String PrintCurrentLevel(String ProcessFunc = '')
// 對(duì)多級(jí)分類生成當(dāng)前位置字符串
// 設(shè)如分類數(shù)據(jù)如下,當(dāng)前分類為3級(jí)分類, 則調(diào)用返回 1級(jí)分類 -> 2級(jí)分類 -> 3級(jí)分類
// ├──1級(jí)分類
// │
// │
// │
// ├─2級(jí)分類
// │ │
// │ └─3級(jí)分類
// │
// └─2級(jí)分類
//
//
//
//
// @param: ProcessFunc 此為對(duì)分類數(shù)據(jù)如何顯示的回調(diào)函數(shù),不設(shè)置則直接顯示分類名稱
// 函數(shù)定義原型為 function (&arr);
// 其中arr參數(shù)為每一個(gè)分類信息的一維數(shù)組如下:
// array(ID => 1, ParentID => 0, RootID => 0, CategoryName => '1級(jí)分類')
// 返回值為對(duì)上述數(shù)據(jù)處理的結(jié)果,比如返回帶鏈接的分類名字、更改顯示顏色等
//
// return value: 返回當(dāng)前分類在整個(gè)分類樹中所處位置
//
//---------------------------------------------------------------------------
function PrintCurrentLevel(ProcessFunc = '')
{
if(!this->CategoryID) return '';

if(this->_SelfData->Get("RootID") == 0)
{
if(ProcessFunc) return ProcessFunc(this->_SelfData->fetchDataToArray());
else return this->_SelfData->Get("CategoryName");
}

Current = this->CategoryID;

this->tblObj->SetCondition('RootID = ' . this->_SelfData->Get('RootID') . " or ID = " . this->_SelfData->Get('RootID'));

Data = this->tblObj->MapResult(this->tblObj->Select());

return this->_CurrentLevel(Data, Current, ProcessFunc);
}

//---------------------------------------------------------------------------
//public boolean Add(array arr)
// 添加新分類到分類表中
//
// @param: arr 在此數(shù)組中包括對(duì)新添加分類的定義, 定義如下:
//
// arr['RootID'] 新分類所屬的根分類ID
// arr['ParentID'] 新分類的父分類ID
// arr['CategoryName'] 新分類的名稱
//
// return value: 返回添加分類操作結(jié)果
//
//---------------------------------------------------------------------------
function Add(arr)
{
this->tblObj->SetFields(
Array(
'RootID',
'ParentID',
'CategoryName',
)
);

return this->tblObj->Insert(
Array(
arr['RootID'],
arr['ParentID'],
arr['CategoryName'],
)
);
}

//---------------------------------------------------------------------------
//public boolean Delete(int ID)
// 刪除已經(jīng)存在的分類
//
// @param: ID 要?jiǎng)h除的分類ID
//
// return value: 返回刪除分類操作結(jié)果
//
//---------------------------------------------------------------------------
function Delete(ID)
{
sysOption = &this->KernelRef->Config;

this->tblObj->SetFields('*');
this->tblObj->SetCondition('ID = ' . (int)ID);

return this->tblObj->Delete();
}

//---------------------------------------------------------------------------
//public boolean Modify(int ID, array arr)
// 修改已經(jīng)存在的分類
//
// @param: ID 要修改的分類ID
// @param: arr 在此數(shù)組中包括修改后的分類定義, 定義如下:
//
// arr['RootID'] 新分類所屬的根分類ID
// arr['ParentID'] 新分類的父分類ID
// arr['CategoryName'] 新分類的名稱
//
// return value: 返回修改分類操作結(jié)果
//
//---------------------------------------------------------------------------
function Modify(ID, arr)
{
this->tblObj->SetCondition('ID = ' . (int)ID);

prev = this->tblObj->MapOneRow(this->tblObj->Select());

this->tblObj->SetFields(
Array(
'RootID',
'ParentID',
'CategoryName',
)
);

return this->tblObj->Update(arr);
}

//---------------------------------------------------------------------------
//public array Modify(int ID)
// 修改已經(jīng)存在的分類
//
// @param: ID 指定的分類ID
//
// return value: 返回指定ID分類的信息
// 數(shù)組中包括:
// Array(
// 'ID' => 分類ID,
// 'ParentID' => 父分類ID,
// 'RootID' => 根分類ID,
// 'CategoryName' => 分類名稱,
// );
//
//---------------------------------------------------------------------------
function GetCategory(ID)
{
this->tblObj->SetCondition('ID = ' . (int)ID);

return this->tblObj->MapOneRow(this->tblObj->Select());
}
}
?>
 

分享:如何避免頁面刷新數(shù)據(jù)重復(fù)寫入數(shù)據(jù)庫
何避免頁面刷新數(shù)據(jù)重復(fù)寫入數(shù)據(jù)庫 當(dāng)表單的數(shù)據(jù)是提交給本頁面處理并寫入數(shù)據(jù)庫時(shí),點(diǎn)提交后,刷新頁面的話使數(shù)據(jù)重復(fù)寫入數(shù)據(jù)庫。網(wǎng)上搜索一下,發(fā)現(xiàn)了不少的解決方案: 一、把一頁面分開為兩個(gè),數(shù)據(jù)提交給另一個(gè)頁面處理,之后再跳到輸入頁面。 優(yōu)點(diǎn):避

來源:模板無憂//所屬分類:PHP教程/更新時(shí)間:2010-04-13
相關(guān)PHP教程
日韩激情av在线播放| 亚洲av无码不卡| 亚洲精品成人一区| 99久久这里有精品| 国产一区二区三区久久久| 欧美一区二区美女| 狠狠色综合欧美激情| 永久免费成人代码| 国产专区精品| 老司机精品视频网站| 欧美婷婷六月丁香综合色| 国产区亚洲区欧美区| 亚洲三级在线视频| 五月婷婷在线播放| 热久久免费视频| 欧美大黄免费观看| 欧美二区三区| 欧美色图亚洲视频| 国产日产精品_国产精品毛片| 亚洲欧洲一区二区三区| 日韩久久免费视频| 亚洲日本精品国产第一区| 一区二区在线观看免费视频| 亚洲ab电影| 国产不卡一区视频| 亚洲视频在线看| 男人添女人下部视频免费| 久久国产视频精品| 欧美一性一交| 午夜精品久久久久久久久久久久久蜜桃| 日韩欧美少妇| 成人美女在线观看| 日韩中文字幕视频| 97av视频在线观看| 亚洲精品综合网| 黄色资源网久久资源365| 日韩成人在线视频网站| www国产免费| 亚洲中文一区二区三区| 亚洲综合精品四区| 欧美r级电影在线观看| 国产精品日韩专区| 成年人小视频在线观看| 久久久国产精品入口麻豆| 久久色中文字幕| 欧美激情图片区| 三级性生活视频| 成人a在线观看高清电影| 99精品国产热久久91蜜凸| 欧美巨大黑人极品精男| 亚洲天堂国产视频| 国产又大又长又粗| 蜜桃视频第一区免费观看| 精品无人国产偷自产在线| 大陆av在线播放| 亚洲国产精品18久久久久久| 国内成人自拍视频| 精品国偷自产在线视频| 久久久久国产一区| 视频欧美精品| 《视频一区视频二区| 国产精品一区二区三区久久久| 熟女少妇内射日韩亚洲| 国产精品毛片无码| 一区视频在线播放| 成人免费看黄网站| 国产一二三区精品| 女主播福利一区| 欧美不卡在线视频| 国产69精品久久久久久久| 午夜视频免费在线| 久久久久久久久伊人| 国产精品国产三级国产aⅴ浪潮 | 99久久国产综合精品色伊| 午夜伦理精品一区| 亚洲精品成人无码熟妇在线| 红桃视频在线观看一区二区| 欧美这里有精品| 中文字幕不卡每日更新1区2区| 91久久国语露脸精品国产高跟| 国模一区二区三区白浆| 久久久久国产精品一区| 久久久久久久无码| 九一成人免费视频| 欧美日韩精品三区| 国产麻豆乱码精品一区二区三区 | 中文在线第一页| 麻豆精品在线观看| 蜜月aⅴ免费一区二区三区 | 日韩欧美综合一区| 男人添女荫道口图片| 成人性生活视频| 一区在线观看视频| 国产精品免费一区二区三区在线观看| 久久久久久久久久影院| 蜜桃视频在线一区| 久久久中文字幕| 亚洲无人区码一码二码三码的含义| 99久久精品国产亚洲精品| 日韩一区二区电影| 草草久久久无码国产专区| 亚洲电影有码| 亚洲成人一区二区在线观看| 欧美精品免费观看二区| 国产伦精品一区二区三区免.费| 国产精品77777| 欧美最顶级的aⅴ艳星| 久国产精品视频| 荡女精品导航| 欧美日韩另类一区| 国产二区视频在线| 2020国产精品小视频| 精品国产成人av| 一本二本三本亚洲码| 天天干天天插天天操| 综合亚洲深深色噜噜狠狠网站| 国产自产精品| 97在线公开视频| 久久久国产精华| 成人做爰66片免费看网站| 亚洲午夜在线播放| 94色蜜桃网一区二区三区| 3d动漫精品啪啪一区二区三区免费 | 日韩精品人妻中文字幕| 九一九一国产精品| 热久久免费视频精品| a级黄色片免费看| 精品一区二区综合| 国产成人精品av在线| 日本少妇裸体做爰| 国产成人免费视频网站| 国产视频福利一区| 制服丝袜在线一区| 在线观看日韩av电影| 在线播放精品一区二区三区 | 久久精品美女| av在线免费在线观看| 国产精品麻豆欧美日韩ww| 久久久久一区二区| 国产91免费在线观看| 一区二区三区欧美激情| 国产91av视频在线观看| 久久久久伊人| 欧美日韩精品二区第二页| av免费在线播放网站| 小说区图片区色综合区| 精品国产a毛片| 国产精品av免费观看| 日韩久久一区| 欧美日韩国产综合一区二区| a在线观看免费视频| 国产一区二区区别| 亚洲全黄一级网站| 无码国产69精品久久久久同性| 亚洲一区日韩| 欧美亚洲成人精品| 日本中文字幕在线| 久久久久久毛片| 欧美日韩国产免费一区二区三区 | 青草伊人久久| 精品福利视频导航| 精品国产一区二区三区无码| 999国产精品一区| 亚洲成人激情在线| 亚洲中文字幕一区| 欧美资源在线| 久久久精品亚洲| 男人av资源站| 国产乱码精品一区二区三区av | 欧美 日韩 国产 精品| 亚洲国产精品久久久久秋霞影院 | 综合视频免费看| 日本超碰一区二区| 亚洲的天堂在线中文字幕| 中文字幕第九页| 三级影片在线观看欧美日韩一区二区 | 成人毛片18女人毛片| 欧美国产丝袜视频| 午夜久久久久久久久久久| 噜噜噜久久,亚洲精品国产品| 亚洲综合视频在线| 国产极品美女高潮无套久久久| 不卡中文一二三区| www日韩中文字幕在线看| 久久久久久久久毛片| jlzzjlzz国产精品久久| 日韩电影免费观看高清完整| 久久麻豆视频| 精品久久久影院| 久久久久亚洲av成人无码电影| 久久精品免费观看| 国产精品一区免费观看| 99精品国自产在线| 欧美一区二区三区成人| 国产中文字幕一区二区| 亚洲精品午夜av福利久久蜜桃| 欧美贵妇videos办公室| 久久久久久不卡| 亚洲精品亚洲人成人网| 伊人久久大香线蕉成人综合网| 99热这里只有精品首页 | 日本少妇毛茸茸| 日韩精品91亚洲二区在线观看| 91精品久久久久久久久久久久久| 成人福利小视频| 欧美性生活一区| 少妇一级淫片免费放播放| 久久爱另类一区二区小说| 国产精品香蕉视屏| 日本欧美在线| 日韩精品中文字幕久久臀| 五月天激情丁香| 欧美国产欧美综合| 免费av手机在线观看| 夜间精品视频| 国产成人精品久久二区二区91| 超碰在线人人干| 欧美高清精品3d| 成人免费网站黄| 成人免费视频网站在线观看| 亚洲最新在线| 精品久久久久久久| 97视频在线观看视频免费视频| 国产婷婷一区二区三区久久| 91国产成人在线| 亚洲成av人片在线观看无| 国产一区二区影院| 日本中文不卡| 婷婷成人影院| 久久久伊人欧美| 性一交一乱一透一a级| 777欧美精品| 美国黄色特级片| 久久久国产午夜精品| 北条麻妃在线视频观看| 亚洲高清电影| 99re在线观看| 国内精品视频| 久久久精品国产| 国产影视一区二区| 欧美日韩久久久| 99自拍偷拍视频| 欧美国产日韩在线观看| 韩国日本在线视频| 久久成人国产| 久久精品ww人人做人人爽| 久久夜色精品国产噜噜av小说| 欧美国产亚洲视频| 亚洲国产精品成人久久蜜臀| 欧美一卡2卡3卡4卡| 久久精品色妇熟妇丰满人妻| 国产精品看片你懂得| 尤蜜粉嫩av国产一区二区三区| 久久精品亚洲一区二区| 欧美激情第六页| 国产欧美一区二区精品久久久| 国产成人精品视频| 香蕉视频亚洲一级| 国产性色av一区二区| 欧美激情一区二区三区免费观看 | 911精品美国片911久久久| 国产欧美久久一区二区| 欧美一区=区三区| 久久精品福利视频| 国产福利第一视频| 欧美成人aa大片| 麻豆久久久久久久久久| 色综合天天综合色综合av| 中文字幕网站在线观看| 中文字幕av不卡| 久久精品国产99久久99久久久| 国产a久久麻豆| 91专区在线观看| 三级成人在线视频| 亚洲精品8mav| 欧美啪啪一区| 久久精品国产第一区二区三区最新章节| 亚洲图片久久| 国产精品综合不卡av| 亚洲精品v亚洲精品v日韩精品| 久久影院模特热| 欧美一级特黄aaaaaa| 亚洲色图av在线| 国产精品久久久久久免费| 精品国产制服丝袜高跟| 在线永久看片免费的视频| 自拍偷拍亚洲欧美日韩| 人妻精品久久久久中文字幕69| 成人黄色av网站在线| 人妻丰满熟妇av无码区app| 九九久久精品视频| 成人免费a级片| 日本在线观看不卡视频| 四虎永久免费网站| 亚洲一区日本| 91精品国产吴梦梦| 亚洲欧美成人综合| 日韩不卡一二区| 免播放器亚洲| 小泽玛利亚av在线| 日本欧美加勒比视频| 天堂а√在线中文在线| 首页综合国产亚洲丝袜| 欧美黑人在线观看| 美国十次了思思久久精品导航| a级黄色片免费| 蜜臀av一区二区| 777av视频| 国产乱子伦视频一区二区三区| 日本一本二本在线观看| 国产精品一区专区| 黑鬼大战白妞高潮喷白浆| 国产不卡一区视频| av亚洲天堂网| 久久免费的精品国产v∧| 在线成人精品视频| 国产精品二区一区二区aⅴ污介绍| 波多野结衣加勒比| 一区二区三区 在线观看视频| 国产精品免费无码| 黑人巨大精品欧美一区二区一视频| 可以直接看的黄色网址| sis001欧美| 精品呦交小u女在线| 草逼视频免费看| 精品国产一区av| 国产极品久久久久久久久波多结野 | 国产人久久人人人人爽| 国产精品探花一区二区在线观看| 亚洲黄色小说网站| 黄色录像一级片| 欧美群妇大交群的观看方式 | 日韩一区二区三区av| 久久午夜鲁丝片| 亚洲情综合五月天| 巨茎人妖videos另类| 97avcom| 欧美有码在线| 久久国产精品-国产精品| 亚洲日本成人| 免费在线黄网站| 成人小视频在线| 国产老头和老头xxxx×| 亚洲另类中文字| 日本黄色小说视频| 日韩一区二区三区电影在线观看| 一卡二卡三卡在线| 久久精品国产一区二区三区| jizzjizz少妇亚洲水多| 国产精品精品一区二区三区午夜版 | 精品久久99| 成人免费视频网| 综合视频在线| 国产欧美123| 成人小视频在线| 免费成人蒂法网站| 色成年激情久久综合| 亚洲大尺度在线观看| 中文字幕日韩有码| 亚洲精品无播放器在线播放| 国产美女搞久久| 综合亚洲视频| 2018中文字幕第一页| 99久久99久久精品免费看蜜桃| 3atv一区二区三区| 久草视频在线观| 亚洲欧美精品在线| 成人黄页网站视频| 91视频-88av| 亚洲国产精品第一区二区三区| 少妇av一区二区三区无码| 91色婷婷久久久久合中文| 国产精品揄拍100视频| 欧美无砖砖区免费| 国产剧情久久久| 久久久久久久久国产| 一个色免费成人影院| 亚洲天堂电影网| 成人精品在线视频观看| 伊人网伊人影院| 欧美精品xxxxbbbb| 欧美一级免费片| 国产精品久久久久久亚洲调教| 亚洲有吗中文字幕| 男人用嘴添女人下身免费视频| 国产精品乱码一区二三区小蝌蚪| 欧美日韩三级在线观看| 亚洲欧美在线第一页| 在线免费成人| 国产一区二区三区色淫影院| 日本系列欧美系列| 在线观看一区二区三区视频| 欧美日韩国产丝袜另类| 亚洲午夜激情视频| 91国内免费在线视频| 99精品小视频| 欧美精品99久久| 亚洲免费视频成人| 中文字幕在线播| 欧美精品激情视频|