前言:使用PHP和MySQL開發後臺管理系統的過程當中,發現有一些通用的【套路小Tip】,這裏集中記錄一下。結合工做中ing的後臺業務,我逐漸體會到:除了技術知識外、能使用戶體驗好的「使用流程設計」積累也十分重要╭( ・ㅂ・)و ̑̑ javascript
項目github地址:https://github.com/66Web/php_book_store,歡迎Star。 php
1、知識點記錄html
一、數據庫的表名和列名java
二、後臺用戶模塊mysql
<input type="hidden" name="id" value='<?php echo $row['id'] ?>' />
三、_top 是指向:上一級目錄git
<p><a href="logout.php" target='_top'>|-退出系統</a></p>
四、disabled 禁用username提交,不能修改github
<p>管理員名:</p> <p><input type="text" name='username' value='<?php echo $row['username']?>' disabled></p>
五、後臺修改、刪除 算法
六、Select選項‘修改’時顯示原選項sql
<p>類別:</p> <p> <select name="class_id"> <?php $sqlClass="select * from class"; //建立sql語句 $rstClass=mysql_query($sqlClass); //發送sql語句 while($rowClass=mysql_fetch_assoc($rstClass)){ //讀取並判斷mysql服務器返回結果 if($rowClass['id'] == $rowBook['class_id']){ //rowClass的id 與傳過來的rowCook的class_id相同時,選中 加selected echo "<option value='{$rowClass['id']}' selected>{$rowClass['name']}</option>"; }else{ echo "<option value='{$rowClass['id']}'>{$rowClass['name']}</option>"; } } ?> </select> </p>
七、後臺書的模塊,delete.php數據庫
$file="../../public/uploads/{$img}"; //定義圖片文件路徑 $file2="../../public/uploads/thumb_{$img}" //定義縮略圖文件路徑 //刪除圖片 刪除文件用unlink() unlink($file); unlink($file2);
八、傳文件函數
$ext = array_pop(explode('.',$name)); $dst = '../../public/uploads/'.time().mt_rand().'.'.$ext;//指定地址,並隨機生成新文件名 // array_pop() 函數刪除數組中的最後一個元素 // explode('.',$name) 字符串分割函數得到文件擴展名.jpg等 $src = $_FILES['img']['tmp_name']; //文件上傳時在臨時目錄中被保存成一個臨時文件的文件名 $name = $_FILES['img']['name']; //上傳文件的文件名
//判斷 原圖x/目標x > 原圖y/目標y 以大的比例結果爲準 1000/500 500/500 2 1
$img = basename($dst); //得到目錄下的文件名a.jpg
九、PHP中exit; 能夠阻止腳本,不用通篇註釋。
十、圖書模塊update.php
$imgerror=$_FILES['img']['error']; //文件上傳錯誤信息 //圖片上傳--先上傳新圖,後刪除原圖,上傳失敗不刪原圖 if($imgerror === 0){
十一、多表查詢
$sql="select comment.*,user.username,book.name from comment,user,book where comment.user_id=user.id and comment.book_id=book.id"; $rst=mysql_query($sql);
$sql="select book.*,class.name cname from book,class where book.class_id=class.id"; $rst=mysql_query($sql);
十二、後臺評論模塊index.php
echo "<td>".date('Y-m-d',$row['time'])."</td>";
1三、在頁面裏面流通的get post中的數據都變成字符串了
if($row['id']==1){ //編號爲1 的刪除按鈕的a連接,禁用--<a href='javascript:'></a>,改背景色爲灰色 echo "<td><a href='javascript:' style='background:#888'>刪除</a></td>"; }else{ echo "<td><a href='delete.php?id={$row["id"]}'>刪除</a></td>"; }
1四、後臺廣告模塊
1五、訂單模塊
$sql="select indent.price,indent.num,book.name,book.img from indent,book where indent.book_id=book.id and indent.code='{$code}'"; $rst=mysql_query($sql);
訂單編號code是varchar類型,要加單引號:失誤率極高!
indent.code='{$code}'
echo $sql; exit;
加載出縮略圖 thumb_{}
echo "<td><img src='../../public/uploads/thumb_{$row['img']}' width='50px'></td>";
輸出合計
echo "<td>".$row['price']*$row['num']."</td>";
1六、後臺權限把控:後臺每個頁面都要寫(或模塊化引入)
<?php session_start(); if(!$_SESSION['userid']){ echo "<script>location='login.php'</script>"; exit; //防止程序在跳轉以前,忽然的,執行下去下面的代碼了 } ?>
1七、session數組:將數據存放在服務器中
session_start();
$_SESSION['username']='user1'; $_SESSION['user_id']='15';
session_start();
$_SESSION=array();
setcookie('PHPSESSID','',time()-1,'/');
session_destroy();
1八、退出後臺登陸
<?php session_start(); $_SESSION = array(); //清空session數組 session_destroy(); //刪除服務器上PHPSESSID所對應的session文件 setcookie('PHPSESSID','',time()-3600,'/'); //刪除客戶端的cookie文件 echo '<script>location="login.php"</script>'; ?>
1九、前臺廣告 動態放置
<?php include '../public/common/conn.php'; $sqlAdvert = "select * from advert"; $rstAdvert = mysql_query($sqlAdvert); while($rowAdvert=mysql_fetch_assoc($rstAdvert){ $rowAds[$rowAdvert['pos']]=$rowAdvert; } ?> <div class="ads"> <img src="../public/upadverts/<?php echo $rowAds[0]['img']?>" alt=""> </div>
20、網站下不要用絕對路徑,這樣文件名改動會出問題
<?php $path = $_SERVER['PHP_SELF']; $arr = explode('/',$path); $root = '/'.$arr[1]; //獲取根目錄 ?> <a href=""> <img src="<?php echo $root?>/home/public/img/logo.png" alt=""> </a>
2一、首頁 重複加載的類似度很高的【樓層、數據塊】都要經過 php循環加載
<?php $sqlClass = "select * from class order by id limit 2"; $rstClass = mysql_query($sqlClass); $f = 1; while($rowClass=mysql_fetch_assoc($rstClass)){ ?> <!--樓層開始--> …… …… …… <?php $sqlBook = "select book.* from book,class where book.class_id = class.id and class.id = {$rowClass['id']} and book.shelf=1 order by book.id limit 4"; $rstBook = mysql_query($sqlBook); while($rowBook = mysql_fetch_assoc($rstBook)){ ?> <!--樓層數據塊開始--> …… …… …… <!--樓層數據塊結束--> <?php } } ?> <!--樓層結束-->
2二、前臺頁面中 動態循環添加數據
$id=$_GET['class_id']; $sqlClass="select * from class where id = {$id} "; $rstClass=mysql_query($sqlClass);
$rowClass=mysql_fetch_assoc($rstClass);
while($rowClass=mysql_fetch_assoc($rstClass)){ …… …… }
<?php echo $rowClass['name']?>
2三、打印 查看:查到的數據結果
<?php …… …… while($rowClass=mysql_fetch_assoc($rstClass)){ echo '<pre>'; print_r($rowClass); echo '</pre>'; } ?>
2四、前臺不一樣頁面之間 跳轉 經過a連接傳遞參數,查表,獲得想要的結果
<span><a href='class.php?class_id=<?php echo $class_id?>'>分類</a> » <?php echo $rowClass['name']?></span>
if($page>=1 && $totalpage>1){ echo "<a href=?page=1&class_id={$rowClass['id']}>第一頁 </a>"; }
2五、header.php 中控制登陸、註冊、切換用戶名
<?php if(!$_SESSION['home_username']){ echo "<a href='{$root}/home/login.php'>登陸</a>"; }else{ echo " <a href='{$root}/home/person/index.php'>歡迎 {$_SESSION['home_username']}登陸</a> <a href='{$root}/home/logout.php'>退出</a>"; } ?>
@$_SESSION['home_username'];
2六、我的中心 左右結構頁面
2七、經過session方法開發購物車,用戶關閉瀏覽器後,自動清空購物車
session_start(); $id = $_GET['id']; $sql = "select * from book where id = {$id}"; $rst = mysql_query($sql); $row = mysql_fetch_assoc($rst); $_SESSION['books'][$id]=$row; //用id限制同一圖書只能加一個,而後在購物車頁面中進行加減數量 //在圖書信息的子數組中臨時加一個num 默認1, 方便index.php中使用變量 <?php echo $book['num']?> $_SESSION['books'][$id]['num']=1;
echo '<script>location="index.php"</script>';
有了數組,就不用while了,用foreach遍歷數組 index.php
<?php foreach($_SESSION['books'] as $book){ ?> …… …… <?php } ?>
// 在session中找到 刪除 unset($_SESSION['books'][$id]);
$_SESSION['books']=array();
不能夠unset,那樣會把 $_SESSION['books']刪掉
$tot = 0
遍歷後(foreach 或 while循環)
$tot += $row['price']*$row['num'];
$_SESSION['books'][$id]['num']++; $_SESSION['books'][$id]['num']--;
限制數量 加→不能多於庫存 減→不能少於1個
if($_SESSION['books'][$id]['num']<1){ $_SESSION['books'][$id]['num'] = 1; } if($_SESSION['books'][$id]['num'] > $_SESSION['books'][$id]['stock']){ $_SESSION['books'][$id]['num'] = $_SESSION['books'][$id]['stock']; }
2八、購物車的 聯繫方式、提交訂單
<!--判斷用戶是否登陸 session--> <?php if($_SESSION['home_username']){ ?> …… <?php } ?>
$arr=$_SESSION['books']; $_SESSION = array(); //清空session數組 $_SESSION['books']=$arr;
2九、登陸後不只要在session中放入username ,通常還要放入userid
$_SESSION['home_userid'] = $row['id']; $user_id = $_SESSION['home_userid']; $sql = "select * from touch where user_id = {$user_id}"; $rst = mysql_query($sql);
30、在各個 後臺數據管理模塊中 修改都要有一個隱藏域 傳id
3一、購物車生成訂單
$code =time().mt_rand(); $code =microtime(true).time().mt_rand(); //microtime(true)微秒 $code =time().mt_rand().mt_rand(1,10); $code =time().mt_rand().range('a','z');
3二、購物車 提交訂單以後,要作兩件事
3三、提交訂單的用戶,只有在 ‘已確認’狀態下,才能夠評論
3四、在CSS樣式表裏,用class類
2、運行效果圖
一、註冊功能
註冊界面 |
錯誤提示 |
經過提示 |
二、二手書搜索功能
高級搜索成功界面 |
搜索失敗提示 |
三、二手書發佈功能
用戶發佈二手書界面 |
用戶發佈二手書成功 |
四、二手書購買與評論功能
加入購物車界面 |
購物車界面 |
提交訂單成功 |
未確認時查看訂單界面 |
未確認時查看訂單詳情界面 |
確認時查看訂單詳情界面 |
確認後撰寫評論 |
評論成功 |
注:轉載請註明出處