|
|
|
ปัญหาหลังจากกดสั่งซื้อแล้ว หน้ายืนยัน พวกค่าส่งสินค้า ชื่อ ที่อยู่ ไม่แสดง |
|
|
|
|
|
|
|
ได้เก็บแบบ Session หรือเปล่าครับ
|
|
|
|
|
Date :
2010-10-02 20:14:12 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใช่ครับ ลืมไปอีก1
อันนี้หน้า basket1
Code (PHP)
<?php
session_start();
$_SESSION['user1'];
if($_SESSION['user1']=="")
{
echo "<script>alert('กรุณาเข้าสู่ระบบก่อน');parent.location='index.php'</script>";
}
else
{
//กำหนดให้S_id เป็นรหัสสินค้าในตะกร้า โดยให้เป้นตัวเเปรแบบ Session
//เราต้องลงทะเบียนให้ S_id เป็นตัวเเปร session ตอนลงทะเบียนไม่ต้องมี$แต่ตอนใช้ต้องมี
session_register('s_id','s_num','s_name','s_price');
//รับค่าจากหน้าที่แล้ว
$pid=$_GET['p_id'];
//ถ้าค่าที่รับมาไม่เป้นค่าว่าง แสดงว่าส่งค่ารหัสสินค้ามาจริง
if($pid!="")
{
//ให้นับจำนวนรหัสสินค้าที่มีอยู่ในตระกล้าว่าเป็น 0 หรือไม่ถ้าเป็น0แสดงว่าตะกร้าว่างจะต้องดึงข้อมูลจากฐานข้อมูลขึ้นมาแสดง
//เนื่องจากรหัสสินค้าในตระกล้าจะต้องใช้ต่อในหน้าถัดไปโดยไม่เกี่ยวกับฐานข้อมูลดังนั้นควรกำหนดให้ตัวแปรเป็น session
if($s_id==0)
{
//เนื่องจากการดึงฐานข้อมูลมีซ้ำ 2 ครั้ง ด้านล่างด้วย เราจะประหยัดเวลาโดยการสั่งให้มันไปทำงานยังจะดที่เราต้องการที่เดียว โดยการใช้ flag
$flag=1;
}
else //ในกรณีมีสินค้าในตระกล้าเเล้วต้องตรวจสอบว่าแล้วสินค้าที่เลือกมามันเป้นรายการที่มีอยู่ในตระกล้าหรือยัง
{
if(in_array($pid,$s_id)) //ถ้ารายการที่เลือกมาอยู่ในตระกล้าเเล้วให้เอาจำนวน บวก1
//ถ้า $pid อยู่ใน$s_id จริงแสดงว่าานค้านั้นมีอยู่ในตระกร้านั้นแล้ว แต่ยังไม่รู้ว่าลำดับเท่าไร
//ต้องวนลูปเพื่อเปรียบเทียบลำดับถ้าตรงกันเมื่อไหร่ถึงเอาจำนวน+1
{
for($i=0;$i<count($s_id);$i++)
{
//หลังจาก วนลูปแล้วให้เทียบทีละรายการ ถ้าเท่ากันค่อยเอาจำนวน +1
if($pid==$s_id[$i])
{
//จำนวนลำดับที่ i=จำนวนลำดับที่ i+1
//เนื่องจากจำนวนก็ต้องส่งผ่านไปยังหน้าต่อไปดังนั้นต้องกำหนดให้ตัวเเปรเป็นเเบบ Session
$s_num[$i]=$s_num[$i]+1;
}
}
}
else //ในกรณีที่เทียบแล้วไม่อยู่ในตระกร้าก็ต้องดึงของใหม่ขึ้นจาก ฐานข้อมูลขึ้นมาแสดง
{
$flag=1;
}
}
}
if($flag==1) //ถ้า flag เท่ากับ 1 จะทำใน if
{
//host
$host="localhost";
$hostuser="345730";
$pass="84267139";
$connect=mysql_connect($host="localhost",$hostuser="345730",$pass="84267139") or die("ไม่สามารถติดต่อ host ได้");
//ติดต่อdatabase
$host="localhost";
$database="345730";
mysql_select_db($database,$connect) or die("ไม่สามารถติดต่อ database ได้");
//change ภาษา
mysql_query("SET NAMES 'tis620'");
//คำสั่ง
$sql="select * from product where p_id='$pid'";
$runsql=mysql_query($sql) or die("ไม่สามารถ Run SQL ได้");
$row=mysql_fetch_array($runsql);
//เนื่องจากสั่งซื้อครั้งแรกดังนั้นจำนวนต้องเป้น 1
$s_num[]=1;
//ไม่ว่าจะเป้นชื่อสินค้า ราคา และรหัสสินค้าที่ดึงมาจากฐานข้อมูลเราต้องส่งผ่านไปยังหน้าอิ่น ด้วย ดังนั้น ชื่อสินค้า ราคา สินค้า ก็ต้องเป็น Session
$s_id[]=$row['p_id'];
$s_name[]=$row['p_name'];
$s_price[]=$row['p_price'];
}
}
?>
<html>
<head>
<title>basket</title>
<script language="javascript">
function setvalue(obj)
{
if(obj.checked)
{
document.getElementById('txtrname').value="";
document.getElementById('txtradd').value="";
document.getElementById('txtrtel').value="";
}
}
function setvalue1(id)
{
document.getElementById(id).checked=true;
}
</script>
<body>
<form name="frmcart" method="post" action="recal.php">
<center><table border=1>
<tr>
<th><center><input type=submit name=btndelall value="ลบ"></center></th>
<th><center>ชื่อ</center></th>
<th><center>รหัส</center></th>
<th><center>ราคา</center></th>
<th><center>จำนวน</center></th>
<th><center>รวม</center></th>
</tr>
<?php
$total=0;
for($i=0;$i<count($s_id);$i++)
{
//หาผลรวมในแต่ละรายการ
$sum=$s_num[$i]*$s_price[$i];
//หาผลรวมทั้งหมด โดยเอาเเต่ละรายการมาพวก ทบไปเรื่อยๆ
$total+=$sum;
?>
<tr>
<td><center><input type ="checkbox" name="chkdel[]" value="<?php echo $s_id[$i];?>"></center></td>
<td><center><?php echo $s_name[$i];?></center></td>
<td><center><?php echo $s_id[$i];?></center></td>
<td><center><?php echo $s_price[$i];?></center></td>
<td><center><input type=text name="txtnum[]" value ="<?php echo $s_num[$i]; ?>"size=7></center></td>
<td><center><?php echo $sum;?></center></td>
</tr>
<?php } ?>
<tr>
<td colspan=4><center></center></td>
<td><center>รวม</center></td>
<td><?php echo $total;?></td>
</tr>
</table>
</center>
<?php
//การกำหนดแบบนี้เพื่อให้เริ่มเเรก Radio ของเราถูก check ไว้ที่ radio ตัวแรกของแต่ละชุด
if($s_send=="" || $s_recieve=="")
{
$s_send="ธรรมดา";
$s_recieve="ที่อยู่ผู้สั่งซื้อ";
}
?>
<center>
<table>
<tr><td>วิธีการส่ง</td></tr>
<tr><td><input name="rdosend" type="radio" value="ธรรมดา" <?php if($s_send=="ธรรมดา"){?>checked<?php } ?>>ธรรมดา</td></tr><br>
<tr><td><input name="rdosend" type="radio" value="พิเศษ" <?php if($s_send=="พิเศษ"){?>checked<?php } ?>>พิเศษ</td></tr>
<tr><td>ที่ส่งสินค้า</td></tr>
<tr><td><input name="rdoadd" type="radio" id=1 value="ที่อยู่ผู้สั่งซื้อ"<?php if($s_recieve=="ที่อยู่ผู้สั่งซื้อ"){?>checked<?php } ?> onClick="setvalue(this)" >ที่อยู่ผู้สั่งซื้อ</td></tr><br>
<tr><td>
<input name="rdoadd" type="radio" id=2 value="ที่อยู่อื่น"<?php if($s_recieve=="ที่อยู่อื่น"){?>checked<?php } ?>>ที่อยู่อื่น</td></tr>
<tr>
<td>ชื่อ-สกุล</td>
<td><input type=text name=txtrname size=50 value="<?php echo $s_rname; ?>" onClick="setvalue1(2)"></td>
</tr>
<tr>
<td>ที่อยู่</td>
<td><input type=text name=txtradd size=50 value="<?php echo $s_radd; ?>" onClick="setvalue1(2)"></td>
</tr>
<tr>
<td>เบอร์โทร</td>
<td><input type=text name=txtrtel size=50 value="<?php echo $s_rtel; ?>" onClick="setvalue1(2)"></td>
</tr>
</table>
</center>
<br>
<center>
<table>
<tr>
<td><input type=submit name=buy value="สั่งซื้อ"></td>
<td><input type=submit name=recheck value="คำนวณใหม่"></td>
</tr>
</table>
</center>
<center><a href="index.php">สั่งซื้อเพิ่ม</a></center>
</body>
</form>
|
|
|
|
|
Date :
2010-10-03 07:25:38 |
By :
aksang |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มีท่านใดพอจะช่วยแนะนำบ้างมั้ยครับ
|
|
|
|
|
Date :
2010-10-08 22:22:16 |
By :
aksang |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ฟอร์มรับค่าส่งค่าไปที่ recal.php คือเก็บไว้ใน db หรือยังครับ หรือว่าจะต้องการให้ไปแสดงตอน confirm
|
|
|
|
|
Date :
2010-10-11 09:42:33 |
By :
wimass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หน้า recal.php ผมกำหนดแบบนี้ครับ จะว่าไปแล้วตรงช่องกดเพิ่มจำนวนก็ไม่ทำงานด้วย
ขอบคุณพี่ Wimass มากครับ ช่วยแนะนำผมมาตลอด จะพรีเซ้นโปรเจคพฤหัสนี้แล้วยัง บัคอยู่เลยครับ
Code (PHP)
<?php
session_start();
//ลบข้อมูลรายการออกจากตระกร้า
if($_SESSION['user1']=="")
{
echo "<script>alert('กรุณาเข้าสู่ระบบก่อน');parent.location='index.php'</script>";
}
else
{
// รับค่าจาก Radio วิธีส่ง radio ผู้รับ Text box ชื่อ ที่อยู่ เบอร์โทร รับเเล้วไส่ตัวเเปร Ses เลย
session_register('s_send','s_recieve','s_rname','s_radd','s_rtel','s_rpay');
$s_send=$_POST['rdosend'];
$s_recieve=$_POST['rdoadd'];
$s_pay=$_POST['rdopay'];
}
?>
<input name=s_pay type=hidden value="<?php =$s_pay?>" />
<?php
if($s_recieve=="ที่อยู่ผู้สั่งซื้อ")
{
$s_rname="";
$s_radd="";
$s_rtel="";
}
else
{
$s_rname=$_POST['txtrname'];
$s_radd=$_POST['txtradd'];
$s_rtel=$_POST['txtrtel'];
}
$pid=$_POST['chkdel'];
//คำนวนใหม่ในกรณีที่ไส่จำนวนเอง กรณีกดปุ่มคำนวนใหม่
$cal=$_POST['recheck'];
//ให้เด้งไปหน้ายืนยันการสั่งซื้อ กรณีกดปุ่มสั่งซื้อ
$buy=$_POST['buy'];
//เข้าสู่กระบวนการลบออกจาก checkbox โดยการวนลูปดูว่าที่ check ตรงไหนบ้างให้ลบ
//แต่ยังเอิญว่าอันนี้ไม่ได้ลบจากฐานข้อมูล เเต่เป็นการลบจาก session เพราะฉะนั้นต้องใช้ กระบวนการสลับตัวแปรไปมา
for($i=0;$i<count($s_id);$i++)
{
if(!in_array($s_id[$i],$pid)) //ถ้าอันไหนไม่มีเครื่อหมายถูกเเสดงว่ายังคงไว้
{
//อะไรก็ตามที่ไม่ต้องการลบเราจะย้ายไปอยู่ที่ตัวแปรชั่วคราวก่อน โดยการย้ายทีละรายการ
$temp_id[]=$s_id[$i];
$temp_name[]=$s_name[$i];
$temp_price[]=$s_price[$i];
$temp_num[]=$txtnum[$i];
}
}
//จากนั้นย้ายจากตัวแปรชั่วคราสกลับมาที่ตัวแปรเดิมมันจะถูกทับโดยอัตโนมัต เป็นการลบ session
$s_id=$temp_id;
$s_name=$temp_name;
$s_price=$temp_price;
$s_num=$temp_num;
//ทำปุ่มสั่งคำนวนใหม่
//ถ้ากดปุ่ม คำนวนใหม่ หรือ กด checkbox ให้ย้อนกลับไปหน้าเดิม ซึ่งทันจะทำการคำนวณตาม คำสั่งที่เขียนไว้เเล้ว
if($cal || $pid)
{
header("location:basket.php?s_pay=$s_pay");
}
else//กดปุ่มสั่งซื้อ
{
header("location:confirmorder.php?s_pay=$s_pay");
}
?>
|
|
|
|
|
Date :
2010-10-11 13:21:02 |
By :
aksang |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|