欧美三区四区_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教程
亚洲人午夜精品| 国产精品中文欧美| 色哟哟国产精品免费观看| 91干在线观看| 北条麻妃视频在线| 中文区中文字幕免费看| 欧美国产91| 亚洲成人一区二区| 青草青草久热精品视频在线观看| 成人在线观看黄| 97精品人妻一区二区三区在线| 国产一区清纯| 91极品视觉盛宴| 亚洲www永久成人夜色| 女同性恋一区二区三区| 福利视频亚洲| 成人深夜在线观看| 中文字幕亚洲色图| 亚洲中文字幕无码av永久| 337p粉嫩色噜噜噜大肥臀| 羞羞答答成人影院www| 狠狠操狠狠色综合网| 成人黄色在线观看| 亚洲精品中文字幕在线播放| 亚洲精品aa| 久久久久久久久久久电影| 神马国产精品影院av| 国产视频九色蝌蚪| 一区二区www| 国产精品久久国产愉拍| 欧美亚洲综合网| 国产精品吹潮在线观看| 精品视频一区二区三区免费| 国产亚洲精品va在线观看| 少妇熟女一区二区| 男女视频免费看| 性xxxx欧美老肥妇牲乱| 精品国产精品三级精品av网址| 国产精品久久不能| 中国免费黄色片| 久久精品97| av一区二区久久| 久久精品国产精品亚洲| 激情伊人五月天| 888奇米影视| 国产女优一区| 精品久久一区二区| 亚洲成人第一| 久久久精品国产sm调教网站| 欧洲杯什么时候开赛| 亚洲一卡二卡三卡四卡无卡久久 | 久久久久久婷婷| 激情中国色综合| 91色乱码一区二区三区| 免费91麻豆精品国产自产在线观看| 国产肥臀一区二区福利视频| 精品国精品国产自在久不卡| 青青国产91久久久久久| 欧美一级日韩不卡播放免费| 精品视频高清无人区区二区三区| 国产美女永久免费无遮挡| 亚洲精品tv| 亚洲少妇30p| 国产剧情久久久久久| 波多野结衣av在线免费观看| 国产精品国产| 欧美日韩精品在线一区| 欧美视频久久| 欧美日韩一区二区在线观看| 国产美女99p| 欧美成欧美va| 欧美成人tv| 91精品国产91久久综合桃花| 亚洲激情一区二区三区| 免费视频久久久| 久久综合网络一区二区| 日韩成人xxxx| 六月丁香激情网| 无码国产伦一区二区三区视频| 国产成人av电影在线观看| 久久91精品国产91久久跳| 爽爽爽在线观看| av日韩一区| 一区二区三区精品| 国产精品手机播放| 亚洲欧美另类日本| 91精品国偷自产在线电影 | 欧美三级中文字幕在线观看| 日韩中文一区| 在线观看毛片网站| 日韩av一区二| 亚洲第一区在线| 国产一区视频免费观看| 巨大黑人极品videos精品| 国产女人18毛片水真多成人如厕 | 少妇被狂c下部羞羞漫画| 久久久久高潮毛片免费全部播放| 亚洲国产综合在线| 久久国产精品-国产精品| 久久久久久久久久免费视频| 久久久999| 在线观看国产欧美| 日本中文字幕影院| 日韩精品免费视频一区二区三区 | 激情深爱一区二区| 色综合久久久久久中文网| 中文字幕在线播放一区二区| 极品束缚调教一区二区网站| 日韩欧美在线播放| 一区二区三区四区视频在线观看 | 免费在线成人| 这里只有精品丝袜| 香蕉网在线视频| 国产午夜久久av| 樱桃视频在线观看一区| 久久99精品久久久久久久青青日本| 岛国av中文字幕| 精品一区二区三区蜜桃| 欧美精品久久久久久久久久| 日韩网站在线播放| 亚洲免费二区| 亚洲精美色品网站| 三级a三级三级三级a十八发禁止| 精品国产三区在线| 黑人精品xxx一区一二区| 一区二区91美女张开腿让人桶| 99热这里只有精品1| 99久久久久久| 91在线|亚洲| 香蕉免费毛片视频| 久久成人综合网| 77777亚洲午夜久久多人| 国产馆在线观看| 亚洲国产片色| 久久韩国免费视频| 中文字幕在线永久| 五月精品视频| 亚洲国产精品免费| 已婚少妇美妙人妻系列| 精品成人18| 欧美日韩午夜剧场| 神马午夜伦理影院| 成人国产一区| 欧美日韩亚洲系列| 好吊色视频988gao在线观看| 四虎4545www精品视频| 一区二区三区中文字幕电影| 免费在线成人av| 日韩一级片免费在线观看| 日韩一区中文字幕| 日产精品一线二线三线芒果| 丰满熟妇乱又伦| 亚洲欧洲av色图| 日韩av高清| 亚洲人妻一区二区三区| 亚洲一区二区三区四区在线 | 日本一区二区欧美| 国产精品综合一区二区| 国产精品美女999| 狠狠人妻久久久久久综合| 成人动漫视频在线| 91gao视频| 国产欧美日韩成人| 国产精品久久久久久久蜜臀| 欧美一级二级三级九九九| 91好色先生tv| 91丨porny丨中文| 欧美国产综合视频| 97成人资源| 精品久久久一区| 黄色一级片播放| 日本国产精品| 日韩成人在线视频网站| 中文字幕在线视频播放| 欧美先锋影音| 久久久亚洲国产| 久久影院一区二区| 国产成人av电影在线| 5g国产欧美日韩视频| av中文字幕免费| 亚洲乱码国产乱码精品精可以看 | 红桃av永久久久| 黄色片网址在线观看| 精品成人自拍视频| 亚洲精品综合精品自拍| 精品少妇一区二区三区免费观| 国产手机视频一区二区| 人人澡人人澡人人看欧美| av资源免费观看| 久久精品综合网| 日本一区不卡| 国产视频一区二| 亚洲国产精品久久精品怡红院| 中文字幕无码人妻少妇免费| 在线综合亚洲| 国产成人精品免高潮在线观看| 黄瓜视频在线免费观看| 国产精品麻豆网站| 国产又黄又爽免费视频| 中文字幕亚洲在线观看| 91麻豆精品国产自产在线| 日韩av卡一卡二| 亚洲经典一区| 欧美美女15p| 五月天综合激情网| 中文字幕一区二区三区蜜月| 4444在线观看| 天堂网av成人| 日韩视频在线免费| 久久视频免费在线观看| 99精品黄色片免费大全| 国产精品香蕉视屏| 先锋影音网一区二区| 日韩欧美激情四射| 国产精品jizz| 国产精品1区2区| 精品欧美一区二区在线观看视频| 成人开心激情| 精品国产在天天线2019| www.av欧美| 国产高清精品网站| 青娱乐国产91| 91蜜桃臀久久一区二区| 日韩电影在线观看永久视频免费网站| 日韩av手机在线播放| 久久电影一区| 久久精品ww人人做人人爽| **国产精品| 亚洲美女在线观看| 欧美成人免费观看视频| 国产亚洲污的网站| www.亚洲成人网| 日本精品三区| 欧美在线中文字幕| 国产精品永久久久久久久久久| 亚洲精品中文字幕乱码三区| 北条麻妃视频在线| 99精品免费网| 51蜜桃传媒精品一区二区| 69堂免费精品视频在线播放| 精品欧美一区二区久久| 人妻无码一区二区三区免费| 91一区二区在线观看| 一区二区不卡在线| 露出调教综合另类| 91超碰caoporn97人人| 国产丝袜视频在线观看| 欧美精品视频www在线观看| 加勒比一区二区| 成人av免费在线观看| 日本黄色播放器| 色爱综合网欧美| 国产精品久久久久9999| 刘亦菲一区二区三区免费看| 精品国产免费一区二区三区四区| 精品人妻无码一区二区三区换脸| 国产成人在线观看| 日产精品高清视频免费| 国产精品一区2区3区| 97人人模人人爽人人喊中文字| 国产成人三级一区二区在线观看一| 一本到一区二区三区| 乱码一区二区三区| 国产伦精品一区二区三区免费迷| 亚洲一区在线直播| 91偷拍一区二区三区精品| 91精品久久久久久久久青青| 国产极品久久久久久久久波多结野 | 日韩免费中文字幕| www.日韩高清| 亚洲国产精品va在看黑人| 久久久精品国产sm调教| 亚洲一区二区三区视频在线播放| 视频区 图片区 小说区| 精品无码三级在线观看视频| 正在播放一区二区三区| 99热精品久久| 亚洲永久在线观看| 大型av综合网站| 国内外成人免费激情在线视频| 国产自产一区二区| 日韩第一页在线| 国产女主播喷水视频在线观看| 色婷婷av一区二区三区gif| 国产人妻人伦精品1国产丝袜| 99久久精品久久久久久清纯| 成人免费观看cn| 性色av一区二区怡红| 欧美精品与人动性物交免费看| 九九热爱视频精品视频| 国产福利精品视频| 成人动漫视频在线观看| 久久精品视频免费播放| 国内精品久久久久久久久久| 精品久久一区二区| 色婷婷在线观看视频| 91久久精品国产91性色tv | 精品少妇一区二区三区免费观| 国产视频视频一区| 做a视频在线观看| 成人综合婷婷国产精品久久| 一二三在线视频| 久久亚洲视频| dy888午夜| 亚洲精品欧洲| 奇米视频888战线精品播放| 天天av综合| 国产欧美在线一区二区| 国产一区二区亚洲| 国产日韩欧美综合| 国产精品sss在线观看av| 国产999精品| 欧美亚洲大片| 日韩在线观看网站| 99国产精品欲| 亚洲色图av在线| av观看在线免费| 亚洲美女视频网站| 99精品在线视频观看| 日韩精品免费电影| 在线免费观看高清视频| 亚洲成人精品视频| 欧美性受xxx黑人xyx性爽| 日韩精品中文字幕在线不卡尤物| 青青草原免费观看| 精品日本美女福利在线观看| 山东少妇露脸刺激对白在线| 亚洲综合在线五月| 蜜臀久久99精品久久久久久| 亚洲一区二区三区中文字幕在线| 亚洲自拍偷拍图| 亚洲高清视频在线| 中国特黄一级片| 欧美日韩午夜视频在线观看| 欧美日韩午夜视频| 欧美视频自拍偷拍| 九九视频免费看| 一本色道久久综合亚洲aⅴ蜜桃 | 国产精品视频麻豆| 中文字幕在线播放视频| 中文字幕一区三区| 干b视频在线观看| 五月综合激情网| 国产麻豆a毛片| 色综合天天综合在线视频| 欧美丰满艳妇bbwbbw| 欧美日韩国产精品专区 | 中文字幕人成人乱码| 精品一区二区国产| 亚洲视频观看| 日本黄xxxxxxxxx100| 蜜桃av一区二区在线观看| 激情综合网婷婷| 97se狠狠狠综合亚洲狠狠| 国产xxxxhd| 亚洲免费视频中文字幕| 国产精品麻豆一区| 日韩欧美国产激情| 日韩欧美大片在线观看| 欧美刺激脚交jootjob| 国产巨乳在线观看| 日韩亚洲精品电影| 韩国精品视频在线观看| 国产精品1区2区在线观看| 美日韩中文字幕| 蜜桃av噜噜一区二区三| 欧美国产先锋| 中文字幕第50页| 国产一区二区中文字幕| 中文字幕在线视频精品| 中文字幕亚洲在| 国内毛片毛片毛片毛片毛片| 欧美日韩国产一级二级| 欧美激情一区二区三区免费观看| 在线播放日韩专区| 欧美视频在线视频精品| 91久久精品美女高潮| 中文字幕日韩欧美精品高清在线| 天天做天天爱天天高潮| 国产精品1024| 蜜臀aⅴ国产精品久久久国产老师| 亚洲精品乱码久久久久| 欧美日韩大片在线观看| 日韩精品一区二区三区四区| 亚洲美女综合网| 欧美另类精品xxxx孕妇| 人人九九精品视频| 懂色中文一区二区三区在线视频| 亚洲国产导航| 女人扒开屁股爽桶30分钟| 亚洲国产精品av| 久久精品一区二区三区四区五区| 欧美一级夜夜爽| 天堂av资源网| 1769国产精品| 天天揉久久久久亚洲精品| 黄网站色视频免费观看| 99国产精品国产精品毛片| japanese中文字幕| 337p亚洲精品色噜噜|