สอบถามเกี่ยวกับการ auto increament ของ คอลัมน์ id ของฐานข้อมูลค๊ะ
โครงสร้างตารางไม่เหมือนกันหรือเปล่าครับ
หรือไม่ก็ต้องมีโค้ดที่ไม่เหมือนกัน
Date :
2013-03-18 19:07:50
By :
cookiephp
ขอดูโค๊ด a กับ b ครับ น่าจะอยู่ที่ โค๊ด insert
Date :
2013-03-18 19:18:15
By :
นายต้นSW
collation ไม่น่าเกี่ยวครับ คราวนี้น่าจะเป็นที่โค้ด insert อย่าง No.2 ว่าล่ะครับ
ว่าแต่ เช็คแล้วใช่ไหมครับว่าตาราง b มีฟิลด์ที่เป็น auto_increment อยู่จริงๆ
Date :
2013-03-18 19:23:53
By :
cookiephp
รูปฐานข้อมูล table a ค๊ะ
ส่วนอันนี้รูปฐานข้อมูล table b ค๊ะ
Date :
2013-03-18 19:40:08
By :
dferru
จะเกี่ยวกับฐานข้อมูลตามรูปด้านบนมั้ยค๊ะ
Date :
2013-03-18 19:41:24
By :
dferru
ไม่น่าจะเกี่ยวนะครับ น่าจะเกี่ยวกับ ตัวโค๊ดมากกว่า
Date :
2013-03-18 19:51:44
By :
นายต้นSW
เอิ่มมมมมม เกี่ยวสิครับ
ถ้าตาราง b ใช้โค้ด INSERT แบบเดียวกันกับในตาราง a มันต้อง error แน่นอนครับ
เพราะตาราง a มีคอลัมน์เยอะกว่าชัดเจนขนาดนี้ - -
Date :
2013-03-18 20:18:16
By :
cookiephp
อันนี้เป็นโค๊ด insert table a ค๊ะ
Code (PHP)
<?PHP
/**
*
*
*
*/
include("header_new.php");
if(isset($_POST["submit"])){
include("connect.php");
$sql = "INSERT INTO av8_auctions
( name , description , quantity , auction_type , start_price , buyout_price ,
duration , country , zip_code , shipping_method , active , payment_status ,
nb_clicks , owner_id , currency , postage_amount , insurance_amount ,
type_service , shipping_details , list_in , direct_payment , end_time_type , approved ,
listing_type , start_time , end_time , creation_date , state , start_time_type , closed , deleted )
VALUES
(
'$_POST[Products_Title]','$_POST[Products_description]','1','standard','$_POST[Product_Price_USD]',
'$_POST[Product_Price_USD]','30','$_POST[country]','$_POST[zip_code]','1','1','confirmed','0', '$_POST[user_id]','USD',
'$_POST[Postage_USD]' , '$_POST[Insurance_USD]' , '$_POST[Shipping_Method]','$_POST[Shipping_and_Payment_Details]',
'auction','1','duration','1','buy_out','$_POST[date_offer_insert]','$_POST[expire_date_offer_insert]','$_POST[date_offer_insert]','$_POST[state]','now','0','0'
);";
// สั่งให้บันทึกข้อมูลทันที
$dbQuery = mysql_query($sql);
// ตรวจสอบว่าการทำงานสมบูรณ์หรือไม่
if($dbQuery)
{
echo "<div class=\"dialog-box-success5_report\">
<div class=\"dialog-left\" style=\" margin-left: -14px; \" >
<h3 align=\"center\"><img src=\"images/succes.png\" alt=\"\"/>Thank</h3>
<h3 align=\"center\">OK</h3></div>
</div>";
}
}
?>
ส่วนอันนี้เป็นโค๊ด insert table b ค๊ะ
Code (PHP)
<?PHP
/**
*
*
*
*/
include("header_new.php");
if(isset($_POST["submit"])){
include("connect.php");
$sql = "INSERT INTO test_test
( name , description )
VALUES
(
'$_POST[Products_Title]','$_POST[Products_description]'
);";
// สั่งให้บันทึกข้อมูลทันที
$dbQuery = mysql_query($sql);
// ตรวจสอบว่าการทำงานสมบูรณ์หรือไม่
if($dbQuery)
{
echo "<div class=\"dialog-box-success5_report\">
<div class=\"dialog-left\" style=\" margin-left: -14px; \" >
<h3 align=\"center\"><img src=\"images/succes.png\" alt=\"\"/>Thank</h3>
<h3 align=\"center\">OK</h3></div>
</div>";
}
}
?>
จะแก้ไขตรงไหนดีค๊ะ
ประวัติการแก้ไข 2013-03-18 21:55:07
Date :
2013-03-18 20:34:48
By :
dferru
ขอรบกวนคุณแมวของคุกกี้ ช่วยแนะนำหน่อยนะค๊ะ
Date :
2013-03-19 12:56:04
By :
dferru
เท่าที่ดู SQL ไม่น่าจะมีปัญหาอะไร
error ที่เป็นไปได้มีแค่
1. ตารางไม่ได้ชื่อ test_test
2. $_POST[Products_Title] และ $_POST[Products_description] มีตัวอักษรที่ต้อง escape เช่น ' อยู่
3 $_POST[Products_Title] และ $_POST[Products_description] มีความยาวเกิน 250 ตัวอักษร
ทดสอบดูครับ
<?PHP
/**
*
*
*
*/
include("header_new.php");
if(isset($_POST["submit"])){
include("connect.php");
// escape ค่าที่รับมาจากผู้ใช้
$_POST['Products_Title'] = mysql_real_escape_string($_POST['Products_Title']);
$_POST['Products_description'] = mysql_real_escape_string($_POST['Products_description']);
$sql = "INSERT INTO test_test
( name , description )
VALUES
(
'$_POST[Products_Title]','$_POST[Products_description]'
);";
// สั่งให้บันทึกข้อมูลทันที
//$dbQuery = mysql_query($sql);
// หา error แบบนี้ครับ แล้วมาบอกนะครับว่ามันขึ้นว่าอะไร
// จริงๆ ผมว่าผมและคนอื่นๆ เคยแสดงตัวอย่างลักษณะนี้ให้คุณดูหลายครั้งแล้ว
$dbQuery = mysql_query($sql) or die(mysql_error());
// ตรวจสอบว่าการทำงานสมบูรณ์หรือไม่
if($dbQuery)
{
echo "<div class=\"dialog-box-success5_report\">
<div class=\"dialog-left\" style=\" margin-left: -14px; \" >
<h3 align=\"center\"><img src=\"images/succes.png\" alt=\"\"/>Thank</h3>
<h3 align=\"center\">OK</h3></div>
</div>";
}
}
?>
Date :
2013-03-19 13:20:36
By :
cookiephp
ลองแบบนี้ดูครับ
insert into b (id,name,description) values( (select max(t1.id)+1 from b t1) , 'dferru' , 'hello world')
Date :
2013-03-21 11:12:37
By :
sakuraei
from b t1
t1 คือชื่อสมมุติที่ตั้งขึ้นครับ เพราะเราไม่สามารถใช้ b ตรงๆในซับคิวรี่ได้
Date :
2013-03-21 11:46:25
By :
sakuraei
แปลกมากๆเลยค๊ะ table a ที่ auto increment ทุกครั้งที่ refresh เพจ คือ ไม่ว่าจะเอาไปใช้กับโค๊ด insert ที่สร้างใหม่ อะไรก็ตาม
ถ้ามีการ refresh เพจนั้น table a จะ auto increment ค่าว่าง ตลอดเลยค๊ะ
Date :
2013-03-21 11:52:49
By :
dferru
หรือจะทดลองใช้ max(last_insert_id(`id`))+1 ก็ได้ครับ
ผมไม่เคยกำหนด id เป็น bigint ครับ ไม่แน่ใจว่าจะมีปัญหากับตัวนี้หรือเปล่า
จำเป็นที่จะต้องใช้ถึง 20 หลักเลยเหรอครับ bigint(20) ลองคิดว่ามีคดีปีละหนึ่งแสนสำนวน ภายในยี่สิบปีก็ไม่น่าเกิน
สามสิบล้าน ก็แค่ 8 หลักเท่านั้นเอง .... เป็นแค่ข้อสันนิษฐาน ยังไงลองปรับแล้วทดสอบดูก่อนก็ได้ครับ
ปล.ถามนอกประเด็นครับ ทำระบบให้สำนักงานบังคับคดี จังหวัดอะไรหรือครับ
ประวัติการแก้ไข 2013-03-21 12:25:24 2013-03-21 12:39:05
Date :
2013-03-21 12:18:36
By :
sakuraei
สรุปเป็นเรื่องปัญหา refresh เหรอครับ
ผมก็นึกว่าเรื่อง INSERT ตาราง b ไม่ได้
ถ้า refresh แล้วข้อมูลมันเข้า ก็ถูกต้องแล้วนี่ครับ
ถ้าครั้งแรกคุณกด submit แล้วข้อมูลมันเข้ามา
พอคุณ refresh บราวเซอร์ก็จะถามว่า จะส่งข้อมูลซ้ำอีกครั้งมั้ย
ถ้าคุณตกลง มันก็จะเข้าเงื่อนไขเดิม
หากคุณคิดว่า
if(isset($_POST["submit"])){
จะหมายถึงการกดปุ่ม submit เท่านั้น แต่ไม่ใช่การ refresh นั้นผิดครับ
แม้จะ refresh $_POST["submit"] ก็จะยังคงอยู่ จนกว่าคุณจะ redirect ไปหน้าอื่น
เพราะ $_POST["submit"] เป็นข้อมูลที่ติดอยู่กับปุ่มเท่านั้น ไม่ได้หมายถึงการ "กดปุ่ม" เลย
Date :
2013-03-21 12:22:51
By :
cookiephp
แก้ไขได้แล้วค๊ะ
พอดี page a.php
มีการ include file class_item.php
ซึ่งภายใน file class_item.php มีฟังก์ชันเก่าสำหรับ สร้าง temporary ไฟล์ค๊ะ ( เป็นของเก่าลืมเอาออกค๊ะ )
Code (PHP)
function create_temporary_item($d)
{
$this->query("INSERT INTO " . DB_PREFIX . "a
(creation_in_progress, creation_date, id) VALUES
(1, " . CURRENT_TIME . ", '" . $id . "')");
$id = $this->insert_id();
return $id;
}
ขอขอบคุณทุกๆความช่วยเหลือจากใจ นะค๊ะ ^^
Date :
2013-03-21 14:44:26
By :
dferru
Load balance : Server 02