|
|
|
ขออนุญาติสอบถามการ ตัดสต๊อคสินค้า ครับติดปัญหาไม่สามารถทำได้ครับ |
|
|
|
|
|
|
|
อ้างอิง จากกระทู้เก่า https://www.thaicreate.com/php/forum/129453.html
ผมอยากจะให้ระบบสามารถตัดจำนวนสินค้าในสต๊อกตามยอดที่มีลูกค้าสั่งซื้อน่ะครับ
ได้ออกแบบดาต้าเบสไว้
lotto_product :
product_id เก็บรหัสสินค้า
product_name เก็บชื่อสินค้า
product_detail รายละเอียดสินค้า
product_price เก็บราคาสินค้า
product_group เก็บหมวดหมู่สินค้า
thumbmail เก็บรูปภาพ
item เก็บจำนวนสินค้าในสต๊อก
Code (SQL)
CREATE TABLE `lotto_product` (
`product_id` int(11) UNSIGNED NOT NULL,
`product_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`product_detail` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL,
`product_price` varchar(9) COLLATE utf8mb4_unicode_ci NOT NULL,
`product_group` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,
`thumbmail` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`item` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
lotto_orderdetail :
detail_id เก็บอ้างอิงรหัสใบสั่งซื้อ
order_id เก็บอ้างอิงรายการสั่งซื้อสินค้า
product_id เก็บอ้างอิงรหัสสินค้า
product_qty เก็บจำนวนสินค้าที่ซื้อ
product_name เก็บชื่อสินค้า
total เก็บราคาสินค้า
Code (SQL)
CREATE TABLE `lotto_orderdetail` (
`detail_id` int(10) NOT NULL,
`order_id` int(11) NOT NULL,
`product_id` int(11) NOT NULL,
`product_qty` int(11) NOT NULL,
`id` int(11) NOT NULL,
`product_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`total` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
หน้า cart .php จะเป็นการแสดงสินค้าในตระกร้าเเละมีจำนวนสินค้า สามารถเพิ่มได้ลดได้ครับ
cart .php
Code (PHP)
<div class="container cart">
<?php
// if (!isset($_SESSION['is_member'])) {
// header("Location: module.php?module=member&file=login");
// }
error_reporting( error_reporting() & ~E_NOTICE );
$p_id = $_REQUEST['product_id'];//รับการเรียกของ id
$act = $_REQUEST['act'];//รับการเรียกของ act
if($act=='add' && !empty($p_id)) {
if(!isset($_SESSION['shopping_cart']))
{
$_SESSION['shopping_cart']=array();
}else{
}
if(isset($_SESSION['shopping_cart'][$p_id])) {
$_SESSION['shopping_cart'][$p_id]++;
}else {
$_SESSION['shopping_cart'][$p_id]=1;
}
}
if($act=='remove' && !empty($p_id)) //ยกเลิกการสั่งซื้อ
{
unset($_SESSION['shopping_cart'][$p_id]);
}
if($act=='update') { //อัพเดตร
$amount_array = $_POST['amount'];
foreach($amount_array as $p_id=>$amount) {
$_SESSION['shopping_cart'][$p_id]=$amount;
}
}
//ยกเลิกตะกร้าสินค้า
if ($act == 'Cancel-Cart') {//ถ้า $act เท่ากับ Cancel-Cart ให้ทำการ unset ค่าSESSION ของ shopping_cart
unset($_SESSION['shopping_cart']);
}
print_r($_SESSION);
echo "<Br>" . $_REQUEST['product_id'];
echo "<Br>" . $act;
?>
<div class="container primary-sec">
<div class="row mt">
<!-- &product_id=$row_showproduct[id] -->
<div class="col-lg-12">
<div class="content-panel">
<h4><i class="fa fa-angle-right"></i> ตะกร้าสินค้า</h4>
<section id="no-more-tables">
<form id="frmcart" class="frmcart" action="module.php?module=order&file=cart&act=update" name="frmcart" method="post">
<table class="table table-bordered table-striped table-condensed cf">
<thead class="cf">
<tr>
<th class="numeric">No.</th>
<th class="numeric">สินค้า</th>
<th class="numeric">ราคา</th>
<th class="numeric">จำนวน</th>
<th class="numeric">รวมรายการ</th>
<th class="numeric">ลบ</th>
</tr>
</thead>
<tbody>
<?php
if (!empty($_SESSION['shopping_cart'])) {
foreach ($_SESSION['shopping_cart'] as $p_id=>$p_qty) {
$query = "SELECT * FROM lotto_product WHERE product_id = '$p_id' ";
$result = mysqli_query($conn,$query);
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { //while loop
$sum = $row['product_price'] * $p_qty; //ราคาคูณด้วยจำนวน
$total += $sum; //บวกเพิ่มค่าทีละ 1
?>
<tr>
<td class="numeric" data-title="No."><?php echo $i += 1;?></td>
<td class="numeric" data-title="สินค้า"><?php echo $row['product_name']; ?></td>
<td class="numeric" data-title="Price"><?php echo number_format($row['product_price'],2);?></td>
<td class="numeric" data-title="Numitem"><input type="text" name="<?php echo amount[$p_id];?>" value="<?php echo $p_qty;?>"></td>
<td class="numeric" data-title="Allitem"><?php echo number_format($sum,2); ?> บาท</td>
<td class="numeric" data-title="Delete"><a href="module.php?module=order&file=cart&product_id=<?php echo $row['product_id'];?>&act=remove" class="btn btn-danger"><i class="fa fa-trash-o"></i></a></td>
</tr>
<?php
}
}
?>
</tbody>
<tr bgcolor="#fff">
<td class="numeric" colspan="5" align="right">Total</td>
<td class="numeric" align='right' data-title="Allprice"><?php echo number_format($total,2); ?> บาท</td>
</tr>
<?php
}
?>
<tr style="border: none;">
<td style="border: none;"></td>
<td style="border: none;"></td>
<td style="border: none;"></td>
<td style="border: none;"></td>
<td style="border: none;"></td>
<td class="numeric" bgcolor="#fff" colspan="5" align="right" style="border: none;">
<a href="module.php?module=order&file=cart&act=Cancel-Cart" class="btn btn-danger"> ยกเลิกตะกร้าสินค้า </a>
<!-- cart.php?act=Cancel-Cart -->
<!-- <button type="submit" name="button" id="button" class="btn btn-warning"> คำนวณราคาใหม่ </button> -->
<button type="button" name="Submit2" onclick="window.location='module.php?module=order&file=confirm';" class="btn btn-primary">สั่งซื้อ </button>
</td>
</tr>
<p align="center"> <a href="module.php?module=page&file=shop" class="btn btn-primary">กลับไปเลือกสินค้า</a> </p>
</table>
</form>
<!-- <div class="button-cart" align="right">
<button type="submit" name="button" id="button" class="btn btn-warning"> คำนวณราคาใหม่ </button>
<button type="button" name="Submit2" onclick="window.location='confirm.php';" class="btn btn-primary">สั่งซื้อ </button>
</div> -->
</section>
</div><!-- /content-panel -->
</div><!-- /col-lg-12 -->
</div><!-- /row -->
</div>
</div>
หน้าบันทึกการสั่งซื้อ saveorder.php
Code (PHP)
<div class="primary-sec-2">
<?php
error_reporting( error_reporting() & ~E_NOTICE );
//error_reporting(0);
//check
echo "<pre>";
print_r($_SESSION);
echo "<hr>";
print_r($_POST);
echo "<hr>";
print_r($_SESSION['shopping_cart']);
echo "</pre>";
print_r($have);
echo "<hr>";
echo "item = $stc";
// echo "<br>";
// echo $p_id;;
?>
<!--สร้างตัวแปรสำหรับบันทึกการสั่งซื้อ -->
<?php
error_reporting( error_reporting() & ~E_NOTICE );
//Set ว/ด/ป เวลา ให้เป็นของประเทศไทย
date_default_timezone_set('Asia/Bangkok');
$order_name = $_POST["order_name"];
$order_lastname = $_POST["order_lastname"];
$order_addr = $_POST["address"];
$order_email = $_POST["order_email"];
$order_phone = $_POST["order_phone"];
$p_qty = $_POST["product_qty"]; //จำนวน
$total = $_POST['total'];
$have = $_POST['item'];
$order_date = date("Y-m-d H:i:s"); // วันที่ ปี เดือน วัน
$order_status = 1;
//บันทึกการสั่งซื้อลงใน order_detail
mysqli_query($conn, "BEGIN");
$query1 = "INSERT INTO lotto_order VALUES(null,
'$order_name',
'$order_lastname',
'$order_addr' ,
'$order_email',
'$order_phone',
'$order_status',
'$order_date'
)";
$result1 = mysqli_query($conn, $query1) or die ("Error in query: $query1 " . mysql_error());
//ฟังก์ชั่น MAX() จะคืนค่าที่มากที่สุดในคอลัมน์ที่ระบุ ออกมา หรือ่า ใช้สำหรับหาค่าที่มากที่สุด
$query2 = "SELECT MAX(order_id) AS order_id FROM lotto_order WHERE order_phone='$order_phone'";
$result2 = mysqli_query($conn, $query2);
$row = mysqli_fetch_array($result2);
$order_id = $row['order_id'];
//loop
foreach($_SESSION['shopping_cart'] as $p_id=>$p_qty) {
echo $p_id;
$query3 = "SELECT * FROM lotto_product WHERE product_id='$p_id'";
$result3 = mysqli_query($conn, $query3);
$row3 = mysqli_fetch_array($result3);
$total=$row3['product_price']*$p_qty;
$product_name = $row3['product_name'];
$query4 = "INSERT INTO lotto_orderdetail
values(null,
'$order_id',
'$p_id',
'$p_qty',
'$id',
'$product_name',
'$total')";
$result4 = mysqli_query($conn, $query4);
for ($i=0; $i < $count; $i++) { //ติดปัญหาตรงส่วนนี้
$have = $row3['item']; //สร้างตัวแปรรับค่า item
$stc = $have - $p_qty; //นำค่า have มาลบ กับจำนวนที่สั่งซื้อ($p_qty) เเล้วสร้างตัวแปร stc มารับค่าผลลัพธ์ที่ได้มา
$query6 = "UPDATE lotto_product SET item = $stc WHERE product_id = '$p_id'";
$result6 = mysqli_query($conn, $query6);
}
}
/*stock*/
if($result1 && $result4){
mysqli_query($conn, "COMMIT");
$msg = "บันทึกข้อมูลเรียบร้อยแล้ว ";
foreach($_SESSION['shopping_cart'] as $p_id)
{
//unset($_SESSION['cart'][$pro_id]);
unset($_SESSION['shopping_cart']);
}
}
else{
mysqli_query($conn, "ROLLBACK");
$msg = "บันทึกข้อมูลไม่สำเร็จ กรุณาติดต่อเจ้าหน้าที่ค่ะ ";
}
exit();
?>
<script type="text/javascript">
alert("<?php echo $msg;?>");
window.location ='index.php';
</script>
</div>
ผมติดปัญหาตรงส่วนนี้
Code (PHP)
for ($i=0; $i < $count; $i++) {
$have = $row3['item']; //สร้างตัวแปรรับค่า item
$stc = $have - $p_qty; //นำค่า have มาลบ กับจำนวนที่สั่งซื้อ($p_qty) เเล้วสร้างตัวแปร stc มารับค่าผลลัพธ์ที่ได้มา
$query6 = "UPDATE lotto_product SET item = $stc WHERE product_id = '$p_id'";
$result6 = mysqli_query($conn, $query6);
}
คือผมลองนำ้โค้ดตัดสต๊อกมาลองเเล้ว ผมไม่สามารถทำให้ติดสต๊อกได้ ผมอยากรู้ว่าต้องทำยังไงดีครับ
ไม่ทราบว่าผิดตรงส่วนไหนลองเช็คลองเเก้ดูหลายๆรอบเเล้วครับ
Tag : PHP, MySQL, XAMPP
|
ประวัติการแก้ไข 2018-01-14 16:44:57
|
|
|
|
|
Date :
2018-01-14 16:43:26 |
By :
AionQRy |
View :
1351 |
Reply :
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่จำเป็นต้องเข้า Loop ครับ
แค่นี้ก็น่าจะเพียงพอแล้วนะครับ
$query6 = "UPDATE lotto_product SET item = item-".$p_qty." WHERE product_id = '".$p_id."'";
$result6 = mysqli_query($conn, $query6);
|
|
|
|
|
Date :
2018-01-14 18:55:11 |
By :
tomrambo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ได้ละครับ ขอบคุณ คุณ tOm มากเลยนะครับ ปลดล็อกเเล้วครับ
มีคำถามครับ ทำไมต้องซ้อน " ' ' " เหรอครับ
|
ประวัติการแก้ไข 2018-01-14 23:59:51
|
|
|
|
Date :
2018-01-14 23:57:56 |
By :
AionQRy |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อยู่ใน foreach ให้เหลือแต่โค้ดที่ผมโพสต์ไว้ ไม่ต้องใช้ for loop ครับ
|
|
|
|
|
Date :
2018-01-14 23:58:28 |
By :
tomrambo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 5 เขียนโดย : tomrambo เมื่อวันที่ 2018-01-15 03:05:44
รายละเอียดของการตอบ ::
ขอสอบถามหน่อยครับ
ถ้าผมต้องการให้ตาราง lotto_orderdetail เก็บ id ผู้ใช้งาน หรือฟิล `id` int(11) ตามตาราง
Code (PHP)
CREATE TABLE `lotto_orderdetail` (
`detail_id` int(10) NOT NULL,
`order_id` int(11) NOT NULL,
`product_id` int(11) NOT NULL,
`product_qty` int(11) NOT NULL,
`id` int(11) NOT NULL,
`product_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`total` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ผมลอง โดย
ไฟล์ saveorder.php
Code (PHP)
<?php
error_reporting( error_reporting() & ~E_NOTICE );
//Set ว/ด/ป เวลา ให้เป็นของประเทศไทย
date_default_timezone_set('Asia/Bangkok');
$order_name = $_POST["order_name"];
$order_lastname = $_POST["order_lastname"];
$order_addr = $_POST["address"];
$order_email = $_POST["order_email"];
$order_phone = $_POST["order_phone"];
$p_qty = $_POST["product_qty"]; //จำนวน
$total = $_POST['total'];
$have = $_POST['item'];
$order_date = date("Y-m-d H:i:s"); // วันที่ ปี เดือน วัน
$order_status = 1;
//บันทึกการสั่งซื้อลงใน order_detail
mysqli_query($conn, "BEGIN");
$query1 = "INSERT INTO lotto_order VALUES(null,
'$order_name',
'$order_lastname',
'$order_addr' ,
'$order_email',
'$order_phone',
'$order_status',
'$order_date'
)";
$result1 = mysqli_query($conn, $query1) or die ("Error in query: $query1 " . mysql_error());
//ฟังก์ชั่น MAX() จะคืนค่าที่มากที่สุดในคอลัมน์ที่ระบุ ออกมา หรือ่า ใช้สำหรับหาค่าที่มากที่สุด
$query2 = "SELECT MAX(order_id) AS order_id FROM lotto_order WHERE order_phone='$order_phone'";
$result2 = mysqli_query($conn, $query2);
$row = mysqli_fetch_array($result2);
$order_id = $row['order_id'];
//loop
foreach($_SESSION['shopping_cart'] as $p_id=>$p_qty) {
// echo $p_id;
$query3 = "SELECT * FROM lotto_product WHERE product_id='$p_id'";
$result3 = mysqli_query($conn, $query3);
$row3 = mysqli_fetch_array($result3);
$total=$row3['product_price']*$p_qty;
$product_name = $row3['product_name'];
///////////////////////////////////////////////เเก้ไขตรงนี้ ////////////////////////////////////////////////////////
$queryxs = "SELECT * FROME lotto_login WHERE id ='$member_id'"; //ลอง ดึงข้อมูล lotto_login มา
$resultxs = mysqli_query($conn, $queryxs);
$rowxs = mysqli_fetch_array($resultxs);
$member_id = $rowxs['id'];
$name_login = $rowxs['email'];
$query4 = "INSERT INTO lotto_orderdetail
values(null,
'$order_id',
'$p_id',
'$p_qty',
'$member_id', // นำมาใส่ในนี้
'$product_name',
'$total')";
$result4 = mysqli_query($conn, $query4);
///////////////////////////////////////////////เเก้ไขตรงนี้ ////////////////////////////////////////////////////////
$query6 = "UPDATE lotto_product SET item = item-".$p_qty." WHERE product_id = '".$p_id."'";
$result6 = mysqli_query($conn, $query6);
}
/*stock*/
if($result1 && $result4){
mysqli_query($conn, "COMMIT");
$msg = "บันทึกข้อมูลเรียบร้อยแล้ว ";
foreach($_SESSION['shopping_cart'] as $p_id)
{
//unset($_SESSION['cart'][$pro_id]);
unset($_SESSION['shopping_cart']);
}
}
else{
mysqli_query($conn, "ROLLBACK");
$msg = "บันทึกข้อมูลไม่สำเร็จ กรุณาติดต่อเจ้าหน้าที่ค่ะ ";
}
// exit();
?>
เเต่ผลลัพธ์ คือ มันใส่ ไอดีผู้ใช้งานเป็น 0 ในฟิล id ตาราง lotto_orderdetail น่ะครับ
เเล้วมันต้องทำยังไงเหรอครับ ถึงจะบันทึกไอดีผู้ใช้งานได้ครับ
|
ประวัติการแก้ไข 2018-01-28 14:45:14
|
|
|
|
Date :
2018-01-27 12:42:09 |
By :
AionQRy |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|