#項目進展
##2017-08-25
1.首先通過最簡單的index頁來進行頁面的選擇,
通過c來選擇要調(diào)用的類页徐,因為怕找不到相應(yīng)的類所
以運用了autoload的魔術(shù)方法來進行將各種需要調(diào)
用的類的所在文件包含苏潜。通過isset和三元運算來給
a和c默認值為User和index
2.直接在下方實例化c,然后調(diào)用相應(yīng)的方法來進行頁面選擇
3.User.class.php頁面中將被調(diào)用了相應(yīng)的方法变勇,默認的是
調(diào)用了這個類和類中的index方法恤左。
4.在這個方法中include './View/User/list.html',
來進行首頁的界面布置,和提供遍歷的前端環(huán)境
5.index方法中需要對當(dāng)前的兩個搜索進行判斷和組成遍歷出來
的where的語句搀绣,通過$str的拼接飞袋,若沒有g(shù)et到兩個想搜索的,
便進行=‘1=1’
6.換頁
1.$page = new Page($total,5);一個是傳數(shù)據(jù)總數(shù)链患,一個是
每頁想顯示幾個
2.page類里面show會返回授嘀,前端下面的分頁a鏈接
$this->limit = (($this->current-1)*$num).','.$num;
這句可以將page的limit成員屬性賦值為‘0,5’這種格式
3.$page->current這個成員屬性是保存當(dāng)前當(dāng)前頁面頁數(shù)
4.//處理下一頁
$first = $end = $pre = $next = $_GET;
$next['p'] = $this->current + 1;
$nextStr = http_build_query($next);
get到當(dāng)前的兩個搜索條件和頁碼username=王志偉&sex=1&p=2
將這個數(shù)組轉(zhuǎn)成這串字符串放到上下頁的a鏈接中就可以進行每次點擊進行傳這些值
7.刪除和添加都是對于Model類的數(shù)據(jù)庫操作锣险,刪除就直接調(diào)用刪除,但是添加的時候點擊添加會調(diào)用add方法中的????include跳轉(zhuǎn)到add這個數(shù)據(jù)輸入頁览闰,提交后再傳到index.php?c=User&a=doAdd,調(diào)用user類里面????的doAdd方法芯肤,進行兩個密碼比較,不一樣跳回去压鉴,一樣的話調(diào)用Model類中的add方法崖咨,將post的值傳過去
8.調(diào)用User的方法中要對數(shù)據(jù)庫進行操作需要每次都實例化一下$user = new Model('user');在通過$user->????相應(yīng)????Model里面的方法名字.
9.自行添加修改功能的過程中出現(xiàn)了對于save.html頁中的value的值遍歷出現(xiàn)了錯誤,應(yīng)該使用來輸出值油吭,而且要用Model類里面的find方法將這個id的數(shù)據(jù)查詢出來
10.修改提交到doSave中击蹲,一定要記得將POST[id]刪除掉,但是調(diào)用Model的save方法有需要傳入一個id所以用$id先裝好婉宰,再將POST內(nèi)的id刪除掉歌豺。
11.修改之后的doSave中要先判斷密碼是不是為空,是的話就直接刪除post里的pwd若不是就要比較兩次密碼是否相等心包,不相等跳回去类咧。
12.在建表的時候?qū)d字段的primary key 設(shè)置的時候不要再進行設(shè)置not null,執(zhí)行insert的sql語句會出錯。
13.在搜索的時候點擊會提交到index這個界面痕惋,在商品搜索的時候調(diào)到index.php区宇。但是c被重置成了User,所以遍歷出來的并不是商品頁值戳,而是用戶頁议谷,所以要在搜索操作表單提交的時候傳一個hidden傳一個c=Good來進行完成搜索,其實不管哪個頁都應(yīng)該有一個hidden來進行傳值堕虹。因為index.php默認值被設(shè)定好了卧晓,不穿的話就永遠是User和index默認的ca值。
###總結(jié):
先是查詢的時候有坑鲫凶,就是輸入0的時候查詢并不會是真的查詢0的關(guān)鍵字禀崖,所以我們要用if來判斷username!=='',這樣子吧很多過濾掉了螟炫。對于需要用到id的數(shù)據(jù)庫操作波附,都要有一步判斷是否有接受到id沒有的話跳轉(zhuǎn)回去
##2017-08-28
1.對于用戶的增刪改查,對于沒有進行修改的值會POST到‘’空的字符串昼钻,所以我們認為是不修改它掸屡,就直接unset($_POST['phone']);這樣數(shù)據(jù)庫里面的值還是null而不是空數(shù)組,此字段屬于未定義
2.對于狀態(tài)的單機改變是點擊A鏈接傳了id和另一個狀態(tài)還有調(diào)用了doStatus方法然评,就調(diào)用Model里的save方法仅财,傳入get到的數(shù)組,非法字段會自動過濾
3.在首頁的index.php中實例化類找不到類和方法會自動包含碗淌,直接讓其跳轉(zhuǎn)到登出類的登出方法中盏求,然后還是會跳回登錄界面,防止手賤用戶
4.在登錄類里面要對賬戶是否存在和密碼是否正確進行判斷亿眠,賬戶用一個select()方法來進行查詢碎罚,返回數(shù)組則為存在,存在的時候進行對POST的密碼進行md5加密比較纳像,還有權(quán)限和禁用的判斷荆烈,沒有權(quán)限的和被禁用的則彈窗無法登陸,然后跳回前頁面竟趾。
5.☆所有的了類都繼承了common類憔购,里面的構(gòu)造函數(shù)會每次都檢測$_SESSION是不是有對應(yīng)的值,沒有的話便跳回登錄界面岔帽。
6.在登錄類里面所有判斷條件符合的時候就將你查詢到的登錄賬戶的數(shù)據(jù)庫查詢獲取的數(shù)組值賦予$_SESSION.注銷就是將$_SESSION數(shù)組清空玫鸟。
7.前端性別的遍歷顯示:
$sexs = ['女','男','妖','gay'];
然后對應(yīng)下標顯示$sexs[$v['sex']]犀勒;
8.對于頭部的切割鞋邑,可以判斷$_SESSION中的權(quán)限值诵次,來選擇是否顯示除了首頁和登出的其他管理導(dǎo)航。
9.common公共類里面還封裝了jump方法枚碗,可以進行所有語句判斷出錯的時候調(diào)用來進行跳回原來的界面或者跳轉(zhuǎn)首頁逾一。
protected function jump($str,$url = '')
{
if(empty($url)) $url = $_SERVER['HTTP_REFERER'];
echo $str.'跳轉(zhuǎn)中...';
echo '';
exit;
}
10.修改的時候用戶名是否存在要進行判斷當(dāng)id<>$_POST['id']的時候是否能查詢到,查不到則不存在肮雨。
11.Model類中的save方法進行了修改遵堵,在傳進來的字段下標為id的時候講對應(yīng)的$v的值賦予where條件,即$this->where = 'where id='.$v;這樣子我們進行調(diào)用Model的save方法的時候就不需要傳限制條件了怨规。
12.在進行狀態(tài)改變的時候點擊a鏈接跳過去doStatus處理過后傳回來沒有p的值陌宿。要進行url傳p
##2017-08-29
1.添加分類的時候要判斷有沒有傳值到add方法中,有的話就是為父類創(chuàng)建子分類波丰,沒有的話就是創(chuàng)建最高級別的分類
2.傳到doAdd的需要用hidden傳pid和path的值過去成為新的分類名的字段壳坪,如果添加的是子分類,則傳過去的是父類的id作為pid掰烟,父類的path拼接上父類id再加上一個逗號爽蝴,然后穿過去
3.創(chuàng)建這兩個hidden要先將父類的分類屬性全部查出來用find
4.添加商品的時候遍歷前端的時候,要遍歷關(guān)于類的下拉列表的時候纫骑,遍歷下拉框的時候把每一個類名的id都和所有分類名的pid進行匹配蝎亚,匹配到了則證明他是個父類,能不能選擇先馆,則給他一個disabled发框。
5.首頁類別遍歷的時候使用
$arr = $type->order('concat(path,id)')->select();
可以進行父子類的排序,可以明確看出父子類關(guān)系煤墙。
6.刪除分類的時候先定義一個兒子變量梅惯,進行查詢,看有沒有分類的pid的值等GET過來的id仿野,有的話則是這個分類下面有兒子或者后代个唧,不允許他刪除操作。
7.在商品搜索的時候设预,構(gòu)造查詢的sql語句要對最大最小價格的input獲取的內(nèi)容進行處理,就是p1和p2互相嵌套判斷犁河,即p1不空的時候判斷p2空和不空的時候情況鳖枕,p2也是如此,這樣p1和p2有沒有值都一樣可以構(gòu)造好sql語句桨螺。在P2可能大于P1的時候宾符,那就用另一個變量來讓它們的值互換,反正一定要保證p2大于p1.
8.點擊修改狀態(tài)的時候要傳一個p當(dāng)前頁碼的值給他灭翔,才能跳回當(dāng)前頁魏烫。或者在處理完狀態(tài)后跳轉(zhuǎn)回來一定要跳轉(zhuǎn)到$_SERVER['HTTP_REFERER'],而不是index哄褒,不然少了很多傳值稀蟋。
##2017-08-30
1.添加刪除修改中的圖片上傳都需要把原來的陸經(jīng)理的圖片進行刪除和添加的操作,就利用文件刪除的遍歷讀文件讀到了獲取到的id對應(yīng)的圖片名的對應(yīng)文件呐赡,便直接刪除退客。
2.對于isset的使用,在修改和添加的時候链嘀,對一個字段賦值的時候萌狂,不填的話用isset來進行判斷是不是定義了,0也算是定義了怀泊,沒定義的話給一個‘’茫藏,empty若檢測到0的時候就默認為沒有定義到,empty(0)是一個真霹琼。所以if(empty(0)){}會走進真區(qū)間务傲,但是其實有時候就是要讓賦值為0.
3.要對所有本來就是需要輸入數(shù)字的進行限制,不能讓字母之類的通過
4.實例化類的時候碧囊,會有不合法的類在地址欄獲取树灶,所以用正則限制手賤用戶直接退出登錄。
5.
action在用get提交的時候不能進行傳值糯而,因為是屬于url傳值天通,你在用get會前面url的實效,用post可以在action里面?zhèn)髦迪ㄍ眨梢詫和a傳過去像寒,但是搜索用了post的話,但是Goods的index方法中用$_GET傳值會使sql語句出錯瓜贾。
6.在商品搜索之后再進行價格或者庫存等信息進行升降序的時候诺祸,由于是a鏈接,點過去并沒有將搜索的條件傳到處理頁祭芦,所以會清空搜索條件筷笨,能做的就是在升降序的a鏈接里將所有的搜索條件加進去,所有的搜索條件太長了龟劲,所以我們在index方法中將所有的GET到的值利用分頁類中的$now = http_build_query($_GET);用這個函數(shù)將所有g(shù)et到的值變成了鏈接后面連接的字符串胃夏。然后在a鏈接加上$now,但是由于獲取了上一次的搜索條件和上次的排序,所以點擊升序點擊降序再點擊升序的時候升序會無效昌跌,因為他的升序被覆蓋仰禀,所以存在變化的傳參盡可能放在a鏈接后面,所以將$now放在盡可能前面蚕愤,這樣點擊的傳參會覆蓋它里面的相同參數(shù)答恶。
7.每當(dāng)升降序條件不為空的時候我們會構(gòu)造order語句饺蚊,但是有時候進行了價格排序之后$now里面會有商品排序參數(shù),再點擊庫存排序同時又庫存排序悬嗓,所以每次獲得排序參數(shù)后構(gòu)造好order字符串之后立即刪除$_GET['sort方式']污呼;這樣$now就不會有排序方式參數(shù)。反正每次點擊a鏈接會重新給排序參數(shù)烫扼。
8.session的可以在index的主要界面進行session_start();因為每個界面都經(jīng)過這個界面實例化出來曙求,所以也可以在這里判斷$_SESSION是不是有值,不是的話就直接讓他退出登錄映企。
##2017-09-04
1.購物車的A鏈接來控制數(shù)量增加減少悟狱,當(dāng)為0的時候沒有必要提交并加入訂單詳情,應(yīng)該在填寫信息頁的時候遍歷商品的時候?qū)um=0的進行再購物車內(nèi)的刪除堰氓,以防添加沒有用的信息
2.在增加訂單的時候應(yīng)該foreach以下購物車的物品將物品加入商品詳情挤渐,而且提交商品詳情之后應(yīng)該清空session中的購物車信息,方便下次購物
##2017-09-05
1.在做多地址管理的時候最難的是默認地址的設(shè)置双絮,給一個status字段浴麻,默認為0,遍歷設(shè)為默認a鏈接的時候先查status為0遍歷囤攀,為1的話顯示為默認地址软免。
2.點擊設(shè)置默認,處理是先根據(jù)傳過來的uid進行where("uid=$_GET['uid'] and status=1")進行查詢同一用戶的地址,若存在就先將這個地址的狀態(tài)改為0焚挠,然后將傳過來的id和status=1修改對應(yīng)的地址膏萧,或者說根本沒查到有1狀態(tài)的同用戶的地址,那就直接進行修改地址蝌衔。
3.在支付的錢輸出的之前榛泛,應(yīng)在是在數(shù)據(jù)庫進行統(tǒng)計,而不是拿session里面的噩斟。
##2017-09-06
1.搜索框擴展曹锨,傳一個name去匹配先去商品表模糊匹配這個名字,若是找不到結(jié)果就用這個name去type分類表查找有沒有相對應(yīng)的名字剃允,有的話一般來說就只有一個匹配的數(shù)據(jù)沛简,將這個類的id拿出來,將值給到$_GET['tid'].但是如果有匹配到這個模糊匹配的商品名就不進入這區(qū)間斥废,而是構(gòu)造尋找商品的sql語句椒楣。
2.瀏覽歷史:每次進入商品詳情就記錄該商品id,瀏覽歷史里面將最近瀏覽的保留在前面营袜,越近瀏覽的排序排在最前面!
3.
1.首先是一開始的$_SESSION['see']的賦值問題丑罪,在登錄方法里荚板,開干之前給$_SESSION['see']=[];
2.進行in_array的判斷凤壁,看當(dāng)前GET到的id值在不在$_SESSION['see']里面,不在的話直接讓$_SESSION['see'][]=$_GET['id'];
3.如果是但是點擊相同商品重復(fù)進入只存一次跪另,而且越近點擊的要放在$_SESSION['see']的最后面拧抖,所以我們用$k=array_keys($arr,'值')來取出同樣id值得下標存在$k當(dāng)中,但是$k是一個數(shù)組并不是一個值免绿,所以我們要刪除掉相同的對應(yīng)下標的id只能unset($_SESSION['see'][$k[0]]),同時還要將$k直接刪除唧席,因為下一次$k=array_keys($arr,'值')是追加$k這個數(shù)組的值,原來的前面下表對應(yīng)的是還在很麻煩嘲驾,所以直接刪掉淌哟,每次$k都是一個空數(shù)組來接收array_keys返回過來的下標。
4.刪除相同的id值之后再將自己的id追加到后面辽故,這樣是就有一種我跑到后面徒仓,前面的我就沒了,然后不管下一個誰在我后面都是我離他最近誊垢。所以在遍歷的時候要將$_SESSION['see']倒過來
5.$see = array_reverse($_SESSION['see']);然后對$see進行遍歷掉弛,一定要用一個容器來裝這個倒序之后的$_SESSION['see'];用自己來裝的話喂走,下一次刷新又將自己倒序了變成了正序殃饿。
4.取消訂單和刪除訂單,狀態(tài):1.待支付芋肠,2.待發(fā)貨乎芳,3.待收貨,4.已完成
狀態(tài)為1业栅,2秒咐,3的時候都是可以取消訂單,在已完成的時候要刪除訂單碘裕。用戶取消訂單則是將數(shù)據(jù)庫的訂單一起消除了携取,但是在完成訂單之后刪除訂單不能刪除數(shù)據(jù)庫的定單,所以在前端遍歷他的訂單的時候我們要不讓他看到他刪除了的已完成訂單帮孔,所以我們多給一個默認為0的shows字段雷滋,點擊刪除訂單將這個shows改為1,遍歷select的時候where天驕中多加一句status=0文兢;這樣用戶就看不到自己刪除的訂單晤斩。
5.面包屑$num = substr_count($v['path'],',');統(tǒng)計字符串當(dāng)中逗號的個數(shù),來判斷商品的上一級類有幾個逗號就是商品有幾層上一級姆坚,然后進行循環(huán)澳泵。
$type = new Model('type');
$goods = new Model('goods');
$a = $goods->find($_GET['id']);
$a = $a['tid'];
$b = $type->find($a);
$num = substr_count($b['path'],',');//2
//var_dump($num);
if(!empty($a)){
//要判斷傳過來的類型有沒有子類,有的話將子類所有的商品查出來兼呵;如果沒有子類兔辅,則直接差該分類下的商品
for($i=0;$i<$num;$i++){
$b = $type->find($a);
$qq[] = $b['name'];
$a = $b['pid'];
}
}