這篇文章介紹的內容是關於PHP實現購物網站,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
這是我在研究生期間,老師要求做的一個類似原始淘寶網的購物網站,因為不會PHP,為了寫這個作業而新學的。做這個網站花了兩週時間,在此把這個小專案做一個總結。
功能:
DONE. 使用者權限管理。包括管理員和普通用戶。管理員有所有權限,包括更新網站狀態
登入的其他值為使用者名稱和密碼,使用者名稱和密碼正確,跳到下一頁。
ADMIN具有添加,刪除,更新等權限。用戶只能查看手機,只能加入購物車中的手機等。
DONE.新使用者:此模組適用於沒有帳戶的使用者。這裡用戶可以建立一個帳戶來登入。帳戶的創建是透過填寫註冊表單和用戶的詳細信息,如姓名,電話,電子郵件等來完成的。
DONE.產品管理和展示:該模組展示手機產品訊息,如產品編號,項目,名稱,類別,產品圖像,說明,功能和產品限制等。所有這些都將輸入到資料庫,因此可以在網站上找到。
DONE.搜尋:此模組可協助客戶根據自己的預算或興趣來放鬆搜尋。搜尋可以在不同的類別上完成,如品牌,型號名稱,型號,顏色或價格等。
DONE:交易:在此模組中,購物車的管理已完成。此模組購物者可以選擇任意數量的物品(手機,配件)並將它們添加到購物車,在從購物車購買物品後,所有要購買的物品都可以再次查看。如果他以後不喜歡,購物者也可以從購物車中取出。購物者還可以逐一檢查購物車中保存的產品。由於產品從購物車中檢出,總價格將相加。
DONE:出貨:在這個模組中,購物者可以選擇合適的出貨選項。購物者可以使用不同服務提供者提供的各種運送選項。
DONE:付款:此模組描述了客戶完成的付款。購物者可以選擇不同的付款方式,並根據所選的付款方式的要求提供機密的付款資訊。付款資訊還可能包括購買型號,數量和供應商名稱等資訊。
DONE:報告:在此模組中,將產生所有報告。無論何時出售物品或客戶訂購產品,都應立即透過電子郵件向其供應商發送警報,以便他可以盡快裝運該物品。該模組有3個子模組;股票報告,訂單報告和交付報告。
股票報告將產生可用產品數量和產品狀態的報告。
訂單報告將列出訂購的產品清單以及購買該產品的客戶詳細信息,這些信息未送達。
交付報告將產生已售出產品清單及其交付狀態。
下面是以上功能的程式碼以及一些相關的解釋:
最簡單的主介面:
index.html
//只放了一個註冊一個登入的連結
<html><head><meta charset="utf-8"><title>Phones on saling</title></head> <h1 id="Phones-nbsp-on-nbsp-saling">Phones on saling!</h1> <a href="chooseCharactor.html" target="_blank">Sign in the website.</a><br><br> <a href="login.php" target="_blank">Login into the website.</a></html>
1.註冊功能:
首先要選擇角色類型:(這個功能是剛開始練習做的,其實應該把角色選擇和註冊功能都放在一個頁面裡,現在分為了三個,分別是選擇,管理員註冊和用戶註冊,比較麻煩。 #
<html><head> <meta charset="utf-8"> <title>Sign in to phone website</title></head> <h1 id="Choose-nbsp-your-nbsp-charactor">Choose your charactor</h1> Please choose which kind of charactor you want to sign in? <form action="chooseCharactor.php" method="get"> <select name="q"> <option value="">Choose charactor</option> <option value="admin">Admin</option> <option value="user">User</option> </select><br> <input type="submit" value="Submit"> </form></html>chooseCharacter.php
//選擇對應的角色後,會跳到不同角色的註冊介面
<!DOCTYPE html><html><head> <title>Choose charactor</title></head><body> <?php $q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : ''; if($q == "") { echo "You must choose a charactor!"; }else if($q != ""){ if($q =='admin') { header('Location: adminSign.html'); } else if($q =='user') { header('Location: sign.html'); } } ?></body></html>
1)管理員註冊:
adminSign.html
<html><head> <meta charset="utf-8"> <title>Sign in to phone website as admin user</title></head> <h1 id="Sign-nbsp-in">Sign in</h1> <form action="adminSign.php" method="post"> User name:<input type="text" name="username"><br> User password:<input type="password" name="psw"><br> Confirm user password:<input type="password" name="cofpsw"><br> Invitation number:<input type="text" name="invtnum"><br> <input type="submit" name="submit"> </form> If you have already signed in, please click here to login.<br> <a href="login.html" target="_blank">Login into the website.</a></html>
adminSign.php
//處理管理員註冊請求
<!DOCTYPE html><html><head> <title>Sign in the phone web as admin user, success!</title></head><body> <?php include 'executeSql.php'; $userName = $_POST["username"]; $pwd = $_POST["psw"]; $cofPsw = $_POST["cofpsw"]; $invtNum = $_POST["invtnum"]; if($userName == ""||$pwd == ""||$cofPsw == ""|| $invtNum == ""){ echo "None of the value can be empty!"; }else if($pwd != $cofPsw){ echo "The password entered for two time is not same!"; }else if($invtNum != "SN90IE58KP"){ echo "The invitation number is wrong!"; }else{ echo "All values are right, your have sucessfully sign in as admin user!"; $sql = "INSERT INTO admin_info (admin_name,admin_pwd) VALUES('" . $userName . "','" . $pwd . "');"; //$sql = "INSERT INTO admin_info (admin_name,admin_pwd) VALUES('superadmin','admin123');"; //echo $sql; executeSql($sql); } ?></body></html>
2)使用者註冊
sign.html
<html><head><meta charset="utf-8"><title>Sign in to phone website</title></head> <h1 id="Sign-nbsp-in">Sign in</h1><form action="sign.php" method="post"> User name:<input type="text" name="username"><br> User password:<input type="password" name="psw"><br> Confirm user password:<input type="password" name="cofpsw"><br> Phone:<input type="text" name="phone"><br> Email:<input type="email" name="email"><br> <input type="submit" name="submit"></form></html>
sign.php
//處理使用者註冊請求,收集基本資訊並加入資料庫。如果有資料缺失,則無法註冊,對兩個輸入的密碼做了基本的偵測,並偵測郵箱格式的正確性。 //註冊後會跳到login.php介面,但因為一般使用者註冊後,會自動為目前使用者登錄,並在目前的cookie中儲存使用者登入的狀態,因此不需要再登入一次,可以直接由網頁連結跳到手機購買介面。
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Sign in sucess!</title> <style> .button { background-color: #4CAF50; border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; } .table{ border-style:solid; border-color:#98bf21; align-self: center; align-items: center; } /*.pcss5-right{width:320px; height:120px;border:1px solid #F00;float:right} */ .pcss5-right{float:right;} /* css注释:对pcss5-right设置float:right即可让对象靠右浮动 */ </style></head><body> <?php function executeSql($sql){ $flag = false; $feedback = array(); if($sql == ""){ echo "Error! Sql content is empty!"; }else{ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query_result=mysqli_query($conn,$sql);//query_result is a PHP array if($query_result){ $flag = true; $feedback = $query_result; //$num_rows=mysqli_num_rows($query_result); } return array($flag,$feedback); } } $userName = $_POST["username"]; $pwd = $_POST["psw"]; $cofPsw = $_POST["cofpsw"]; $phone = $_POST["phone"]; $email = $_POST["email"]; if($userName == "" || $pwd == "" || $cofPsw == "" || $phone == "" || $email == ""){ echo "None of the value can be empty!"; } else if($pwd != $cofPsw){ echo "The password entered for two time is not same!"; }else if ($pwd == $cofPsw){ $sql = "INSERT INTO user_info (u_name,u_pwd,u_phone,u_email) VALUES('" .$userName ."','" . $pwd ."','" . $phone . "','" . $email . "');"; $result = executeSql($sql); if($result){ $select_sql = "SELECT u_id FROM user_info WHERE u_name = '".$userName."';"; $result = executeSql($select_sql); if($result[0]){ setcookie('login_status',true); while($row = mysqli_fetch_assoc($result[1])){ $u_id=$row["u_id"]; setcookie('u_id',$u_id); } header("location:login.php"); } } } ?></body></html>
2.登入功能:
login.php
//使用者登入的介面,可以選擇管理員使用者登入和一般使用者登入。
作為管理員使用者登入後,跳到產品管理介面。以一般使用者登入後,跳到網站首頁,即手機購買介面。<html><head><meta charset="utf-8"><title>Login in to phone website</title><style> .button { background-color: #4CAF50; border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; align-self:right; float: left; } .body{font-family:Arial,Helvetica,sans-serif;font-size:20px;} </style><h2 id="User-nbsp-Login">User Login</h2></head> <body class = "body"> <?php if(isset($_COOKIE['login_status'])){ echo "Login already."; ?> <br> <br> <a href='showPhones.php'>Click here to buy phones.</a> <?php }else{ ?> <form action="process_login.php" method="post"> <select name="character"> <option value="">Choose your character</option> <option value="admin">admin</option> <option value="user">user</option> </select><br> User name:<input type="text" name="username"><br> User password:<input type="password" name="psw"><br> <input type="submit" class = "button" name="submit" value="Choose"> </form> <?php } ?> </body></html>
process_login.php//處理登入要求
<!DOCTYPE html><html><body> <?php function executeSql($sql){ $flag = false; $feedback = array(); if($sql == ""){ echo "Error! Sql content is empty!"; }else{ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query_result=mysqli_query($conn,$sql);//query_result is a PHP array if($query_result){ $flag = true; $feedback = $query_result; //$num_rows=mysqli_num_rows($query_result); } return array($flag,$feedback); } } $userName = $_POST["username"]; $pwd = $_POST["psw"]; if(isset($_POST["submit"])){ $selected_Charactor = $_POST["character"]; }else{ echo "You have choose the wrong charactor!"; echo "<br>"; } if($userName == ""||$pwd == ""){ echo "None of the value can be empty!"; echo "<br>"; } //declare the sql var and decides the value //$sql; if($selected_Charactor == "admin"){ $sql = "SELECT admin_id FROM admin_info WHERE admin_name = '" . $userName . "' and admin_pwd = '". $pwd ." ' ;" ; $result = executeSql($sql); if ($result[0]) { header('Location: p_manage.php'); } else { echo "Error! Something wrong in your username or password!"; echo "<br>"; } }else if($selected_Charactor == "user"){ $sql = "SELECT u_id FROM user_info WHERE u_name = '" . $userName ."' and u_pwd = '".$pwd."' ;" ; $result = executeSql($sql); if($result[0]){ setcookie('login_status',true); while ($row = mysqli_fetch_assoc($result[1])){ $u_id=$row["u_id"]; setcookie('u_id',$u_id); } header('Location: showPhones.php'); }else{ echo "Error! Something wrong in your username or password!"; echo "<br>"; } } ?></body></html>3.手機產品管理(管理員):1) 增加新的手機:
add_product. html
//增加新的手機庫存<html><head> <title>Add new product</title> <style> .button { background-color: #4CAF50; border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; align-self:right; float: right; } .table{ border-style:solid; border-color:#98bf21; align-self: center; align-items: center; width: "12%"; height: "20%"; } </style></head><h1 id="Hello-nbsp-admin-nbsp-user-nbsp-you-nbsp-can-nbsp-add-nbsp-a-nbsp-new-nbsp-product-nbsp-into-nbsp-database">Hello admin user, you can add a new product into database!</h1><body> <form action="add_product.php" method="post"> <table align="center" class = "table" border="1"> <th>Product Name</th> <th>Product Brand</th> <th>Product Type</th> <th>Product Price</th> <th>Product Inventory</th> <th>Product Description</th> <th>Product Color</th> <th>Product Url</th> <tr> <td><input type="text" name="name"></td> <td><input type="text" name="brand"></td> <td><input type="text" name="type"></td> <td><input type="text" name="price"></td> <td><input type="text" name="inventory"></td> <td><input type="text" name="descr"></td> <td><input type="text" name="color"></td> <td><input type="text" name="url"></td> </tr> </table> <input type="submit" class = "button" name="submit" value="Submit"> </form></body></html>
add_product.php
//處理增加請求
<!DOCTYPE html><html><head> <title>Add new product</title></head><body> <?php function executeSql($sql){ $flag = false; if($sql == ""){ echo "Error! Sql content is empty!"; echo "<br>"; }else{ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检测连接 if ($conn->connect_error) { die("Fail to connect!: " . $conn->connect_error); } //执行sql语句 if ($conn->query($sql) === TRUE) { $flag = TRUE; } else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close(); return $flag; } } $p_name=$_POST["name"]; $p_brand=$_POST["brand"]; $p_type=$_POST["type"]; $p_price=$_POST["price"]; $p_inventory=$_POST["inventory"]; $p_descr=$_POST["descr"]; $p_color=$_POST["color"]; $p_image_url=$_POST["url"]; if($p_name ==""||$p_brand ==""||$p_type ==""||$p_price ==""||$p_inventory ==""||$p_descr ==""||$p_color ==""){ echo "You can not provide empty values!"; }else{ $sql = "INSERT INTO product_info(p_name,p_brand,p_type,p_price,p_descr,p_color,p_image_url) VALUES ('".$p_name."','".$p_brand."','".$p_type."','".$p_price."','".$p_descr."','".$p_color."','".$p_image_url."');"; $result = executeSql($sql); if($result){ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; // 创建连接 $conn = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $select_sql = "SELECT * FROM product_info WHERE p_name = '".$p_name."';"; $result=mysqli_query($conn,$select_sql);//result is a PHP array var_dump($result); $num_rows=mysqli_num_rows($result); //echo $num_rows; mysqli_close($conn); while ($row = mysqli_fetch_assoc($result)){ $p_id=$row["p_id"]; $insert_sql = "INSERT INTO stock_info(p_id,p_inventory) VALUES (".$p_id.",".$p_inventory.");"; $feedback = executeSql($insert_sql); if($feedback){ header("location:p_manage.php"); } } } } ?><br></body></html>
2)管理员管理手机(查看,删除,etc)
p_manage.php
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Read product information from database</title> <style> .button { background-color: #4CAF50; border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; align-self:right; float: right; } .table{ border-style:solid; border-color:#98bf21; align-self: center; align-items: center; width: "10%"; } a:link {color:#000000;} /* 未访问链接*/ a:visited {color:#4CAF50;} /* 已访问链接 */ a:hover {color:#4CAF50;} /* 鼠标移动到链接上 */ a:active {color:#0000FF;} /* 鼠标点击时 */ </style></head> <h1 id="Welcome-nbsp-Admin-nbsp-user-nbsp-This-nbsp-is-nbsp-the-nbsp-page-nbsp-of-nbsp-Product-nbsp-Management">Welcome! Admin user. This is the page of Product Management.</h1> <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script> <script> function newPage(){ window.location.assign("add_product.html") } function deleteProduct(p_id){ $.ajax({ type: "POST", url: "deleteProduct.php", data: "pid="+p_id, success: function(msg){ window.location.reload(); } }); } </script><body> <table border="1" align="center" class = "table"> <tr> <th align="center" width="10%">Product ID</th> <th align="center" width="10%">Product Name</th> <th align="center" width="10%">Product Brand</th> <th align="center" width="10%">Product Type</th> <th align="center" width="10%">Product Price</th> <th align="center" width="10%">Product Inventory</th> <th align="center" width="10%">Product Description</th> <th align="center" width="10%">Product Color</th> <th align="center" width="10%">Product Image</th> <th align="center" width="10%">Delete Product</th> </tr> <?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; // 创建连接 $conn = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $sql = "SELECT * FROM product_info;"; $result=mysqli_query($conn,$sql);//result is a PHP array $num_rows=mysqli_num_rows($result); //echo $num_rows; $i=0; while ($row = mysqli_fetch_assoc($result)){ $p_id=$row["p_id"]; $p_name=$row["p_name"]; $p_brand=$row["p_brand"]; $p_type=$row["p_type"]; $p_price=$row["p_price"]; $p_inventory=0; $select_sql = "SELECT p_inventory FROM stock_info WHERE p_id = ".$p_id.";"; $select_result=mysqli_query($conn,$select_sql); $select_num_rows=mysqli_num_rows($result); if($select_num_rows){ while($select_rows = mysqli_fetch_assoc($select_result)){ $p_inventory=$select_rows["p_inventory"]; } }else{ echo "not fetch"; } $p_descr=$row["p_descr"]; $p_color=$row["p_color"]; $p_image_url = $row["p_image_url"]; echo "<tr>"; echo "<td align='center'>".$p_id."</td>"; echo "<td align='center'>".$p_name."</td>"; echo "<td align='center'>".$p_brand."</td>"; echo "<td align='center'>".$p_type."</td>"; echo "<td align='center'>".$p_price."</td>"; echo "<td align='center'>".$p_inventory."</td>"; echo "<td align='center'>".$p_descr."</td>"; echo "<td align='center'>".$p_color."</td>"; //$image = 'https://cdn2.gsmarena.com/vv/pics/apple/apple-iphone-x-new-1.jpg'; $imageData = base64_encode(file_get_contents($p_image_url)); //var_dump($imageData); //echo '<p class="img">'; echo '<td align="center"><img src="/static/imghwm/default1.png" data-src="data:image/jpeg;base64,'.$imageData.'" class="lazy" alt="Forest" style="max-width:90%" style="max-width:90%"></td>'; //echo '</p>'; //echo "<td><input type='button' value='Delete' onclick='deleteProduct(".$p_id.")'></td>"; ?> <td align="center"><a href='deleteProduct.php?goods_id=<?php echo $p_id; ?>'>Delete</a></td> <?php echo "</tr>"; $i++; } mysqli_close($conn); ?> </table> <br><br> <p class="pcss5-right"> <input type="button" class = "button" value="Add new product" onclick="newPage()"> </p></body></html>
界面如图所示(缩小版的界面)
4.用户购买手机
手机展示界面,并可实现增加产品到购物车,没有实现批量添加,每点击一次手机产品对应的添加按钮,则购物车中增加一条该产品的记录。
添加后会在购物车功能模块处理,如果已经添加够了,也可以直接点击页面最下方的链接,查看购物车。
showPhones.php
//代码和p_manage.php类似,有些功能类似或重合
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Product information</title> <style> .button { background-color: #4CAF50; border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; align-self:right; float: right; } .table{ border-style:solid; border-color:#98bf21; align-self: center; align-items: center; width: "10%"; } .body{font-family:Arial,Helvetica,sans-serif;font-size:20px;} a:link {color:#000000;} /* 未访问链接*/ a:visited {color:#4CAF50;} /* 已访问链接 */ a:hover {color:#4CAF50;} /* 鼠标移动到链接上 */ a:active {color:#0000FF;} /* 鼠标点击时 */ </style></head> <h2 id="Welcome-nbsp-You-nbsp-can-nbsp-buy-nbsp-your-nbsp-own-nbsp-phone-nbsp-here">Welcome! You can buy your own phone here.</h2><body class="body"> <table border="1" class="table" align='center'> <tr> <th align='center' width="10%">Product Name</th> <th align='center' width="10%">Product Brand</th> <th align='center' width="10%">Product Type</th> <th align='center' width="10%">Product Price</th> <th align='center' width="10%">Product Inventory</th> <th align='center' width="10%">Product Description</th> <th align='center' width="10%">Product Color</th> <th align='center' width="10%">Product Image</th> <th align='center' width="10%">Add to Cart</th> </tr> <?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; // 创建连接 $conn = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $sql = "SELECT * FROM product_info;"; $result=mysqli_query($conn,$sql);//result is a PHP array $num_rows=mysqli_num_rows($result); //echo $num_rows; $i=0; while ($row = mysqli_fetch_assoc($result)){ $p_id=$row["p_id"]; $p_name=$row["p_name"]; $p_brand=$row["p_brand"]; $p_type=$row["p_type"]; $p_price=$row["p_price"]; $p_inventory=0; $select_sql = "SELECT p_inventory FROM stock_info WHERE p_id = ".$p_id.";"; $select_result=mysqli_query($conn,$select_sql); $select_num_rows=mysqli_num_rows($result); if($select_num_rows){ while($select_rows = mysqli_fetch_assoc($select_result)){ $p_inventory=$select_rows["p_inventory"]; } }else{ echo "not fetch"; } $p_descr=$row["p_descr"]; $p_color=$row["p_color"]; $p_image_url = $row["p_image_url"]; echo "<tr>"; echo "<td align='center'>".$p_name."</td>"; echo "<td align='center'>".$p_brand."</td>"; echo "<td align='center'>".$p_type."</td>"; echo "<td align='center'>".$p_price."</td>"; echo "<td align='center'>".$p_inventory."</td>"; echo "<td align='center'>".$p_descr."</td>"; echo "<td align='center'>".$p_color."</td>"; //$image = 'https://cdn2.gsmarena.com/vv/pics/apple/apple-iphone-x-new-1.jpg'; $imageData = base64_encode(file_get_contents($p_image_url)); //var_dump($imageData); echo '<td align="center"><img src="/static/imghwm/default1.png" data-src="data:image/jpeg;base64,'.$imageData.'" class="lazy" alt="PHP實作購物網站" ></td>'; ?> <td><a align='center' href='process_shopCart.php?goods_id=<?php echo $p_id; ?>&goods_name=<?php echo $p_name; ?>'>addCart</a></td><?php echo "</tr>"; $i++; } mysqli_close($conn); ?> </table> <br><br> <a align='right' href='view_shopCart.php'>Enough adding, click here to shopcart.</a> <br><br><br></body></html>
5.购物车
1)process_shopCart.php//处理添加请求
<!DOCTYPE html> <html> <head> <title>All fees of shipment.</title> </head> <body> <?php function executeSql($sql){ $flag = false; $feedback = array(); if($sql == ""){ echo "Error! Sql content is empty!"; }else{ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query_result=mysqli_query($conn,$sql);//query_result is a PHP array if($query_result){ $flag = true; $feedback = $query_result; //$num_rows=mysqli_num_rows($query_result); } return array($flag,$feedback); } } $unitPrice = 0.0; if(isset($_POST["submit"])){ $orignLocation = $_POST["orgn_location"]; $targetLocation = $_POST["trgt_location"]; $company = $_POST["company"]; if($company == "shun_feng"){$unitPrice = 80.0;setcookie("shipment_way",$company);} if($company == "zhong_tong"){$unitPrice = 40.0;setcookie("shipment_way",$company);} if($company == "yuan_tong"){$unitPrice = 50.0;setcookie("shipment_way",$company);} if($company == "yun_da"){$unitPrice = 39.8;setcookie("shipment_way",$company);} if($company == "shen_tong"){$unitPrice = 57.6;setcookie("shipment_way",$company);} $totalItem = $_COOKIE['total_item']; $shipmentPrice = $unitPrice * $totalItem; $numbers = range (1,1000000); //shuffle 将数组顺序随即打乱 shuffle ($numbers); //array_slice 取该数组中的某一段 $num=1; $result = array_slice($numbers,0,$num); $d_random = $result[0]; $sql = "INSERT INTO delivery_info (d_company, d_init_add, d_trgt_add, d_price, d_random) VALUES ('".$company."', '".$orignLocation."', '".$targetLocation."',".$shipmentPrice.",".$d_random.");"; $result = executeSql($sql); if($result[0]){ setcookie('shipment_price',$shipmentPrice); $select_sql = "SELECT d_id FROM delivery_info WHERE d_random = ".$d_random.";"; $select_result = executeSql($select_sql); if($select_result[0]){ while ($row = mysqli_fetch_assoc($select_result[1])){ //var_dump($row); $d_id=$row["d_id"]; setcookie('d_id',$d_id); setcookie('shipment_status',true); } } } } header("location:payInfo.php"); ?></body> </html>
2)view_shopCart.php//查看购物车
<?php session_start(); ?><html><head> <meta charset="utf-8"> <title>Shop cart</title></head><h1 id="View-nbsp-your-nbsp-shop-nbsp-cart-nbsp-here">View your shop cart here.</h1><body> <table border="1"> <tr> <th>Product Name</th> <th>Product Brand</th> <th>Product Price</th> <th>Product Description</th> <th>Product Color</th> <th>Counts</th> <th>Delete from Cart</th> </tr> <?php $totalPrice = 0; $totalItem = 0; $p_info = 0; if(isset($_SESSION['shop-cart'])){ foreach ($_SESSION['shop-cart'] as $item){ $p_id = $item[0]; $p_name = $item[1]; $goods_num = $item[2]; $p_info = $p_info.$p_id.",".$goods_num."/"; $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $sql = "SELECT * FROM product_info WHERE p_id =".$p_id.";"; $result=mysqli_query($conn,$sql);//result is a PHP array $num_rows=mysqli_num_rows($result); //echo $num_rows; mysqli_close($conn); while ($row = mysqli_fetch_assoc($result)){ $p_brand=$row["p_brand"]; $p_type=$row["p_type"]; $p_price=$row["p_price"]; //$p_inventory=$row["p_inventory"]; $p_descr=$row["p_descr"]; $p_color=$row["p_color"]; echo "<tr>"; echo "<td>".$p_name."</td>"; echo "<td>".$p_brand."</td>"; echo "<td>".$p_price."HKD</td>"; echo "<td>".$p_descr."</td>"; echo "<td>".$p_color."</td>"; echo "<td>".$goods_num."</td>"; ?> <td><a href='delCart.php?goods_id=<?php echo $p_id; ?>'>Delete</a></td> <?php echo "</tr>"; $singlePrice = $p_price * $goods_num; $totalPrice = $totalPrice + $singlePrice; $totalItem = $totalItem + $goods_num; setcookie("total_item",$totalItem); setcookie("phones_price",$totalPrice); } } //echo $p_info; setcookie('p_info',$p_info); ?> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td><a href='clearCart.php?goods_id=<?php echo $p_id; ?>'>Clear cart</a></td> <td> <?php echo "".$totalItem." Items. "; echo "Totol prize: ".$totalPrice." HKD"; ?> </td> </tr> </table> <br> <a href='shipment.php'>Shipment</a> <br> <?php }else{ echo "The shop cart is empty!"; ?> <br><br> <a href='showPhones.php'>Back to add goods</a> <?php } ?></body></html>
购物车如下图:
购物车中会展示所有产品的信息,并计算他们的总价格。
3)delCart.php
//如果用户在查看购物车时点击删除某项产品,将该产品从购物车中全部删除
<?phpsession_start();//$p_name = $_GET["goods_name"];$p_id = $_GET["goods_id"];$goods_num = 1;function id_inarray($findID, $cart_array){ $flag = false; $counter = 0; foreach ($cart_array as $itemList) { if (strcmp($itemList[0], $findID) == 0) { $flag = true; break; } $counter++; } return array($flag, $counter); }$result = id_inarray($p_id,$_SESSION['shop-cart']);if($result[0]){ //如果存在该项,从session中删除 if(isset($result[1])){ unset($_SESSION['shop-cart'][$result[1]]); $_SESSION['shop-cart'] = array_values($_SESSION['shop-cart']); } }else{ echo "Cannot delete non-existent items!"; } header("location:view_shopCart.php");?>
4)clearCart.php
//如果用户在查看购物车时,点击了清空购物车,将当前购物车中内容全部清空
<?phpsession_start();$p_id = $_GET["goods_id"];echo $p_id;if(isset($_SESSION['shop-cart'])){ echo "destroy session"; echo "<br>"; echo "<br>"; $result = session_destroy(); }else{ echo "There is no goods in shop cart!"; }echo "<br>";echo $result;echo "<br>";echo "<br>"; var_dump($_SESSION); header("location:view_shopCart.php");?>
6.物流
点击购物车中的’shipment’,选择装运物流信息。
shipment.php
<html><head> <meta charset="utf-8"> <title>Shipment</title></head><?php if(isset($_COOKIE['shipment_status'])){ ?><h1 id="You-nbsp-have-nbsp-already-nbsp-fill-nbsp-the-nbsp-shipment-nbsp-information">You have already fill the shipment information</h1><body><a href='payInfo.php'>Click here to pay</a></body><?php } else{ ?><h1 id="Choose-nbsp-your-nbsp-shipment-nbsp-way">Choose your shipment way</h1><body> <form action="process_shipment.php" method="post"> <table> <th>Delivery Company</th> <th>Orign Location</th> <th>Target Location</th> <tr> <td> <select name="company"> <option value="">Choose Company</option> <option value="shun_feng">Shun Feng</option> <option value="zhong_tong">Zhong Tong</option> <option value="yuan_tong">Yuan Tong</option> <option value="yun_da">Yun Da</option> <option value="shen_tong">Shen Tong</option> </select><br> </td> <td><input type="text" name="orgn_location"></td> <td><input type="text" name="trgt_location"></td> </tr> </table> <input type="submit" name="submit" value="Submit"> </form></body><?php } ?></html>
process_shipment.php
//处理物流信息请求
<!DOCTYPE html><html><head> <title>All fees of shipment.</title></head><body> <?php function executeSql($sql){ $flag = false; $feedback = array(); if($sql == ""){ echo "Error! Sql content is empty!"; }else{ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query_result=mysqli_query($conn,$sql);//query_result is a PHP array if($query_result){ $flag = true; $feedback = $query_result; //$num_rows=mysqli_num_rows($query_result); } return array($flag,$feedback); } } $unitPrice = 0.0; if(isset($_POST["submit"])){ $orignLocation = $_POST["orgn_location"]; $targetLocation = $_POST["trgt_location"]; $company = $_POST["company"]; if($company == "shun_feng"){$unitPrice = 80.0;setcookie("shipment_way",$company);} if($company == "zhong_tong"){$unitPrice = 40.0;setcookie("shipment_way",$company);} if($company == "yuan_tong"){$unitPrice = 50.0;setcookie("shipment_way",$company);} if($company == "yun_da"){$unitPrice = 39.8;setcookie("shipment_way",$company);} if($company == "shen_tong"){$unitPrice = 57.6;setcookie("shipment_way",$company);} $totalItem = $_COOKIE['total_item']; $shipmentPrice = $unitPrice * $totalItem; $numbers = range (1,1000000); //shuffle 将数组顺序随即打乱 shuffle ($numbers); //array_slice 取该数组中的某一段 $num=1; $result = array_slice($numbers,0,$num); $d_random = $result[0]; $sql = "INSERT INTO delivery_info (d_company, d_init_add, d_trgt_add, d_price, d_random) VALUES ('".$company."', '".$orignLocation."', '".$targetLocation."',".$shipmentPrice.",".$d_random.");"; $result = executeSql($sql); if($result[0]){ setcookie('shipment_price',$shipmentPrice); $select_sql = "SELECT d_id FROM delivery_info WHERE d_random = ".$d_random.";"; $select_result = executeSql($select_sql); if($select_result[0]){ while ($row = mysqli_fetch_assoc($select_result[1])){ //var_dump($row); $d_id=$row["d_id"]; setcookie('d_id',$d_id); setcookie('shipment_status',true); } } } } header("location:payInfo.php"); ?></body></html>
物流选择界面如图:
7.支付
1)payInfo.php
//计算商品和物流的总价格并展示,让用户选择支付方式。如果已经选择了支付方式(检查cookie中的值),提升已经选择,并且给出跳转动支付页面的链接。否则让用户选择支付方式,提供了四种,微信,支付宝,信用卡和中国银联,默认选项为支付宝
<html><head> <meta charset="utf-8"> <title>Shop cart</title></head><h1 id="Total-nbsp-money-nbsp-here-nbsp-please-nbsp-fill-nbsp-your-nbsp-payment-nbsp-information">Total money here, please fill your payment information.</h1><body> <?php if(isset($_COOKIE['pay_way'])){ echo "You have fill the payment information."; ?> <br> <a href='pay_money.php'>Click here to continue</a> <?php } else{ ?> <table border="1"> <tr> <th>Total Item</th> <th>Phones Price</th> <th>Shipment Way</th> <th>Shipment Price</th> <th>Total Price</th> </tr> <?php $total_item = $_COOKIE['total_item']; $shipment_price = $_COOKIE['shipment_price']; $shipment_way = $_COOKIE['shipment_way']; $phonesPrice = $_COOKIE['phones_price']; $totalPrice = $shipment_price + $phonesPrice; echo "<tr>"; echo "<td>".$total_item."</td>"; echo "<td>".$phonesPrice."</td>"; echo "<td>".$shipment_way."</td>"; echo "<td>".$shipment_price."</td>"; echo "<td>".$totalPrice."</td>"; echo "</tr>"; ?> </table> <br> <form action="payway.php" method="post"> <input type="radio" name="payway" value="Alipay" checked="">Alipay <input type="radio" name="payway" value="WeChatPay">WeChatPay <input type="radio" name="payway" value="Credit">Credit card <input type="radio" name="payway" value="UnionPay">UnionPay<br> <table border = '1'> <tr> <th>Pay user</th> <th>Pay account</th> <th>Receive user</th> <th>Receive account</th> </tr> <tr> <th><input type="text" name="payuser"></th> <th><input type="text" name="payaccount"></th> <th><input type="text" name="receiveuser"></th> <th><input type="text" name="receiveaccount"></th> </tr> </table> <input type="submit" value="Submit"> </form><?php } ?></body></html>
界面如图:
2)pay_way.php
//将用户支付信息填入数据库表中,并跳转到pay_money.php
<?phpfunction executeSql($sql){ $flag = false; $feedback = array(); if($sql == ""){ echo "Error! Sql content is empty!"; }else{ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query_result=mysqli_query($conn,$sql);//query_result is a PHP array if($query_result){ $flag = true; $feedback = $query_result; //$num_rows=mysqli_num_rows($query_result); } return array($flag,$feedback); } } $payWay = $_POST['payway']; $payUser = $_POST['payuser']; $payAccount = $_POST['payaccount']; $receiveUser = $_POST['receiveuser']; $receiveAccount = $_POST['receiveaccount']; $payStatus = false; $numbers = range (1,1000000); shuffle ($numbers); $num=1; $result = array_slice($numbers,0,$num); $pay_random = $result[0]; if($payUser == "" ||$payAccount == "" || $receiveUser == "" || $receiveAccount == ""){ echo "You must fill the blanks."; }else{ $sql = "INSERT INTO payment_info (pay_user, receive_user, pay_account, receive_account,pay_way,pay_status,pay_random) VALUES ('".$payUser."', '".$receiveUser."', ".$payAccount.",".$receiveAccount.",'".$payWay."','".$payStatus."',".$pay_random.");"; $result = executeSql($sql); if($result[0]){ $select_sql = "SELECT pay_id FROM payment_info WHERE pay_random = ".$pay_random.";"; $select_result = executeSql($select_sql); if($select_result[0]){ while ($row = mysqli_fetch_assoc($select_result[1])){ $pay_id=$row["pay_id"]; setcookie('pay_id',$pay_id); } } setcookie('pay_way',$payWay); } header("location:pay_money.php"); }?>
3)pay_money.php
//根据payInfo.php中选择的支付方式,打开相应的界面,让用户登录并付钱。
然后将订单信息全部丢给process_order.php处理
//这里有一点需要特别说明的是,因为这是一个练习,数据都是虚拟的,所以无法从支付宝或者微信,银联等获知用户支付已经支付成功,所以这里将是否已经支付的判定设置为,只要用户填写了付款信息,并点击付款,打开了支付页面,这里就在cookie中设置为已支付状态
<?php function executeSql($sql){ $flag = false; $feedback = array(); if($sql == ""){ echo "Error! Sql content is empty!"; }else{ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query_result=mysqli_query($conn,$sql);//query_result is a PHP array if($query_result){ $flag = true; $feedback = $query_result; //$num_rows=mysqli_num_rows($query_result); } return array($flag,$feedback); } }if(isset($_COOKIE['pay_way'])){ $payWay = $_COOKIE['pay_way']; }else{ echo "Error!"; }if($payWay == "Alipay"){ echo "<script>window.open('https://auth.alipay.com/login/index.htm?goto=https%3A%2F%2Fmy.alipay.com%2Fportal%2Fi.htm')</script>"; //$image_url = "https://www.hkelectric.com/zh/CustomerServices/PublishingImages/Alipay_Download_QR.jpg"; //$imageData = base64_encode(file_get_contents($image_url)); //echo '<img src="/static/imghwm/default1.png" data-src="data:image/jpeg;base64,'.$imageData.'" class="lazy" alt="PHP實作購物網站" >'; }else if($payWay == "WeChatPay"){ //$image_url = "https://3.bp.blogspot.com/-ymZs4Aij_f8/WnXUq9v5Z9I/AAAAAAAAFeA/Zrnru65sDLEgGbVbJ_KevD9_izoL3YO5wCLcBGAs/s1600/wechat.jpg"; //$imageData = base64_encode(file_get_contents($image_url)); //var_dump($imageData); //echo '<img src="/static/imghwm/default1.png" data-src="data:image/jpeg;base64,'.$imageData.'" class="lazy" alt="PHP實作購物網站" >'; echo "<script>window.open('https://pay.weixin.qq.com/index.php/public/wechatpay')</script>"; }else if($payWay == "Credit"){ echo "<script>window.open('https://bank.hangseng.com/1/2/chi/e-services/personal-ebanking/hk-personal-ebanking')</script>"; }else if($payWay == "UnionPay"){ echo "<script>window.open('https://cn.unionpay.com/front.do')</script>"; } setcookie('pay_status',true);$sql = "UPDATE payment_info SET pay_status=1 WHERE pay_id = ".$_COOKIE['pay_id'].";";$result = executeSql($sql);if($result[0]){ echo "<br>"; echo "<br>"; echo "<a href='process_order.php'>Click here to see order information.</a>"; }else{ echo "You have to pay first!"; } ?>
8.查看交易信息并导出报告
1)process_order.php
//将订单的信息填入到数据库表中
<!DOCTYPE html> <html> <head> <title>Order information</title> </head> <body> <?php function executeSql($sql){ $flag = false; $feedback = array(); if($sql == ""){ echo "Error! Sql content is empty!"; }else{ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query_result=mysqli_query($conn,$sql);//query_result is a PHP array if($query_result){ $flag = true; $feedback = $query_result; //$num_rows=mysqli_num_rows($query_result); } return array($flag,$feedback); } } function infoSplit($p_info){ $result = array(); $single_info = explode("/", $p_info); foreach($single_info as $val){ $single_result = array(); $details = explode(",",$val); foreach ($details as $value){ array_push($single_result, $value); } array_push($result, $single_result); } array_pop($result); return $result; } $u_id = $_COOKIE['u_id']; $d_id = $_COOKIE['d_id']; $pay_id = $_COOKIE['pay_id']; $p_info = $_COOKIE['p_info']; echo $p_info; $o_date = date("Y-m-d H:i:s"); $o_id = 0; //echo gettype($o_date); $sql = "INSERT INTO order_info (u_id,d_id,o_date,pay_id) VALUES(".$u_id.",".$d_id.",'".$o_date."',".$pay_id.");"; $insert_result = executeSql($sql); if($insert_result[0]){ $select_sql = "SELECT o_id FROM order_info WHERE pay_id = ".$pay_id.";"; $select_result = executeSql($select_sql); if($select_result[0]){ while($row = mysqli_fetch_assoc($select_result[1])){ $o_id=$row["o_id"]; setcookie('o_id',$o_id); } } } $split_result = infoSplit($p_info); //var_dump($split_result); for($i = 0; $i < count($split_result);$i++){ $p_id = $split_result[$i][0]; $p_num = $split_result[$i][1]; $p_inventory = 0; $insert_order_sql = "INSERT INTO orderDetailRecord_info (o_id,p_id,p_num) VALUES(".$o_id.",".$p_id.",".$p_num.");"; $insert_order_result = executeSql($insert_order_sql); if($insert_order_result[0]){ //select product num from stock_info and update $select_stock_num_sql = "SELECT p_inventory FROM stock_info WHERE p_id = ".$p_id.";"; $select_stock_num_result = executeSql($select_stock_num_sql); if($select_stock_num_result[0]){ while($row = mysqli_fetch_assoc($select_stock_num_result[1])){ $p_inventory = $row['p_inventory']; } } //update p_inventory $p_inventory = $p_inventory - $p_num; $update_sql = "UPDATE stock_info SET p_inventory = '".$p_inventory."' WHERE p_id = '".$p_id."';"; $update_result = executeSql($update_sql); if($update_result[0]){ header('location:view_order.php'); } } } ?> </body> </html>
2)view_order.php
//查看订单信息,并给出生成报告的链接
<!DOCTYPE html> <html> <head> <title>Order Information</title> </head> <body> <?php if($_COOKIE['pay_status']){ $o_id = $_COOKIE['o_id']; $u_id = $_COOKIE['u_id']; $tracking_num = $_COOKIE['d_id']; $pay_id = $_COOKIE['pay_id']; $total_item = $_COOKIE['total_item']; $phones_price = $_COOKIE['phones_price']; $shipment_price = $_COOKIE['shipment_price']; $total_price = $phones_price + $shipment_price; $pay_status = $_COOKIE['pay_status']; ?> <table border="1"> <caption><h2 id="Order-nbsp-information">Order information</h2></caption> <tr> <th>Order id</th> <th>User</th> <th>Tracking Number</th> <th>Product Price</th> <th>Delivery Price</th> <th>Total Items</th> <th>Total Price</th> <th>Payment ID</th> <th>Pay Status</th> </tr> <?php echo "<tr>"; echo "<td>".$o_id."</td>"; echo "<td>".$u_id."</td>"; echo "<td>".$tracking_num."</td>"; echo "<td>".$phones_price."HKD</td>"; echo "<td>".$shipment_price."HKD</td>"; echo "<td>".$total_item."</td>"; echo "<td>".$total_price."HKD</td>"; echo "<td>".$pay_id."</td>"; if($pay_status){ echo "<td>Paid</td>"; }else{ echo "<td>Not Paid</td>"; } echo "</tr>"; echo "</table>"; echo "<br>"; echo "<a href='eStockReport.php'>Export Product Report</a>"; echo "<br>"; echo "<br>"; echo "<a href='eOrderReport.php'>Export Order Report</a>"; echo "<br>"; echo "<br>"; echo "<a href='eDeliveryReport.php'>Export Delivery Report</a>"; }else{ header('location:payInfo.php'); } ?> </body> </html>
9.导出报告
1)eOrderReport.php
//导出订单报告
<!DOCTYPE html> <html> <head> <title>Export Report</title> </head> <body> <?php function executeSql($sql){ $flag = false; $feedback = array(); if($sql == ""){ echo "Error! Sql content is empty!"; }else{ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query_result=mysqli_query($conn,$sql);//query_result is a PHP array if($query_result){ $flag = true; $feedback = $query_result; //$num_rows=mysqli_num_rows($query_result); } return array($flag,$feedback); mysqli_close($conn); } } $myfile = fopen("OrderReport.txt", "w") or die("Unable to open file!"); $file_stream = null; $sql = "SELECT * FROM order_info;"; $result = executeSql($sql); if($result[0]){ $i=0; while ($row = mysqli_fetch_assoc($result[1])){ $o_id=$row["o_id"]; $u_id=$row["u_id"]; $d_id=$row["d_id"]; $o_date=$row["o_date"]; $pay_id=$row["pay_id"]; $file_stream = $file_stream."Order ID: ".$o_id."\n"; $file_stream = $file_stream."User ID: ".$u_id."\n"; $file_stream = $file_stream."Delivery ID: ".$d_id."\n"; $file_stream = $file_stream."Order Date: ".$o_date."\n"; $file_stream = $file_stream."Payment ID: ".$pay_id."\n"; $select_sql = "SELECT * FROM orderDetailRecord_info WHERE o_id = ".$o_id.";"; $select_result=executeSql($select_sql); if($select_result[0]){ $j = 0; while($select_rows = mysqli_fetch_assoc($select_result[1])){ $r_id=$select_rows["r_id"]; $p_id=$select_rows["p_id"]; $p_num=$select_rows["p_num"]; $file_stream = $file_stream."Product ID: ".$p_id." \t"; $file_stream = $file_stream."Product Number: ".$p_num."\n"; $j++; } }else{ echo "not fetch"; } $i++; $file_stream = $file_stream."\n\n\n"; } } //向文件中写入字符串 fwrite($myfile, $file_stream); //关闭文件句柄 fclose($myfile); header('location:view_order.php'); ?></body> </html>
2)eStockReport.php
//导出库存报告
<!DOCTYPE html> <html> <head> <title>Export Report</title> </head> <body> <?php $file_stream = null; function executeSql($sql){ $flag = false; $feedback = array(); if($sql == ""){ echo "Error! Sql content is empty!"; }else{ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query_result=mysqli_query($conn,$sql);//query_result is a PHP array if($query_result){ $flag = true; $feedback = $query_result; //$num_rows=mysqli_num_rows($query_result); } return array($flag,$feedback); mysqli_close($conn); } } $myfile = fopen("StockReport.txt", "w") or die("Unable to open file!"); $sql = "SELECT * FROM product_info;"; $result = executeSql($sql); if($result[0]){ $i=0; while ($row = mysqli_fetch_assoc($result[1])){ $p_id=$row["p_id"]; $p_name=$row["p_name"]; $p_brand=$row["p_brand"]; $p_type=$row["p_type"]; $p_price=$row["p_price"]; $p_inventory=0; $select_sql = "SELECT p_inventory FROM stock_info WHERE p_id = ".$p_id.";"; $select_result=executeSql($select_sql); if($select_result[0]){ while($select_rows = mysqli_fetch_assoc($select_result[1])){ $p_inventory=$select_rows["p_inventory"]; } }else{ echo "not fetch"; } $p_descr=$row["p_descr"]; $p_color=$row["p_color"]; $p_image_url = $row["p_image_url"]; //$imageData = base64_encode(file_get_contents($p_image_url)); $file_stream = $file_stream."Product ID: ".$p_id."\n"; $file_stream = $file_stream."Product Name: ".$p_name."\n"; $file_stream = $file_stream."Product Brand: ".$p_brand."\n"; $file_stream = $file_stream."Product Type: ".$p_type."\n"; $file_stream = $file_stream."Product Price: ".$p_price."\n"; $file_stream = $file_stream."Product Inventory: ".$p_inventory."\n"; $file_stream = $file_stream."Product Description: ".$p_descr."\n"; $file_stream = $file_stream."Product Color: ".$p_color."\n"; $file_stream = $file_stream."Product Image URL: ".$p_image_url."\n\n\n"; $i++; } } //向文件中写入字符串 fwrite($myfile, $file_stream); //关闭文件句柄 fclose($myfile); function php_sendmail($stream){ require('class.phpmailer.php'); //$mail->Host = "ssl://smtp.gmail.com"; $mail = new PHPMailer(); //实例化 $mail->IsSMTP(); // 启用SMTP //$mail->Host = "smtp.163.com"; //SMTP服务器 163邮箱例子 $mail->Host = "smtp.126.com"; //SMTP服务器 126邮箱例子 //$mail->Host = "smtp.qq.com"; //SMTP服务器 qq邮箱例子 $mail->Port = 25; //邮件发送端口 $mail->SMTPAuth = true; //启用SMTP认证 $mail->CharSet = "UTF-8"; //字符集 $mail->Encoding = "base64"; //编码方式 $mail->Username = "ninnyyan@126.com"; //你的邮箱 $mail->Password = "sandy.126"; //你的密码 $mail->Subject = "Product information updating"; //邮件标题 $mail->From = "ninnyyan@126.com"; //发件人地址(也就是你的邮箱) $mail->FromName = "ninny"; //发件人姓名 $address = "714921503@qq.com";//收件人email $mail->AddAddress($address, "feng"); //添加收件人1(地址,昵称) //$mail->AddAttachment('xx.xls','我的附件.xls'); // 添加附件,并指定名称 $mail->IsHTML(true); //支持html格式内容 //$mail->AddEmbeddedImage("logo.jpg", "my-attach", "logo.jpg"); //设置邮件中的图片 $mail->Body = $file_stream; //邮件主体内容 //发送if(!$mail->Send()){ echo "Fialed to send " . $mail->ErrorInfo; } else { echo "Successfully send the email!"; } } php_sendmail($file_stream); header('location:view_order.php');?></body> </html>
3)eDeliveryReport.php
//导出物流报告
<!DOCTYPE html> <html> <head> <title>Export Report</title> </head> <body> <?php function executeSql($sql){ $flag = false; $feedback = array(); if($sql == ""){ echo "Error! Sql content is empty!"; }else{ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query_result=mysqli_query($conn,$sql);//query_result is a PHP array if($query_result){ $flag = true; $feedback = $query_result; //$num_rows=mysqli_num_rows($query_result); } return array($flag,$feedback); mysqli_close($conn); } } $myfile = fopen("DeliveryReport.txt", "w") or die("Unable to open file!"); $file_stream = null; $sql = "SELECT * FROM delivery_info;"; $result = executeSql($sql); if($result[0]){ $i=0; while ($row = mysqli_fetch_assoc($result[1])){ $d_id=$row["d_id"]; $d_company=$row["d_company"]; $d_init_add=$row["d_init_add"]; $d_trgt_add=$row["d_trgt_add"]; $d_price=$row["d_price"]; $file_stream = $file_stream."Delivery ID: ".$d_id."\n"; $file_stream = $file_stream."Delivery Company: ".$d_company."\n"; $file_stream = $file_stream."Delivery Initial Address: ".$d_init_add."\n"; $file_stream = $file_stream."Delivery Target Address: ".$d_trgt_add."\n"; $file_stream = $file_stream."Delivery Price: ".$d_price."\n\n\n"; $i++; } } //向文件中写入字符串 fwrite($myfile, $file_stream); //关闭文件句柄 fclose($myfile); header('location:view_order.php'); ?></body> </html>
10.搜索功能
做了一个分类搜索的功能,用的就是数据库的模糊查询,很简单
1)search.html
//页面
<html><head><meta charset="utf-8"><title>Search phones</title></head> <h1 id="Search-nbsp-what-nbsp-you-nbsp-want">Search what you want</h1> <form action="search.php" method="post"> <select name="select_condition"> <option value="">Choose a condition</option> <option value="brand">Brand</option> <option value="name">Product Name</option> <option value="type">Type</option> <option value="color">Color</option> <option value="price">Price</option> </select><br><br> Enter your condition here:<br> <input type="text" name="value"><br><br> If you choose price, please enter the price range here:<br> Low range:<input type="text" name="low_range"><br> High range:<input type="text" name="high_range"><br> <input type="submit" name="submit" value="Submit"> </form></html>
2)search.php
//处理查询请求
<!DOCTYPE html> <html> <body><?php if(isset($_POST["submit"])){ $selected_Condition = $_POST["select_condition"]; }else{ echo "No condition selected!"; echo "<br>"; } if($selected_Condition == "brand"){ $value = $_POST["value"]; if($value ==""){ echo "The value can't be empty!"; echo "<br>"; }else{ $sql = "SELECT * FROM product_info WHERE p_brand LIKE '%".$value."%';"; showResult($sql); } }else if($selected_Condition == "name"){ $value = $_POST["value"]; if($value ==""){ echo "The value can't be empty!"; echo "<br>"; }else{ $sql = "SELECT * FROM product_info WHERE p_name LIKE '%".$value."%';"; showResult($sql); } }else if($selected_Condition == "type"){ $value = $_POST["value"]; if($value ==""){ echo "The value can't be empty!"; echo "<br>"; }else{ $sql = "SELECT * FROM product_info WHERE p_type LIKE '%".$value."%';"; showResult($sql); } }else if($selected_Condition == "color"){ $value = $_POST["value"]; if($value ==""){ echo "The value can't be empty!"; echo "<br>"; }else{ $sql = "SELECT * FROM product_info WHERE p_color LIKE '%".$value."%';"; showResult($sql); } }else if($selected_Condition == "price"){ $low_range = $_POST["low_range"]; $high_range = $_POST["high_range"]; if($low_range ==""||$high_range == ""){ echo "The range can't be empty!"; echo "<br>"; }else{ $sql = "SELECT * FROM product_info WHERE p_price BETWEEN ".$low_range." AND ".$high_range.";"; showResult($sql); } } function showResult($sql){ $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hw"; $conn = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result=mysqli_query($conn,$sql);//result is a PHP array $num_rows=mysqli_num_rows($result); mysqli_close($conn); if($num_rows == 0){ echo "There is no meeted results."; }else{ echo '<table border="1">'; echo "<tr>"; echo "<th>Product Name</th>"; echo "<th>Product Brand</th>"; echo "<th>Product Type</th>"; echo "<th>Product Price</th>"; echo "<th>Product Description</th>"; echo "<th>Product Color</th>"; echo "<th>Product Image</th>"; echo "</tr>"; $i=0; while ($row = mysqli_fetch_assoc($result)){ $p_name=$row["p_name"]; $p_brand=$row["p_brand"]; $p_type=$row["p_type"]; $p_price=$row["p_price"]; $p_descr=$row["p_descr"]; $p_color=$row["p_color"]; $p_image_url = $row["p_image_url"]; echo "<tr>"; echo "<td>".$p_name."</td>"; echo "<td>".$p_brand."</td>"; echo "<td>".$p_type."</td>"; echo "<td>".$p_price."</td>"; echo "<td>".$p_descr."</td>"; echo "<td>".$p_color."</td>"; $imageData = base64_encode(file_get_contents($p_image_url)); echo '<td><img src="/static/imghwm/default1.png" data-src="data:image/jpeg;base64,'.$imageData.'" class="lazy" alt="PHP實作購物網站" ></td>'; echo "</tr>"; $i++; } echo "</table>"; } }?></body> </html>
特别说明:
1)购物车用session实现
2)其他各种用户登录状态,产品id等信息,均存储在cookie数组中
3)当某种产品卖出后,会从数据库中将该产品的库存减去订单中相应的数量。
11.数据库表设计
下面是对数据库设计的一个说明,交作业用的。
Design ideas of relational schema: Since the website will not be too complex, so I just design basic fields of the whole website logic. As for the tables “order_info” and “orderDetailRecord_info”, I separate order information into two tables to solve the problem that one order may have two types of products. Plus, the “p_image_url” field in the table “product_info”, will be used for analyzing url of images of products. Plus plus: actually an order may conclude many products, every products may choose different delivery method, but here we simplify it and assume that an order only have one delivery method.
另外需要说明的是,
delivery_info表和payment_info表中分别加入了一个random字段,是因为在写php处理的过程中,产生了相应的需要,具体处理请看代码。
下面是具體的表名和欄位:
#12. 限制和反思
這個小項目做的時間非常趕,總共兩週,實際有效時間只有10天,中間還在忙其他的事。所以有很多不足之處。
有些程式碼原本可以寫的更精簡,合併在一起。
連接資料庫和其他的一些執行sql語句的操作,可以封裝在單獨的檔案裡面調用,這裡也都比較簡單的哪裡用到就在哪裡處理了。
資料庫的連結方式用了兩種,沒有統一。
還是有很多值得改進的地方。
相關推薦:
以上是PHP實作購物網站的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

PHP和Python都是高層次的編程語言,廣泛應用於Web開發、數據處理和自動化任務。 1.PHP常用於構建動態網站和內容管理系統,而Python常用於構建Web框架和數據科學。 2.PHP使用echo輸出內容,Python使用print。 3.兩者都支持面向對象編程,但語法和關鍵字不同。 4.PHP支持弱類型轉換,Python則更嚴格。 5.PHP性能優化包括使用OPcache和異步編程,Python則使用cProfile和異步編程。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載
最受歡迎的的開源編輯器

禪工作室 13.0.1
強大的PHP整合開發環境