import ข้อมูลเข้าระบบ
ได้ลองหากระทู้อันเก่าแล้ว แต่ไม่พบขออนุญาตตั้งคำถามเดิมนะค่ะ คือที่ถามเรื่องการ insert ข้อมูลที่ดึงมาจากฐานแล้วเก็บเข้าไปใหม่ในตารางตัวใหม่ จากโค้ดนี้นะค่ะ
include("connect.php");
$count_cme = count($cment);
$chebx = count($ch);
$check = array();
$date_add = date('Y-m-d H:i:s');
$add_ap = mysql_query("SELECT * FROM ap where branch='$branch_id'");
for ($i=0;$i<count($ch);$i++) {
$id_ap = $ch[$i];
$add_apnew = mysql_query("INSERT INTO ap_remark (id_ap_old,remark,date_add) VALUES ('$id_ap','$count_cme[$n]','$date_add')");
}
ทำอย่างไรค่าของฟิลด์ id_ap_old, remark นี้ก็ไม่ลงนะค่ะไม่รู้เป็นเพราะอะไร ขอความกรุณาช่วยดูหน่อยนะค่ะ งมมาหลายวันแล้วค่ะ
ง่ายๆ เลยครับ เผมือนเดิม คือ ทดลองทำคำสั่งนี้บน phpMyAdmin หลังจากแทนค่าตัวแปรมาแล้ว
INSERT INTO ap_remark (id_ap_old,remark,date_add) VALUES ('$id_ap','$count_cme[$n]','$date_add')
การทดลอง query บน phpMyAdmin จะช่วยหาจุดบกพร่องของ query ได้ดีกว่า การดู error บน php ครับ
ผมตอบคำถามนี้ไม่ได้ เพราะ การ insert ข้อมูลที่ไม่ถูกต้อง อาจมีปัญหาจาก หลายประการ เช่น มีเครื่องหมาย ' หร์อ " ในข้อมูล (ควรเป็น \' หรือ \") หรือ ชนิดของข้อมูลไม่ถูกต้อง หรือ อาจมีฟิลด์ที่ต้องกำหนดเสมอใน query (not null) ซึ่งสิ่งเหล่านี้ ไม่ได้บอกมาในกระทู้
อาจารย์ครับผมใช้วิธีนี้ตรวจสอบ คือ ให้ echo query ที่ต้องการ เช่น
$strSQL = "INSERT INTO ap_remark (id_ap_old,remark,date_add) VALUES ('$id_ap','$count_cme[$n]','$date_add')";
echo $strSQL;
โดยยังไม่ต้องให้เกิดผลลัพธ์ ถ้าได้ string ตามที่ต้องการ การ query ก็น่าจะไม่มีปัญหานะครับ
ข้อมูลลง Table แล้วค่ะ แต่มันติดปัญหาข้อมูลตัวแรกจะไม่เก็บลง Table ให้ แต่ตัวอื่นๆ ก็เก็บลงได้ตามปกติ อย่างเช็คเลือกรายการทั้งหมด 5 รายการ ค่าของตัวแรกจะได้ค่า 0 เสมอ แต่อีก 4 รายการใน table เก็บค่าตามที่ได้ระบุเข้าไปค่ะ ตามโค้ดนี้นะค่ะ
$add_ap = mysql_query("SELECT * FROM ap where branch='$branch_id'");
echo "<br>add_ap=".$add_ap;
for ($i=$id_ap;$i<count($ch);$i++) {
$apid = $ch[$i];
$ment = $cment[$i];
$bra = $branch[$i];
echo "<br>comment = ".$ment;
echo "<br><br>id_ap =".$apid;
$add_apnew ="INSERT INTO ap_remark (id_ap_old,date_add,branch,remark)";
$add_all = $add_apnew."values ('$apid','$date_add','$branch_id','$ment')" or die ("Add ข้อมูลลง Table ไม่ได้ ");
$dbquery = mysql_query($add_all);
echo $add_all;
}
ได้ลองทำการ query ค่าที่ได้จาก $add_all ที่ echo ออกมาได้บน phpMyAdmin หรือยังครับ ถ้ายัง ลองทำดูก่อนนะครับ
ได้ลอง echo ในตัวโค้ดก่อนเก็บลงแล้วค่ะ ค่าแรกที่ได้บันทึกเข้าไปก็ไม่ลงอยู่ดี โดยไม่รู้สาเหตุมาจากตัวไหน ลองหลายครั้งแล้วค่ะ
$add_all = $add_apnew."values ('$apid','$date_add','$branch_id','$ment')" or die ("Add ข้อมูลลง Table ไม่ได้ ");
ถ้าดูจากประโยคที่ให้มานะ
ได้ทำดูแล้วค่ะ ยังไงมันก็ยังเก็บลงเหมือนเดิมคือตัวแรกไม่เก็บค่ะ
555+++
ลอง echo เอาแถวแรกที่ไม่เก็บมาดูครับ
อ้อ echo แล้วก็เอาค่าที่ได้ไป query บน phpMyAdmin ดูครับ
ลองตรวจสอบว่า อาจมีค่าซ้ำ อาจมีบางค่าที่เป็น NULL ชนิดของข้อมูลไม่ถูกต้อง หรือ ความยาวของข้อมูลไม่ถูกต้อง ก็ได้ครับ เอาแต่ตรวจ PHP ไม่ดูที่ SQL เดี๋ยวจะกลายเป็นหญ้าปากคอกไป
ระบบมองเป็นค่าเปล่าไม่เก็บ id และข้อความเพิ่มเติมที่ได้กรอกเข้าไป
กรรม ลบผิด ขอใหม่อีกที
สังเกตได้ว่าเลือกมา 3 ตัว ตัวที่ 1 ไม่ลงค่า id_ap_old กับ remark ให้ค่ะ ช่วยดูหน่อยค่ะ
id_ap =
INSERT INTO ap_remark (id_ap_old,date_add,branch,remark) values ('','2008-10-29 11:47:37','100','')comment = บันทึกทดสอบตัวที่2
id_ap = 4308
INSERT INTO ap_remark (id_ap_old,date_add,branch,remark) values ('4308','2008-10-29 11:47:37','100','บันทึกทดสอบตัวที่2')comment = บันทึกทดสอบตัวที่3
id_ap = 4321
INSERT INTO ap_remark (id_ap_old,date_add,branch,remark) values ('4321','2008-10-29 11:47:37','100','บันทึกทดสอบตัวที่3')
นั่นสิ ก็รู้อยู่แล้วว่าข้อมูลไม่ครบถ้วน ก็ย้อนกลับไปตรวจสอบที่มาของข้อมูล ว่ามันมีมั้ย มันหายไปตรงไหน หรือว่า ข้อมูลนี้ใน db ต้นทางไม่มี ด้ลอง นำ query แรกไป ทดสอบบน phpMyAdmin หรือยัง ว่ามันเข้ามั้ย ถ้ามันไม่เข้าตรวจสอบว่า มันแจ้งข้อผิดพลาดว่า อะไร
อาจารย์ช่วยดูให้หน่อยค่ะว่า ทำอย่างไรให้มันวนลูปค่าเข้ากับตัวนี้ได้ for ตัวนี้มี 2 ตัว ตามโค้ดนี้ค่ะ
for ($i=0;$i<count($ch);$i++) {
$apid = $ch[$i];
//$ment = $cment[$i];
$bra = $branch[$i];
$ment = $cment[$c];
echo "id ตัวที่ $i =".$apid."<br>";
} //$xment = $ment[$i]; /////////// for ตัวนี้เก็บค่า id ตัวเดียวในตาราง แต่ for ตัวต่อไปเก็บได้ครบตามจำนวนที่กรอกเข้าไป
for($c=0;$c<count($cment);$c++)
{
$ment = $cment[$c];
echo "ตัวที่ $c = ".$ment."<br>";
if(($apid != "") && ($ment != ""))
//if(($date_de == "01") && ($tot == "sumt"))
{
$add_apnew ="INSERT INTO ap_remark (id_ap_old,date_add,branch,remark)";
$add_all = $add_apnew."values ('$apid','$date_add','$branch_id','$ment')" or die ("Add ข้อมูลลง Table ไม่ได้ ");
$dbquery = mysql_query($add_all);
} echo "<br>".$add_all."<br>";
}
ช่วยดูให้หน่อยค่ะ จะปิด for ตรงไหนค่ามันถึงจะเข้าได้เท่ากัน ขอเถอะค่ะงงมาหลายวันมากกกก
น่าจะผิดตั้งแต่ตอนรับส่งค่า $ch,$branch และ $cment แล้ว ลองใช้คำสั่ง print_r ว่า ค่าทั้ง 3 สอดคล้องกันหรือไม่ครับเช่น $ch[0],$branch[0] และ $cment[0] ถูกต้องหรือเปล่า
ส่วนอื่นๆ ก็น่าจะถูกต้องดี จะมีก็แต่ค่าเหล่านี้ถูกต้องหรือไม่