สอบถามเรื่องการ update ข้อมูล 2 Table พร้อมกันครับ
อยากทราบวิธีการ update 2 ตารางพร้อมกันกัน
มี ตางราง 1 stock
ตาราง 2 history_in
ตอนนี้ insert 2 ตาราง พร้อมกัน ได้ แล้ว
แต่ update มันupdate แค่ ตารางเดียว คือ ตาราง stock
code save.php
Code (C#)
<?php
include_once"connect.php";
$product_id=$_POST['product_id'];
$product_des=$_POST['product_des'];
$start_date=$_POST['start_date'];
$end_date=$_POST['end_date'];
$detail=$_POST['detail'];
$serial=$_POST['serial'];
$customer=$_POST['customer'];
$trans_code=$_POST['trans_code'];
$amount=$_POST['amount'];
$image = $_FILES["fileupload"]["name"];
move_uploaded_file($_FILES["fileupload"]["tmp_name"],"../Myproject/storeimage/".$_FILES["fileupload"]["name"]);
$id=$_POST['id'];
if(empty($id))
{$sql="INSERT INTO stock (product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image) VALUES ('$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')" ;
}
if(empty($id))
{$sql1="INSERT INTO history_in (product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image) VALUES ('$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')" ;
}
else
{
$sql=" UPDATE stock set product_id='$product_id',product_des='$product_des',start_date='$start_date',end_date='$end_date',detail='$detail',serial='$serial',customer='$customer',trans_code='$trans_code',amount='$amount',image='$image' WHERE id='$id'"
;
$sql1="UPDATE history_in set product_id='$product_id',product_des='$product_des',start_date='$start_date',end_date='$end_date',detail='$detail',serial='$serial',customer='$customer',trans_code='$trans_code',amount='$amount',image='$image' WHERE id='$id'";
}
if(mysql_query($sql))
{
echo"";
}
if(mysql_query($sql1))
{
echo"";
}
else
{
echo mysql_error();
}
?>
ส่วน code อันนี้เป็น code edit
code ส่วน edit นี้ผมลอง เปลี่ยนชื่อ แก้ไขไปมา แล้ว ยังไม่สามารถ update ตาราง history_in ได้ครับ
Code (C#)
<?php
include_once "connect.php";
$id=$_GET['id'];
$sql_stock=mysql_query("SELECT * FROM stock WHERE id='$id'");
$rs_stock=mysql_fetch_assoc($sql_stock);
?>
<br />
<form name="frn" action="stock_save.php" method="post" enctype="multipart/form-data" ><table border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="" class="fix">
<tr>
<td width="218" bgcolor="#666666"><font color="#FFFFFF" size="+1">Product P/No</font></td>
<td width="238" ><input type="text" name="product_id" value="<?=$rs_stock['product_id'];?>" size="25" /></td>
</tr>
<tr>
<td bgcolor="#666666"><font color="#FFFFFF" size="+1">Product Description:</font></td>
<td><input type="text" name="product_des" value="<?=$rs_stock['product_des'];?>" size="25" /></td>
</tr>
<tr>
<td bgcolor="#666666"><font color="#FFFFFF" size="+1">Start_Date:</font></td>
<td><input type="date" name="start_date" value="<?=$rs_stock['start_date'];?>" size="25" /></td>
</tr>
<tr>
<td bgcolor="#666666"><font color="#FFFFFF" size="+1">End_Date:</font></td>
<td><input type="date" name="end_date" value="<?=$rs_stock['end_date'];?>" size="25" /></td>
</tr>
<tr>
<td bgcolor="#666666"><font color="#FFFFFF" size="+1">Transaction Details:</font></td>
<td><textarea name="detail" value="<?=$rs_stock['detail'];?>" rows="4" cols="50" ></textarea></td>
</tr>
<tr>
<td bgcolor="#666666"><font color="#FFFFFF" size="+1">Serial Number:</font></td>
<td ><input type="text" name="serial" value="<?=$rs_stock['serial'];?>" size="25" /></td>
</tr>
<tr>
<td bgcolor="#666666"><font color="#FFFFFF" size="+1">Customer</font></td>
<td><input type="text" name="project" value="<?=$rs_stock['project'];?>" size="25" /></td>
</tr>
<tr>
<td bgcolor="#666666"><font color="#FFFFFF" size="+1">Amount</font></td>
<td><input type="text" name="amount" value="<?=$rs_stock['amount'];?>" size="5" /></td>
</tr>
<tr>
<td bgcolor="#666666"><font color="#FFFFFF" size="+1"><p>Transaction Code:</p></font>
<p> </p></td>
<td><p>
<input name="trans_code" type="radio" id="เพื่อขาย" value="Inventory" onClick="alert(id)" />
<label>Inventory</label>
<input name="trans_code" type="radio" id="เพื่อให้เช่าหรือใช้เอง" value="Asset" onclick="alert(id)" />
<label>Asset</label>
</p>
<p>
<input type="radio" name="trans_code" id="ของที่ได้มาฟรีๆ" value="Non-Inventory" onclick="alert(id)" />
Non-Inventory
</p>
</td>
</tr>
<tr>
<td bgcolor="#666666"> <input name="fileupload" type="file" onchange="showPreview(this)" value="<?=$rs_stock['image'];?> " id="fileupload" /></td>
<td ><img src="../myproject/storeimage/<?=$rs_stock['image'];?>" id="imgAvatar" height="122" width="174" /></td>
</tr>
<tr>
<td height="26" colspan="2" align="center" bgcolor="#666666"> <input type="submit" value="Submit" />
<input type="reset" value="Reset" />
<input type="hidden" name="id" value="<?=$rs_stock['id'];?>" /> </td>
</tr>
</table>
</form> </td>
</tr>
</table></center>
รบกวนผู้รู้ช่วยดูทีนะครับ ลองแก้ไปแก้มา ไม่ได้เลยครับบบTag : PHP
Date :
2014-08-22 10:58:06
By :
bbb
View :
10291
Reply :
17
query 2 รอบก็ได้น่ะ
Date :
2014-08-22 11:12:33
By :
mangkunzo
คิวรี่ ตรง
หน้า edit ป่ะครับ
ตรงนี้ป่ะครับ
<?php
include_once "connect.php";
$id=$_GET['id'];
$sql_stock=mysql_query("SELECT * FROM stock WHERE id='$id'");
$rs_stock=mysql_fetch_assoc($sql_stock);
?>
Date :
2014-08-22 11:19:56
By :
bbb
Code (PHP)
if(empty($id)){
$sql="INSERT INTO stock (product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image) VALUES ('$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')";
$objQuery = mysql_query($sql);
$sql1="INSERT INTO history_in (product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image) VALUES ('$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')";
$objQuery = mysql_query($sql1);
}
else
{
$sql=" UPDATE stock set product_id='$product_id',product_des='$product_des',start_date='$start_date',end_date='$end_date',detail='$detail',serial='$serial',customer='$customer',trans_code='$trans_code',amount='$amount',image='$image' WHERE id='$id'";
$objQuery = mysql_query($sql);
$sql1="UPDATE history_in set product_id='$product_id',product_des='$product_des',start_date='$start_date',end_date='$end_date',detail='$detail',serial='$serial',customer='$customer',trans_code='$trans_code',amount='$amount',image='$image' WHERE id='$id'";
$objQuery = mysql_query($sql1);
}
Date :
2014-08-22 11:29:12
By :
chai19
ลองใส่ แล้ว ยังไม่ ตาราง history_in ยังไม่ update เลยครับ update แค่ stock
Date :
2014-08-22 11:41:34
By :
bbb
เท่าที่ผมเข้าใจ
สองตารางนี้เก็บค่าจากฟอร์มเดียวกันใช่มั้ยครับ? ( คือ 1 ฟอร์ม แต่ส่งค่าให้เก็บ 2 ตาราง )
ส่วนเงื่อนไขก็ ถ้าค่า $id เป็นค่าว่าง ให้ insert ข้อมูลไป ( คือใส่ ค่า $id ในฟอร์มเองสินะ ) แล้วถ้าค่ามีอยู่แล้ว ( จากการดึงข้อมูลจาก DB ทำให้ค่าไม่ว่างตั้งแต่แรก ก็ให้มันเด้งไปเงื่อนไขสองเอา
ถ้าแบบนั้น ใช้ if เดียว แล้วคิวรี่ทั้ง 2 ตารางพร้อมกันก็ได้ครับ
Code (ASP)
<?
$id=$_POST['id'];
if(empty($id)){
mysql_query("INSERT INTO stock (product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image) VALUES ('$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')");
mysql_query("INSERT INTO history_in (product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image) VALUES ('$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')") ;
}
else {
mysql_query(" UPDATE stock set product_id='$product_id',product_des='$product_des',start_date='$start_date',end_date='$end_date',detail='$detail',serial='$serial',customer='$customer',trans_code='$trans_code',amount='$amount',image='$image' WHERE id='$id'");
mysql_query("UPDATE history_in set product_id='$product_id',product_des='$product_des',start_date='$start_date',end_date='$end_date',detail='$detail',serial='$serial',customer='$customer',trans_code='$trans_code',amount='$amount',image='$image' WHERE id='$id'");
}
?>
ไม่ก็อีกวิธีนึง
ลองเอา code ส่วน update ของ history_in ไปเช็คใน sql ตรงฐานข้อมูล history_in ก่อนก็ได้ครับ ถ้ามันเด้ง error แสดงว่า code ที่เราเขียนมีปัญหา ( อาจตกหล่นบางค่าไป )
เพราะเท่าที่ผมดู code มันก็ไม่น่าจะผิดอะไร ( แค่ใช้ if เยอะไปหน่อย ทั้งๆที่ไม่ต้องก็ได้ )
Date :
2014-08-22 11:43:34
By :
nimirue
ครับ เดว ผมจะลองดูนะครับ ขอบคุนนะครับบผม
Date :
2014-08-22 11:50:53
By :
bbb
code edit
Code (PHP)
<?php
include_once"connect.php";
$product_id=$_POST['product_id'];
$product_des=$_POST['product_des'];
$start_date=$_POST['start_date'];
$end_date=$_POST['end_date'];
$detail=$_POST['detail'];
$serial=$_POST['serial'];
$customer=$_POST['customer'];
$trans_code=$_POST['trans_code'];
$amount=$_POST['amount'];
$image = $_FILES["fileupload"]["name"];
move_uploaded_file($_FILES["fileupload"]["tmp_name"],"../Myproject/storeimage/".$_FILES["fileupload"]["name"]);
$id=$_POST['id'];
if(empty($id))
{
$sql="INSERT INTO stock (product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image)
VALUES ('$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')" ;
$sql1="INSERT INTO history_in (product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image)
VALUES ('$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')" ;
}else{
$sql=" UPDATE stock set
product_id='$product_id' , product_des='$product_des' , start_date='$start_date' , end_date='$end_date' , detail='$detail'
, serial='$serial' , customer='$customer' , trans_code='$trans_code' , amount='$amount' , image='$image'
WHERE id='$id' ";
$sql1="UPDATE history_in set ".
" product_id='$product_id' , product_des='$product_des' , start_date='$start_date' , end_date='$end_date' , detail='$detail'
, serial='$serial' , customer='$customer' , trans_code='$trans_code' , amount='$amount' , image='$image'
WHERE id='$id' ";
}
if(!mysql_query($sql)) echo mysql_error() , "\n<br>" , $sql , "\n<br>"; else if(mysql_affected_rows()==0) echo $sql , "\n<br>";
if(!mysql_query($sql1)) echo mysql_error() , "\n<br>" , $sql1 , "\n<br>"; else if(mysql_affected_rows()==0) echo $sql1 , "\n<br>";
?>
ประวัติการแก้ไข 2014-08-22 12:06:17
Date :
2014-08-22 12:05:12
By :
Chaidhanan
ผมลองเอา code ไปวางดูสรุปมันยัง ไม่ update ให้เลยครับ อัพ update แค่ตารางเดียวว แก้ไปแก้มา ก็ไม่up
ใครพอมีวิธีมั่งครับบบ
Date :
2014-08-22 13:42:51
By :
bbb
code คห 7 ไม่แสดง report อะไรออกมาเลย เหรอครับ เออเร่อร์ก็ไม่มีเลยเหรอครับ
34. if(!mysql_query($sql)) echo mysql_error() , "\n<br>" , $sql , "\n<br>"; else if(mysql_affected_rows()==0) echo $sql , "\n<br>";
35. if(!mysql_query($sql1)) echo mysql_error() , "\n<br>" , $sql1 , "\n<br>"; else if(mysql_affected_rows()==0) echo $sql1 , "\n<br>";
ถ้ารัน ผ่าน 35 มันต้อง แสดง report อะไรมาซักอย่าง ถ้ามันไม่อัพเดท
if(!mysql_query($sql1))
// แสดงอันนี้กรณี statement Error
echo mysql_error() , "\n<br>" , $sql1 , "\n<br>";
else if(mysql_affected_rows()==0)
// แสดงอันนี้ กรณี ไม่ได้มีการอัพเดทข้อมูล หมายความ ไม่เข้าเคส where clause
echo $sql1 , "\n<br>";
ถ้าไม่แสดงอะไรเลย มันต้องมีการ อัพเดท อย่างแน่นอน ไ่ม่ผิดไปจากนี้หรอกครับ
Date :
2014-08-22 14:03:50
By :
Chaidhanan
Code (C#)
<?php
include_once"connect.php";
$product_id=$_POST['product_id'];
$product_des=$_POST['product_des'];
$start_date=$_POST['start_date'];
$end_date=$_POST['end_date'];
$detail=$_POST['detail'];
$serial=$_POST['serial'];
$customer=$_POST['customer'];
$trans_code=$_POST['trans_code'];
$amount=$_POST['amount'];
$image = $_FILES["fileupload"]["name"];
move_uploaded_file($_FILES["fileupload"]["tmp_name"],"../Myproject/storeimage/".$_FILES["fileupload"]["name"]);
$id=$_POST['id'];
if(empty($id))
{
$sql="INSERT INTO stock (product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image)
VALUES ('$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')" ;
$sql1="INSERT INTO history_in (product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image)
VALUES ('$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')" ;
}else{
$sql=" UPDATE stock set
product_id='$product_id' , product_des='$product_des' , start_date='$start_date' , end_date='$end_date' , detail='$detail'
, serial='$serial' , customer='$customer' , trans_code='$trans_code' , amount='$amount' , image='$image'
WHERE id='$id' ";
$sql1="UPDATE history_in set ".
" product_id='$product_id' , product_des='$product_des' , start_date='$start_date' , end_date='$end_date' , detail='$detail'
, serial='$serial' , customer='$customer' , trans_code='$trans_code' , amount='$amount' , image='$image'
WHERE id='$id' ";
}
if(!mysql_query($sql)) echo mysql_error() , "\n<br>" , $sql , "\n<br>"; else if(mysql_affected_rows()==0) echo $sql , "\n<br>";
if(!mysql_query($sql1)) echo mysql_error() , "\n<br>" , $sql1 , "\n<br>"; else if(mysql_affected_rows()==0) echo $sql1 , "\n<br>";
?>
มันขึ้น error แค่นี้ครับ
แล้วมัน update ให้ แต่ตาราง stock
แต่ history_in ไม่updateครับ
Date :
2014-08-22 14:13:41
By :
bbb
แสดงว่า โค๊ด update ไม่ได้ผิด ไวยกรณ์ ครับ ไม่ได้ error แต่
ข้อมุลมันเหมือนกัน หรือ หา id=339 ไม่เจอ
ทำไห้ affected_rows = 0; ไม่มีการอัพเดท ครับ
ก็ลองเช็ค statement ที่มัน echo ออกมา ว่าถูกต้องตามต้องการไหมครับ
Date :
2014-08-22 14:21:24
By :
Chaidhanan
ครับ คือ ตาราง history_in อ้ะ ผมต้อง การให้ มันบันทึก ข้อมูลของ ตาราง stock
แค่ insert กับupdate ทำให้ข้อมูลต้องเหมือนกัน เหมือน ตารางhistory_in เอาไว้เกบประวัติ สินค้าอ่ะครับไม่มี ลบออก ประมาณนี้อ่ะครับ พอเข้าใจไหมอ่าา
Date :
2014-08-22 14:25:15
By :
bbb
เกี่ยวไหมครับ ที่ where id='$'id' ของทั้ง2 ตารางมันไม่ตรงกัน
Date :
2014-08-22 14:36:45
By :
bbb
เพราะเนื่องจากมันเป็นแค่ history
งั้น ไม่ต้อง อัพเดทครับ ใช้วิธีการ insert เข้า history อย่างเดียว
และเพิ่ม field `refer_id` ไว้เก็บอ้างอิง id ของ stock
Code (PHP)
<?php
include_once"connect.php";
$product_id=$_POST['product_id'];
$product_des=$_POST['product_des'];
$start_date=$_POST['start_date'];
$end_date=$_POST['end_date'];
$detail=$_POST['detail'];
$serial=$_POST['serial'];
$customer=$_POST['customer'];
$trans_code=$_POST['trans_code'];
$amount=$_POST['amount'];
$image = $_FILES["fileupload"]["name"];
move_uploaded_file($_FILES["fileupload"]["tmp_name"],"../Myproject/storeimage/".$_FILES["fileupload"]["name"]);
$id=$_POST['id'];
if(empty($id))
{
$sql="INSERT INTO stock (product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image)
VALUES ('$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')" ;
if(!mysql_query($sql)) echo mysql_error() , "\n<br>" , $sql , "\n<br>";
else{
$insert_id=mysql_insert_id();
$sql1="INSERT INTO history_in (refer_id, product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image)
VALUES ('$insert_id', '$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')" ;
mysql_query($sql1);
}
}else{
$sql=" UPDATE stock set
product_id='$product_id' , product_des='$product_des' , start_date='$start_date' , end_date='$end_date'
, detail='$detail', serial='$serial' , customer='$customer' , trans_code='$trans_code' , amount='$amount'
, image='$image' WHERE id='$id' ";
if(!mysql_query($sql1)) echo mysql_error() , "\n<br>" , $sql1 , "\n<br>";
else if(mysql_affected_rows()==0) echo $sql1 , "\n<br>";
else{
$sql1="INSERT INTO history_in (refer_id, product_id,product_des,start_date,end_date,detail,serial,customer,trans_code,amount,image)
VALUES ( '$id', '$product_id','$product_des','$start_date','$end_date','$detail','$serial','$customer','$trans_code','$amount','$image')" ;
mysql_query($sql1);
}
}
?>
ประวัติการแก้ไข 2014-08-22 15:01:38
Date :
2014-08-22 14:59:27
By :
Chaidhanan
พี่ครับ ผมลองทำ แล้ว ปัญหาคือ ผมตั้ง id เปนpaimary auto_increment
ผมลองไปลบ ล้างค่า id ให้หมด แล้วให้ id ใน stock และ history_in มันรัน เลข ไปพร้อมกัน สรุปคือได้
ถ้าทำอย่างนี้มันจะมีปัญหาภายหลังไหมครับ
ประวัติการแก้ไข 2014-08-22 17:06:23
Date :
2014-08-22 17:01:10
By :
bbb
อยู่ที่การคิวรี่ครับ เมื่อเราใส่ refer_id ใน history เพื่ออ้างอิง กับ stock
เมื่อต้องการข้อมูล ตรงกัน ก็ต้อง อ้างอิง ให้ถูกต้องเท่านั้นครับ ไม่ได้มีปัญหากับ table stock แต่อย่างใด
สำหรับ history ก็คงไว้ตรวจสอบว่า ได้ทำอะไรกับ stock ไปบ้าง ครับ
Date :
2014-08-22 17:34:43
By :
Chaidhanan
อ่อเข้าใจแล้วคร้าบบบ. ขอบคุนทุกคนมากนะครับ
Date :
2014-08-23 12:38:07
By :
bbb
Load balance : Server 03