|
|
|
ขอถามเรื่องการบันทึกข้อมูลลง database 2ตารางทำอย่างไรหรอครับ |
|
|
|
|
|
|
|
ก็ในกรณีที่เรามีเก็บ 2 ตารางน่ะครับ เช่น tb_member กับ tb_memberlogin เวลาเรา Sumit ไปก็ใ้ห้มาน insert เข้าสองตารางเลยครับ query สองครั้งน่ะครับผม เช่น
1.insert เข้า tb_member
$sql="Insert into tb_member(ชื่อ,ที่อยู่,เบอร์โทร,อีเมล์) values(.......)";
$result=mysql_query($sql);
2.insert เข้า tb_memberlogin(user,passwors,status) values(...................);
$result=mysql_query($sql);
ประมาณนี้แหละครับท่านอื่นว่าไงครับลองดูน่ะครับน่าจะช่วยได้บ้าง
|
|
|
|
|
Date :
2011-01-01 18:25:34 |
By :
gogo01 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับเดียวลองทำดูครับ พี่ๆเว็บนี้ใจดีกันทุกคนเลย ผมเข้ามาอ่านทุกวันเลยครับได้ความรู้ทั้งเข้าใจบ้างและไม่เข้าใจบ้างแต่ก็จะพยายามต่อไปครับ
|
|
|
|
|
Date :
2011-01-02 10:30:12 |
By :
XmatinX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เอาตั้งแต่ตอน คอนเน็ก ดาต้าเบส เลย ได้ ปะ ครับ
|
|
|
|
|
Date :
2011-01-03 18:57:52 |
By :
XmatinX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<?php
include("../connect/config.inc.php");
$empSQL = "INSERT INTO emp ";
$empSQL .="(name,address,e-mail,tel) ";
$empSQL .="VALUES ";
$empSQL .="('".$_POST["txtname"]."','".$_POST["txtaddress"]."','".$_POST["txtmail"]."','".$_POST["txttel"]."')";
$userSQL = "INSERT INTO user ";
$userSQL .="(user,pass,u_status) ";
$userSQL .="VALUES ";
$userSQL .="('".$_POST["txtuser"]."','".$_POST["txtpass"]."','emp')";
$objQuery = mysql_query($empSQL);
$objQuery = mysql_query($userSQL);
if($objQuery)
{
echo "Save Done.";
}
else
{
echo "Error Save [".$empSQL."] and [".$userSQL."]";
}
?>
-------------------------------
มีแค่ข้อมูล user ที่ถูกบันทึกลงไป อะ ครับ แต่ ตาราง emp ไม่มี ข้อมูลเลย ครับ ขอความรู้ที นะ ครับ ผมเขียน ผิด แน่ๆเลย ใช่ปะครับคุณ พี่ อิอิอิ
|
ประวัติการแก้ไข 2011-01-03 21:09:42
|
|
|
|
Date :
2011-01-03 20:32:30 |
By :
XmatinX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองเปลี่ยนชื่อตัวแปรดูนะครับ
Code (PHP)
$objQueryemp = mysql_query($empSQL);
$objQueryuser = mysql_query($userSQL);
if($objQueryemp)
{
echo "Save Done.";
}
else
{
echo "Error Save [".$empSQL."]";
}
if($objQueryuser)
{
echo "Save Done.";
}
else
{
echo "Error Save [".$userSQL."]";
}
|
ประวัติการแก้ไข 2011-01-04 01:08:55 2011-01-04 01:09:19
|
|
|
|
Date :
2011-01-04 01:07:29 |
By :
ja_14436 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับพี่ๆเดียวผมลองทำแล้วได้ผลอย่างไรเดียวมาโพส อีก ที ครับ
|
|
|
|
|
Date :
2011-01-04 08:23:13 |
By :
XmatinX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตาราง ของผมมี 3ตารางครับ คือ
ตารางที่ 1. เก็บ ID_cus ชื่อ ที่อยู่ เบอร์โทร อีเมล์
ตารางที่ 2. เก็บ ID_emp ชื่อ ที่อยู่ เบอร์โทร อีเมล์
ตารางที่ 3. เก็บ ID_user user passwors status
ผมต้องการ นำ ID_cus และ ID_emp มาบันทึกลงในตาราง ที่ 3 ผมต้องเขียนอย่างไรหรอ ครับ
|
|
|
|
|
Date :
2011-01-13 23:50:00 |
By :
XmatinX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หลังจากใช้คำสั่ง mysql_query แอดข้อมูลไปแล้ว ใช้ mysql_insert_id() เพื่อรับไอดีล่าสุดที่เพิ่งได้แอดไปครับ แต่อันนี้ใช้ได้เฉพาะ Primary Key ของตารางนั้นเป็นแบบ Auto Increment นะครับ
เช่น
ถ้าหลังจากแอดข้อมูลลูกค้าลงตารางแรกไป (สมมุติว่าตารางชื่อ Customer ละกัน) แล้วอยากได้ไอดีลูกค้า(ที่ึพึ่งแอดไปตะกี้นี้อ่ะ) มาเก็บไว้ในตัวแปร $customer_id (สมมุติขึ้นมาครับ) จะมีโค้ดแนวนี้
Code (PHP)
<?php
$sql = sprintf("INSERT INTO customer (name , address , telephone , email) VALUES('%s' , '%s' , '%s' , '%s') ",
trim($_POST['txtname']),
trim($_POST['txtaddress']),
trim($_POST['txttel']),
trim($_POST['txtmail']));
mysql_query($sql) or die(mysql_error());
$customer_id = mysql_insert_id();
// เอา $customer_id ไปใช้ต่อเลยครับ
?>
Tip เพิ่มเติม
- คำสั่ง sprintf เอาไว้จัดฟอร์แมทตัวอักษร อาจจะทำให้เขียนโค้ดยาวหน่อย แต่มันช่วยให้ตอนหลังกลับมาอ่าน อ่านง่าย แก้ง่าย ลดความเสี่ยงจากการใช้สัญลักษณ์ ' กับ " อันนี้ใช้หรือไม่ใช้แล้วแต่ความถนัดครับ
- คำสั่ง trim เอาไว้ตัดช่องว่างซ้ายขวาตัวอักษรออก ก่อนบันทึกข้อมูลลงฐานข้อมูล ถ้าข้อมูลประเภทสตริง ควรใช้ trim ครอบนะครับ เพราะบางทีเราไปควบคุมคนพิมพ์เข้ามาไม่ได้ แล้ว TextArea น่ะครับ มันชอบแทรกตัวอักษรเปล่าๆลงไปด้วย อย่าลืม trim มันก่อนนะครับ
- ตอนใช้ mysql_query ใช้ or die(mysql_error()) ตามหลังด้วยก็ดีครับ มันจะบอกข้อความข้อผิดพลาดออกมาชัดเจน บางทีเราแอดข้อมูลมันไม่เข้า ถ้าเราไม่แสดงข้อผิดพลาดออกมา มันก็ยังทำงานได้อยู่ ยังงี้ทำให้การทดสอบทำได้ยากครับ อย่าลืมใส่ทุกครั้งนะครับ
|
|
|
|
|
Date :
2011-01-14 00:14:23 |
By :
kenessar |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณสำหรับคำตอบ ครับ
|
|
|
|
|
Date :
2011-01-14 00:21:06 |
By :
XmatinX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อ่อ เพิ่มเติมครับ สำหรับการตรวจสอบว่า เวลาเรารันคำสั่ง SQL จำพวก INSERT , UPDATE และ DELETE ได้ผลหรือไม่ให้ใช้คำสั่ง mysql_affected_rows() เป็นตัวตรวจสอบนะครับ โดยมันจะคืนค่ากลับมาเป็นจำนวนแถวที่กระทำการสำเร็จ
ตัวอย่างโค้ด
Code (PHP)
<?php
$sql = sprintf("INSERT INTO customer (name , address , telephone , email) VALUES('%s' , '%s' , '%s' , '%s') ",
trim($_POST['txtname']),
trim($_POST['txtaddress']),
trim($_POST['txttel']),
trim($_POST['txtmail']));
mysql_query($sql) or die(mysql_error());
if(mysql_affected_rows() > 0)
{
echo "บันทึกสำเร็จแล้ว";
}
else
{
echo "ไม่มีการบันทึกเกิดขึ้น";
}
?>
ส่วนมากแล้วคำสั่ง INSERT ไม่ค่อยมีเรื่องที่มันแอดไม่เข้าหรอกครับ เพราะถ้ามันผิดพลาดมันจบตั้งแต่ or die(mysql_error()) แล้วครับ
ส่วนมากมักเอาไว้นับผลลัพธ์ในคำสั่งพวก UPDATE กับ DELETE ลองเอาไปใช้ดูครับเผื่อมีประโยชน์
|
|
|
|
|
Date :
2011-01-14 00:23:24 |
By :
kenessar |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<?php
include("../connect/config.inc.php");
$empSQL = "INSERT INTO emp "; //บันทึกลงตาราง emp
$empSQL .="(name,address,mail,tel) ";
$empSQL .="VALUES ";
$empSQL .="('".$_POST["txtname"]."','".$_POST["txtaddress"]."','".$_POST["txtmail"]."','".$_POST["txttel"]."')";
$emp = mysql_query($empSQL);
$emp_id = mysql_insert_id();
$userSQL = "INSERT INTO user "; // บันทึกลงตาราง user
$userSQL .="(u_id,user,pass,u_status) ";
$userSQL .="VALUES ";
$userSQL .="('$emp_id''".$_POST["txtuser"]."','".$_POST["txtpass"]."','emp')";
$user = mysql_query($userSQL);
if($emp and $user)
{
echo "Save Done.";
header ("location:index.php");
}
else
{
echo "Error Save";
header ("location:addemp.php");
}
?>
ผมทำแบบนี้มันบันทึก แต่ ตาราง emp อะครับ แต่ตาราง user ตรง ID มันก็ไม่บันทึก อะครับ ช่วยกรุณาดูให้ที่นะครับผมต้องเขียน ผิดแน่ ๆๆ
|
|
|
|
|
Date :
2011-01-14 00:40:42 |
By :
XmatinX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตรง $userSQL .="('$emp_id''".$_POST["txtuser"]."','".$_POST["txtpass"]."','emp')"; บรรทัดนี้น่ะครับ ลืมใส่ comma คั่นมัน
ลองเปลี่ยนเป็น $userSQL .="('$emp_id' , '".$_POST["txtuser"]."','".$_POST["txtpass"]."','emp')";
|
|
|
|
|
Date :
2011-01-14 01:16:15 |
By :
kenessar |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อย่างที่แนะนำไปแหละครับ ถ้าใช้คำสั่ง sprintf ได้ จะดีบักง่ายขึนอีกเยอะเลยครับ
|
|
|
|
|
Date :
2011-01-14 01:17:43 |
By :
kenessar |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับผมจะลองทำอีกทีครับ ถ้าติดตรงไหนเดียวมารบกวนใหม่นะครับ พี่
|
|
|
|
|
Date :
2011-01-14 07:55:18 |
By :
XmatinX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หลับดึกตื่นเช้านะครับ 555
|
|
|
|
|
Date :
2011-01-14 09:07:31 |
By :
kenessar |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทำโปรเจค อะ ครับ เลยต้อง หาความรู้เยอะๆๆ ขอบคุณอีกครั้งสำหรับแนว ทาง ครับพี่ๆ
|
|
|
|
|
Date :
2011-01-14 09:53:36 |
By :
XmatinX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณพี่ ~ Kenessar ~ ทำได้แล้ว ครับ หุหุ ตก เครื่องหมายไปตัวเดียว หุหุหุ
เดียวถ้าเจอปัญหาอะไรแล้วทำไม่ผ่านผมจะมาถามอีกนะครับ อิอิอิ
|
|
|
|
|
Date :
2011-01-14 22:54:26 |
By :
XmatinX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แล้วถ้าผมต้องการลบ ผมต้องทำคล้ายๆกัน การบันทึก ปะ ครับ
|
|
|
|
|
Date :
2011-01-14 23:51:51 |
By :
XmatinX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|