|
|
|
การลบ session จาก cart ลบแล้วรายการถัดไป หายหมดเลยครับ |
|
|
|
|
|
|
|
ขออนุญาตขุดครับ
|
|
|
|
|
Date :
2011-10-26 16:35:20 |
By :
kw4nz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยังมึนอยู่เลยครับ T_T
|
|
|
|
|
Date :
2011-10-26 17:02:53 |
By :
kw4nz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขออนุญาตขุดครับ
|
|
|
|
|
Date :
2011-10-26 21:00:37 |
By :
kw4nz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่แน่ใจคับโค้ดยาว แต่ที่เห็นผิดก็
<input name="qty" type="text" / size="1"></td>
น่าจะเป็น
<input name="qty" type="text" size="1" /></td>
เขียนโปรแกรมเป็นระเบียบดีคับ แต่ตรง [] ในอาเรย์ ควรระบุเครื่องหมายบอก สตริงให้ชัดเจน $ex['hash'];
ปรกติถ้าเป็นข้อมูลแบบนี้ ผมจะเก็บเป็นรูปแบบรวมในตัวแปรเดียว เช่น
Code (PHP)
$_SESSION['cart'][] = array(
'id' = (int) $_POST['product_id'],
'name' = $_POST['name'],
'price' = (float) $_POST['price'],
'qty' = (int) $_POST['qty'];
// ลบจาก index ลบทีเดียวได้ไปทั้งแถว
unset($_SESSION['cart'][$del_index]);
// ลบจาก id ของสินค้า
$del_index = NULL;
foreach ($_SESSION['cart'] as $key => $val)
{
// หา index จาก id สินค้า
if ($val['id'] == $del_id)
{
$del_index = $key;
break;
}
}
if ($del_index)
{
unset($_SESSION['cart'][$del_index]);
}
จริงๆ ปัญหานี้แก้ ได้ โดยลองแสดงค่า $_post['num'] มาดูว่าตรงหรือป่าว คุณผิดไปตรงไหน
แล้ว print_r ดูเซสชั่น
คุณยังไม่ได้เขียน เวลามีการสั่งสินค้าซ้ำ จะต้องเป็นสินค้าอันเดียวกัน ไม่ใช่มีอย่างเดียว แต่สองข้อมูล
|
ประวัติการแก้ไข 2011-10-26 21:23:38 2011-10-26 21:26:34
|
|
|
|
Date :
2011-10-26 21:22:37 |
By :
pjgunner.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าเก็บค่าแบบ
$_SESSION['cart'][] = array(
02.
'id' = (int) $_POST['product_id'],
03.
'name' = $_POST['name'],
04.
'price' = (float) $_POST['price'],
05.
'qty' = (int) $_POST['qty'];
จะแสดงค่าตัวนั้นๆอย่างไรครับ
echo $_SESSION['cart'][id];
echo $_SESSION['cart'][name];
แบบนี้รึปล่าวครับ
|
|
|
|
|
Date :
2011-10-26 22:40:50 |
By :
kw4nz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หาวิธีลบต่อไป -_-"
|
ประวัติการแก้ไข 2011-10-26 23:15:27
|
|
|
|
Date :
2011-10-26 23:01:22 |
By :
kw4nz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เซสชั่นมันเป็นอาเรย์อยู่แล้วคับ
ตัวที่ผมเขียนตัวอย่างให้ดูคือ array สามชั้น
ชั้นที่1 เซสชั้น cart
ชั้นที่สอง อาเรย์ของสินค้า ของสินค้า ที่ index เป็นตัวเลข
ชั้นสุดท้าย อาเรย์ของข้อมูลสินค้า ที่ index เป็นสตริง ของข้อมูลชนิด- จำนวน ราคา ต่างๆ ของสินค้า
Code (PHP)
$_SESSION['cart'][] = array(
'id' = 1,
'name' = 'สาวน้อย',
'price' = 1000,
'qty' = 2
);
$_SESSION['cart'][] = array(
'id' = 2,
'name' = 'สาวรุ่น',
'price' = 2000,
'qty' = 1
);
// ตอนนี้ในตระกร้า มีสินค้าสองชิ้น แต่ละชิ้น มีข้อมูลแล้ว
// เรียกดูชื่อสินค้าอันแรก
echo $_SESSION['cart'][0]['name'];
|
ประวัติการแก้ไข 2011-10-27 09:33:35
|
|
|
|
Date :
2011-10-27 09:31:19 |
By :
pjgunner.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมพอรู้ปัญหาแล้วครับ
ปัญหาคือ ถ้าสมมุติ ผมมีสินค้าในตะกร้า 3 รายการ ได้แก่
$_SESSION['cart'][0];
$_SESSION['cart'][1];
$_SESSION['cart'][2];
แล้วถ้าผมลบ
unset($_SESSION['cart'][1]);
(รายการที่ 2) ไป เมื่อตะกร้าเรียกรายการมาแสดงผล
for ($i=0;$i<count($_SESSION["cart"]);$i++){
echo $i;
ออกมา มันได้ค่า
0 กับ 1
ซึ่งจริงๆมันควรเป็นค่า 0 กับ 2
(เพราะผมลบ unset($_SESSION['cart'][1]);ไป)
ทำให้แสดงสินค้าในตะกร้า ไม่ถูกต้อง
แก้ไขยังไงดีครับ
|
ประวัติการแก้ไข 2011-10-27 20:07:08
|
|
|
|
Date :
2011-10-27 20:06:31 |
By :
kw4nz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 1 2 คุณควรจะเก็บรหัสของ product id แทน index ของ array ครับ เพื่อเวลาลบ มันจะได้ เจาะจงได้ถูก
เช่น สมมุติ รหัส สินค้าคุณคือ 20
เวลาสร้าง ก็
$_SESSION['cart'][20]="100";
แสดงว่า สินค้า รหัส 20 มีค่า 100
แบบนี้ ผมว่า ง่ายกว่า เยอะเลยนะครับ
|
|
|
|
|
Date :
2011-10-29 16:32:28 |
By :
kalamell |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยกตัวอย่างของผมครับ
if(isset($_SESSION['member_cart'])) // ตรวจสอบว่ามีการสร้าง session สำหรับ ระบบตะกร้าหรือไม่
{
$j=0;
foreach($_SESSION['member_cart'] as $product_id =>$total)
{
if($product_id==$_GET['id']) // ถ้าสินค้าที่เราเคยเลือกแล้ว ตรงกับ สินค้าที่เราเลือกใหม่ จะให้มัน บวก เพิ่มกับของเก่าที่ม
{
$sum_total=$total; // เก็บค่าของเก่า
$sum_total+=$_POST['total']; // เอาของเก่า บวกเพิ่มกับของใหม
$_SESSION['member_cart'][$product_id]=$sum_total; // ทำการบันทึกของใหม่เข้าไป
$j++;
break;
}
}
if($j==0) // ถ้าหากเป็นของใหม่ จะสั่งให้ ทำการเพิ่มใหม่
{
$_SESSION['member_cart'][$_GET['id']]=$_POST['total']; // เพิ่มข้อมุลเข้าไปใหม่
}
}
else // ถ้ายังไม่สร้าง
{
session_register("member_cart"); // เริ่มทำการสร้าง session สำหรับเก็บข้อมูลตะกร้าสินค้า
$_SESSION['member_cart']=array(); // ทำให้ session member_cart เป็น array();
$_SESSION['member_cart'][$_GET['id']]=$_POST['total']; // ทำการเพิ่มข้อมูลเข้าไป
}
พอเวลาลบ ผมก็ใช้แบบนี้ครับ
if(isset($_GET['id']))
{
echo"<p>กำลังลบรายการ</p>";
unset($_SESSION['member_cart'][$_GET['id']]); // ทำการ ลบ session ณ ตำแหน่งที่เราเลือก ออก
exit();
}
|
ประวัติการแก้ไข 2011-10-29 16:36:07
|
|
|
|
Date :
2011-10-29 16:35:19 |
By :
kalamell |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากครับ ทำได้แล้ว
ผมแก้ for ($i=0;$i<count($_SESSION["cart"]);$i++){
ตรง $i<count($_SESSION["cart"] เป็น $_SESSION['count']
(สร้างตัวแปรขึ้นมานับจำนวนสินค้าใหม่)
ขอบคุณมากๆครับ
|
|
|
|
|
Date :
2011-10-31 11:56:45 |
By :
kw4nz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<?php
session_start();
if (isset($_SESSION['product_id'])) {
unset($_SESSION['product_id'][array_search($_GET['id'], $_SESSION['utility_id'])]);
}
?>
|
|
|
|
|
Date :
2020-04-07 12:11:29 |
By :
ปฐมพงษ์ เครดิต(ไตรภพ แซ่จิ๋ว) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แก้ไขตรง โค้ดบรรสุดท้ายนะครับ พอดีว่าลืมดูก่อนกด Submit
เดิม : $_SESSION['utility_id'] แก้เป็น $_SESSION['product_id']
|
|
|
|
|
Date :
2020-04-07 12:15:04 |
By :
ปฐมพงษ์ เครดิต(ไตรภพ แซ่จิ๋ว) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|