Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > การลบ session จาก cart ลบแล้วรายการถัดไป หายหมดเลยครับ



 

การลบ session จาก cart ลบแล้วรายการถัดไป หายหมดเลยครับ

 



Topic : 068459



โพสกระทู้ ( 64 )
บทความ ( 0 )



สถานะออฟไลน์




เวลาลบ รายการสินค้าจาก Cart ถ้าลบที่รายการไหน

รายการสินค้าถัดไปจากตัวที่ลบจะหายไปด้วยหมดเลยครับ

(แต่ถ้าลบรายการสุดท้ายใน cart ทำงานเป็นปกติครับ)

ผมคิดว่าน่าจะเกี่ยวกับตรง for ในหน้า cart หลังจากลบ แต่หมดหนทางจะแก้ไข

รบกวนช่วยแนะนำหน่อยครับ

มีรูป (ตามลำดับเลยครับ)


ordercheck.php
ซื้อครั้งที่ 1
ซื้อครั้งที่ 2

นี่พอกดลบ รายการสินค้าอันแรก
ก่อนลบ

สินค้าใน cart หายหมดเลยครับ
หลังลบ รายการที่ 1 สินค้าใน cart หายหมด



ordercheck.php
<?
session_start();
include("connect.php") ?>

<?php    
$product_id=$_GET['product_id'];

$sql = "SELECT * FROM products WHERE product_id = '$product_id'";
$rs = mysql_query($sql);
// เนื่องจากว่าข้อมูลที่ได้กลับมานั้นมีเพียงเรคอร์ดเดียวเท่านั้น (เพราะว่า id นั้น ๆ จะเป็นคุณสมบัติ unique)
// ซึ่ง id หนึ่งมีได้เพียงข้อมูลแถวเดียวเท่านั้น ดังนั้นเราก็ไม่จำเป็นต้องทำการวนลูปเพื่อดึงข้อมูลจาก resource
$row = mysql_fetch_array($rs);
$product_name = $row['product_name'];
$product_price = $row['product_price'];
?>


<form id="form1" name ="form1" method="post" action="order_process.php">
<input name="product_id" type="hidden" value="<? echo $product_id; ?>" />
<input name="product_name" type="hidden" value="<? echo $product_name; ?>" />
<input name="product_price" type="hidden" value="<? echo $product_price; ?>" />

<table width="200" border="1">
  <tr>
    <td>รหัส</td>
    <td>ชื่อ</td>
    <td>ราคา</td>
    <td>จำนวน</td>
  </tr>
  <tr>
    <td><? echo $product_id ?></td>
    <td><? echo $product_name ?></td>
    <td><? echo $product_price ?></td>
    <td><input name="qty" type="text"  size="1"></td> //แก้จุดนี้แล้วครับ
  </tr>
</table>
<input type="submit" name="Submit" value="Submit"/>
</form>



order_process
<?
session_start();
include("connect.php") ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<?
$product_id =$_POST[product_id];
$product_name =$_POST[product_name];
$product_price =$_POST[product_price];
$product_type =$_POST[product_type];
$qty =$_POST[qty];

$_SESSION['sess_product_id'][]  = $product_id;
$_SESSION['sess_product_name'][] = $product_name;
$_SESSION['sess_product_price'][]  = $product_price;
$_SESSION['sess_qty'][]=$qty;


echo"<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"1;URL=cart.php\">";

?>



cart.php
<?
session_start();
include("connect.php") ?>

<?
if (count($_SESSION[sess_product_id])==0){
echo "ไม่มีสินค้าในตระกร้า";
}
else{

echo "<form id=\"form1\" name=\form1\" method=\"post\" action=\"confirmcheck.php\">";
echo "<table width=\"550\" border=\"1\" align=\"center\" cellspacing=\"\" cellpadding=\"2\">
			<tr bgcolor=\"#cc9999\"><th colspan=\"6\" height=\"15\" align=\"center\"><font color=\"blue\">ตะกร้าสินค้า</font></th></tr>
      		<tr bgcolor=\"#cc8888\" height=\"20\">
			<th width=\"130\" align=\"left\">รหัสสินค้า</th>
            <th width=\"150\" align=\"left\">ชื่อสินค้า</th>
            <th width=\"50\">ราคา/กก.</th>
			<th width=\"50\">จำนวน</th>
			<th width=\"100\">ราคารวม</th>
			<th><centre>ลบ</th>
			</tr><tr><td colspan=\"6\" height=\"15\"></td></tr>";
						
for ($i=0;$i<count($_SESSION[sess_product_id]);$i++){ //คิดว่าน่าจะมีปัญหาตรงนี้ครับ
$product_id = $_SESSION['sess_product_id'][$i];

$num=$i;


$total_unit = $_SESSION[sess_qty][$i]*$_SESSION[sess_product_price][$i];
$total = $total+$total_unit;


				if ($i%2==0){	echo "<tr>";}else{echo "<tr bgcolor=\"#FFeeee\">"; }
				echo "<td width=\"130\">".$_SESSION['sess_product_id'][$i]."</td>";
            	echo "<td width=\"150\">".$_SESSION['sess_product_name'][$i]."</td>";
           		echo "<td width=\"50\" align=\"center\">".$_SESSION['sess_product_price'][$i]."</td>";
				echo "<td width=\"50\" align=\"center\">".$_SESSION['sess_qty'][$i]."</td>";
				echo "<td width=\"100\" align=\"center\">$total_unit </td>";
				echo "<td><a href=\"del_cart.php?num=$num\">ลบ</td>
			</tr>";
			}
echo "<tr><td colspan=\"6\" height=\"15\"></td></tr>
		<tr bgcolor=\"#cc8888\">
		<td align=\"right\" colspan=\"3\"></td>
		<th align=\"right\">รวม</th>
        <th align=\"center\" colspan=\"2\">$total บาท</th></tr>
		<TR><td colspan=\"6\" height=\"15\" align=\"center\">
		<input type=\"submit\" name=\"calculate\" value=\"refresh\"/>
		<input type=\"submit\" name=\"complete\" value=\"ซื้อสินค้าในตระกร้า\"/>		
		</td></tr></table>";
echo "</form>";
echo "<br><br><center><a href=\"clear.php\">clear</a></center>";
echo "<br><br><center><a href=\"index.php\"><<เลือกสินค้าเพิ่ม>></a></center>";
			
}
?>


del_cart.php
<?
session_start();
include("connect.php") ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<?

unset($_SESSION['sess_product_id'][$num]);
unset($_SESSION['sess_product_name'][$num]);
unset($_SESSION['sess_product_price'][$num]);
unset($_SESSION['sess_qty'][$num]);


echo"<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"1;URL=cart.php?num=$num\">";

?>




Tag : PHP, MySQL









ประวัติการแก้ไข
2011-10-26 16:09:29
2011-10-26 23:19:52
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-10-26 16:07:14 By : kw4nz View : 2964 Reply : 13
 

 

No. 1



โพสกระทู้ ( 64 )
บทความ ( 0 )



สถานะออฟไลน์


ขออนุญาตขุดครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-10-26 16:35:20 By : kw4nz
 


 

No. 2



โพสกระทู้ ( 64 )
บทความ ( 0 )



สถานะออฟไลน์


ยังมึนอยู่เลยครับ T_T
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-10-26 17:02:53 By : kw4nz
 

 

No. 3



โพสกระทู้ ( 64 )
บทความ ( 0 )



สถานะออฟไลน์


ขออนุญาตขุดครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-10-26 21:00:37 By : kw4nz
 


 

No. 4



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ไม่แน่ใจคับโค้ดยาว แต่ที่เห็นผิดก็
<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
 


 

No. 5



โพสกระทู้ ( 64 )
บทความ ( 0 )



สถานะออฟไลน์


ถ้าเก็บค่าแบบ


$_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
 


 

No. 6



โพสกระทู้ ( 64 )
บทความ ( 0 )



สถานะออฟไลน์


หาวิธีลบต่อไป -_-"


ประวัติการแก้ไข
2011-10-26 23:15:27
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-10-26 23:01:22 By : kw4nz
 


 

No. 7



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

เซสชั่นมันเป็นอาเรย์อยู่แล้วคับ

ตัวที่ผมเขียนตัวอย่างให้ดูคือ 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
 


 

No. 8



โพสกระทู้ ( 64 )
บทความ ( 0 )



สถานะออฟไลน์


ผมพอรู้ปัญหาแล้วครับ

ปัญหาคือ ถ้าสมมุติ ผมมีสินค้าในตะกร้า 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
 


 

No. 9



โพสกระทู้ ( 564 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook

0 1 2 คุณควรจะเก็บรหัสของ product id แทน index ของ array ครับ เพื่อเวลาลบ มันจะได้ เจาะจงได้ถูก

เช่น สมมุติ รหัส สินค้าคุณคือ 20

เวลาสร้าง ก็

$_SESSION['cart'][20]="100";

แสดงว่า สินค้า รหัส 20 มีค่า 100

แบบนี้ ผมว่า ง่ายกว่า เยอะเลยนะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-10-29 16:32:28 By : kalamell
 


 

No. 10



โพสกระทู้ ( 564 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook

ยกตัวอย่างของผมครับ

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
 


 

No. 11



โพสกระทู้ ( 64 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณมากครับ ทำได้แล้ว

ผมแก้ for ($i=0;$i<count($_SESSION["cart"]);$i++){

ตรง $i<count($_SESSION["cart"] เป็น $_SESSION['count']

(สร้างตัวแปรขึ้นมานับจำนวนสินค้าใหม่)

ขอบคุณมากๆครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-10-31 11:56:45 By : kw4nz
 


 

No. 12

Guest


<?php

session_start();
if (isset($_SESSION['product_id'])) {
unset($_SESSION['product_id'][array_search($_GET['id'], $_SESSION['utility_id'])]);
}

?>

ภาพที่1

ภาพที่2
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-07 12:11:29 By : ปฐมพงษ์ เครดิต(ไตรภพ แซ่จิ๋ว)
 


 

No. 13

Guest


แก้ไขตรง โค้ดบรรสุดท้ายนะครับ พอดีว่าลืมดูก่อนกด Submit
เดิม : $_SESSION['utility_id'] แก้เป็น $_SESSION['product_id']
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-07 12:15:04 By : ปฐมพงษ์ เครดิต(ไตรภพ แซ่จิ๋ว)
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : การลบ session จาก cart ลบแล้วรายการถัดไป หายหมดเลยครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่