(จะรอคำตอบจากกระทุ้นี้ ครั้งสุดท้ายแล้ว) ต้องการ alert เมื่อตอนบันทึกข้อมูล..
insert เสร็จแล้ว ไป select ข้อมูลทั้งสาม table มาก่อนครับ โดย join table เอา
เพราะตอน insert คุณไม่ได้ส่งทุกอย่างมา ส่งมาแค่ $userNameID $cmpName $brandID
ดังนั้นต้องไป join table แล้ว where ด้วย usernameid กับ brandid
งงไหม ลองดูก่อน ถ้ายังไม่ได้ เดี๋ยวมาช่วยใหม่
Date :
2009-05-02 17:36:53
By :
plakrim
เรียน พี่ PlaKriM
ก่อนอื่น ผมต้องขอกล่าวคำขอบคุณอย่างสูงมายังพี่ PlaKriM ด้วย
ที่กรุณาเสียเวลาตอบคำถามกระทู้นี้ (คงเป็นกระทู้ที่ตามมากที่สุด)
ผมได้พยายามถึงที่สุดและเขียนไว้ ตามแนวทางที่พี่ PlaKriM บอกว่าดังนี้ :-
---------------------------
ไฟล์ joinTB.php
--------------------------
<?php
$sqlTB = "SELECT * FROM tb_cmp INNER JOIN tb_brandCmp
ON tb_brandCmp.brandID = tb_cmp.brandID
INNER JOIN tb_usename
ON tb_userName.userNameID = tb_cmp.userNameID
WHERE tb_cmp.brandID = tb_brandCmp.brandID
AND tb_cmp.userNameID = tb_userName.userNameID
AND cmpID=$cmpID LIMIT 1";
$resultTB = mysql_query($sqlTB) or die ("$sqlTB_Error");
$rowTB = mysql_fetch_array($resultTB);
$userName = $rowTB['userName'];
$brandName = $rowTB['brandName'];
$model = $rowTB['model'];
$description = $rowTB['description'];
?>
---------------------------
ไฟล์ Action ที่ทำการ Save Data
--------------------------
$sql = "INSERT INTO tb_cmp VALUES(NULL,'$userNameID','$cmpName','$brandID')";
$result = mysql_query($sql) or die ("<script>alert('Cannot save data');history.back();</script>");
include ("joinTB.php");
echo "<script>alert('UserName : $userName\\ncmpName : $cmpName\\nBrand name : $brandName\\nModel : $model\\nDecription : $description\\nSaving completed.\\n(total : $result record)');window.location='FRMcmp.php';</script>";
exit();
-----------------------------------------
ใช้แบบนี้หรือไม่ครับ แต่หากมีแนวทางอื่นๆ ที่ดีกว่า ขอแนะนำด้วยนะครับ ขอขอบคุณมาก ๆ ครับ
Date :
2009-05-02 18:29:38
By :
pukmtec
Code (PHP)
<?php
$sql = "INSERT INTO tb_cmp VALUES(NULL,'$userNameID','$cmpName','$brandID')";
$result = mysql_query($sql) or die ("<script>alert('Cannot save data');history.back();</script>");
$sqlTB = "SELECT * FROM tb_cmp INNER JOIN tb_brandCmp
ON tb_brandCmp.brandID = tb_cmp.brandID
INNER JOIN tb_usename
ON tb_userName.userNameID = tb_cmp.userNameID
WHERE tb_cmp.brandID = tb_brandCmp.brandID
AND tb_cmp.userNameID = tb_userName.userNameID
AND cmpID='" . mysql_insert_id() . "'"; // อ้างอิงโดยที่ใช้ id ที่ insert ลง tb_cmp อันล่าสุด
$resultTB = mysql_query($sqlTB) or die ("$sqlTB_Error");
$rowTB = mysql_fetch_array($resultTB);
$userName = $rowTB['userName'];
$brandName = $rowTB['brandName'];
$model = $rowTB['model'];
$description = $rowTB['description'];
echo "<script>alert('UserName : $userName\\ncmpName : $cmpName\\nBrand name : $brandName\\nModel : $model\\nDecription : $description\\nSaving completed.\\n(total : $result record)');window.location='FRMcmp.php';</script>";
exit();
?>
Date :
2009-05-02 20:35:47
By :
plakrim
เรียน พี่ PlaKriM
ผมได้ลองเปลี่ยนจาก
cmpID=$cmpID LIMIT 1";
มาเป็น
cmpID='".mysql_insert_id()."'"; // อ้างอิงโดยที่ใช้ id ที่ insert ลง tb_cmp อันล่าสุด
ตามคำแนะนำจากพี่แล้ว ทำให้ไม่ปรากฏข้อความใน Alert เลยครับ
mysql_insert_id() มันคือฟังก์ชั่นเหรอครับ ขอขอบคุณอย่างสูงครับ
------------------------------------------------------------
Date :
2009-05-03 02:03:34
By :
pukmtec
mysql_insert_id() คือ ดึง id ล่าสุดของ comID ซึ่งมันต้องเป็น autoincrement ด้วยนะ หรือว่าไม่เป็น
อ้อ เจอที่แปลกๆ อันนึง
$sql = "INSERT INTO tb_cmp VALUES(NULL,'$userNameID','$cmpName','$brandID')";
comID มัน allow null ด้วยหรอ มันไม่ใช่ pk หรอ แล้วเวลา insert ข้อมูลมันเข้าไปจริงหรือเปล่า ลองเปลี่ยนเป็น
$sql = "INSERT INTO tb_cmp (userNameID,cmpName,brandID) VALUES ('$userNameID','$cmpName','$brandID')"; แบบนี้น่าจะดีกว่า comID ไปปรับให้เป็น autoincrement มันจะบวกให้เอง แล้วจะใช้ mysql_insert_id() ;ได้
หรือถ้ามันไม่เป็น autoincrement ต้องไป select max(comID) มาแทน mysql_insert_id();
งงไหม
Date :
2009-05-03 02:29:43
By :
plakrim
อ้าว ขอโทษด้วย
พอดีว่าผมเอาโค๊ดไปใช้กับหน้าจอฟอร์ม Update มันเลยไม่แสดงรายการ Alert ที่ต้องการ
แต่พอเอามาใช้กับหน้าจอฟอร์ม Add Data มันแสดงได้นะครับ
แต่อยากเอาโค๊ดไฟล์นี้ไปใช้ include ไว้ที่เดียว ไม่อยากเขียนหลายไฟล์นะครับ
แล้วที่ผมเขียนไปมันใช้ได้หรือไม่ครับ
รบกวนพี่ PlaKriM ด้วยนะครับ
(นี่ปาเข้าไป ตี 2 ครึ่งแล้ว ผมยังเขียนโปรแกรมไม่เสร็จเลยครับ)
Date :
2009-05-03 02:36:01
By :
pukmtec
พอดียังไม่นอน งั้น ผมเสริมนิดนึงน่ะครับ
เพิ่มความเข้าใจการ จอยน่ะครับ ( INNER JOIN)
SELECT * FROM y INNER JOIN x ON x.a=y.a INNER JOIN z ON x.a = z.a WHERE condition
ถ้ากลัวงงก็ใส่วงเล็บครอบได้
SELECT * FROM (y INNER JOIN x ON x.a=y.a) INNER JOIN z ON x.a = z.a WHERE condition
ก็ไม่แตกต่างกันเท่าไหร่ถ้าจะเขียนอีกแบบ นึง
select * from x,y,z where x.a = y.a and z.a = x.a and (condition)
แล้วแต่สะดวกครับ แต่แบบแรกดูสวยงาม เค้าว่างั้น น่ะ แต่ผมชอบ อย่างหลังเอาง่ายเข้าว่า
แต่มีพี่ๆเค้าตอบแล้ว ไงก็สู้ๆน่าครับ
Date :
2009-05-03 03:37:29
By :
arsachi
ทิ้ง msn ไว้ เดี๋ยวพี่ติดต่อไปช่วยเหลือ วันนี้คงต้องนอนแล้ว
Date :
2009-05-03 03:38:16
By :
plakrim
พี่ arsachi เท่าที่อ่านเข้าใจ และอ่านผ่านๆ ตามมาบ้าง join table จะเร็วว่านิสสสนึงนะครับ
Date :
2009-05-03 03:41:28
By :
plakrim
Load balance : Server 05