 |
|
|
 |
 |
|
redirect-after-post
ช่วงนี้มีถามถึงเรื่องทำนองนี้บ่อยเลยครับ
|
 |
 |
 |
 |
Date :
2009-06-09 22:33:20 |
By :
num |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
งง อะคับ ช่วยอธิบายให้เข้าใจด้วยคับ
|
 |
 |
 |
 |
Date :
2009-06-09 22:42:46 |
By :
backship |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ข้างบนเป็นวิธีแก้ไข back แล้ว refresh จะเป็นการ post ซ้ำน่ะครับ
ดูตัวอย่างการ refresh นะครับ
หน้า 1 หน้า form กรอกข้อมูล (ทำการ submit)
หน้า 2 รับข้อมูลจาก form ทำการตรวจสอบข้อมูลว่าถูกต้องหรือไม่ ถ้าถูกต้องก็จะทำการบันทึก
เมื่ออยู่ที่หน้าสองแล้วทำการ refresh ก็จะเป้นการบันทึกข้อมูลที่ได้จาก form ซ้ำ
====================
วิธีแก้ไข
หน้า 1 หน้า form กรอกข้อมูล (ทำการ submit)
หน้า 2 รับข้อมูลจาก form ทำการตรวจสอบข้อมูลว่าถูกต้องหรือไม่ ถ้าถูกต้องก็จะทำการบันทึก
และทำการ redirect ไปหน้า 3 ทันที (ด้วยคำสั่ง header('location:page3.php');
เมื่ออยู่ที่หน้า 3 แล้วทำการ refresh ก็จะไม่เกิดการบันทึกซ้ำครับ
และถ้ากด back จะเป็นการย้ายไปหน้า 1 ทันที เพราะหน้า 2 ถูกแทนที่ด้วยหน้า 3 ไปแล้วครับ
====================
แต่ก็อาจจะเป็นคนละเรื่องกับปัญหาของคุณ deejingjing ก็ได้ครับ
ถ้ายังไม่ใช่อธิบายรายละเอียดเพิ่มอีกนิดครับ
|
 |
 |
 |
 |
Date :
2009-06-09 22:56:11 |
By :
num |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ของผม submit หน้าเดียวคับ คือให้กรอกตัวเลขลงไปใน textbox พอกด submit มันก็จะเข้าไปอยู่ใน table แต่ถ้าไม่กรอก แล้วรีเฟรชมันก็จะไปเพิ่มทุกๆเรคคอร์ดอ่ะคับ ประมาณนี้ ไม่รู้เข้าใจตรงกันหรือป่าวคับ
|
 |
 |
 |
 |
Date :
2009-06-10 11:27:46 |
By :
backship |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เพิ่มทุกๆ เรคคอร์ดหมายถึงอะไรครับ?
|
 |
 |
 |
 |
Date :
2009-06-10 11:36:12 |
By :
num |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าไม่งั้น ลองทำการเช็คค่าตัวแปร ว่า เป็น null หรือเปล่า ครับ ใช้ if ก็ได้
ถ้าค่านั้น = null ก็ไม่ให้ทำการเพิ่ม น่าจะได้นะครับ
if (textbox1!=null){
mysql_query("INSERT INTO tablename (xxxx,xxxx,xxxxxx) VALUES ('$XXXX','$XXXX','$XXXX')");
}else{
echo "กรอกข้อมูลไม่ครบ"
exit();
}
น่าจะประมาณนี้นะครับ ลองดู
|
 |
 |
 |
 |
Date :
2009-06-10 11:59:27 |
By :
drakvender |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
หมายถึงฟิวส์นั้นจะเพิ่มค่าเรื่อยๆอ่ะคับ ทุกครั้งที่รีเฟรช ไม่รู้เป็นที่ผมตั้งค่า auto ในดาต้าเบสหรือป่าว หรืออาจจะอยู่ที่ pk หรือป่าวคับ
|
 |
 |
 |
 |
Date :
2009-06-10 12:07:09 |
By :
backship |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอดูโค้ดหน่อยได้ป่าวครับ แต่ถ้าโค้ดยาวๆ ก็ไม่ไหวนะครับ แหะๆ
|
 |
 |
 |
 |
Date :
2009-06-10 12:10:20 |
By :
num |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จะให้ดูตรง insert ก่อนได้ป่าวคับ
|
 |
 |
 |
 |
Date :
2009-06-10 12:45:08 |
By :
backship |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ต้องการดูขั้นตอนการทำงานน่ะครับว่าโค้ดทำอะไรบ้าง
|
 |
 |
 |
 |
Date :
2009-06-10 12:48:15 |
By :
num |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อ้นนี้ตรง insert คับ
<?
include "config.inc.php";
$today = date("d/m/y");
$sql="insert into paydown values('0','$_POST[id]','$_POST[pay]','$today')";
$result=mysql_query($sql);
$sql="select member.*,transac.room_id,tb_room.Id,tb_room.cost from member left join transac on (member.uID = transac.uID) left join tb_room on transac.room_id=tb_room.room_no where member.uID=$_GET[id]";
//mysql_query("set names tis620");
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
?>
ซึ่งไม่ได้ดักเช็คอะไรเลย คือเพิ่มลงไปตรงๆคับ
|
 |
 |
 |
 |
Date :
2009-06-10 13:14:19 |
By :
backship |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าต้องการให้เพิ่มวันละ 1 record ให้ปรับ column ของตาราง paydown ที่บันทึกค่า '$today' เป็น unique ครับ
พอปรับแล้วไม่ว่า refresh กี่ครั้งวันนึงจะเพิ่มแค่ 1 record ครับ
|
 |
 |
 |
 |
Date :
2009-06-10 18:24:52 |
By :
num |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่ใช่คับ คือผมไม่ต้องการให้มันเพิ่มเองอะคับ นอกจากเรากด submit
|
 |
 |
 |
 |
Date :
2009-06-10 21:02:49 |
By :
backship |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มีให้เลือกสองแบบครับ แบบแรกตรวจสอบว่ามีข้อมูลมาจากฟอร์มหรือเปล่า
แบบที่สองเพิ่มจากแบบแรกย้ายไปหน้าอื่นด้วยครับ ป้องกันไม่ให้คนที่ป้อนข้อมูลจาก form refresh ซ้ำ
<?
include "config.inc.php";
if (isset($_POST['id'])){ //ถ้ามีการส่งข้อมูลมาจาก form ให้เพิ่มแถว
$today = date("d/m/y");
$sql="insert into paydown values('0','$_POST[id]','$_POST[pay]','$today')";
$result=mysql_query($sql);
}
$sql="select member.*,transac.room_id,tb_room.Id,tb_room.cost from member left join transac on (member.uID = transac.uID) left join tb_room on transac.room_id=tb_room.room_no where member.uID=$_GET[id]";
//mysql_query("set names tis620");
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
?>
<?
include "config.inc.php";
if (isset($_POST['id'])){ //ถ้ามีการส่งข้อมูลมาจาก form ให้เพิ่มแถว
$today = date("d/m/y");
$sql="insert into paydown values('0','$_POST[id]','$_POST[pay]','$today')";
$result=mysql_query($sql);
header('location:'.$_SERVER['SCRIPT_NAME']); //ย้ายไปหน้า request แบบ GET
}
$sql="select member.*,transac.room_id,tb_room.Id,tb_room.cost from member left join transac on (member.uID = transac.uID) left join tb_room on transac.room_id=tb_room.room_no where member.uID=$_GET[id]";
//mysql_query("set names tis620");
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
?>
|
 |
 |
 |
 |
Date :
2009-06-10 21:46:34 |
By :
num |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณคุณ num มากๆคับ จะลองดูพรุ่งนี้คับ
|
 |
 |
 |
 |
Date :
2009-06-10 22:31:55 |
By :
backship |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|