สอบถามเรื่องการนำ Primary Key ไป เพิ่มเป็นForeign Key ในอีกตาราง
ที่ทำได้ตอนนี้คือ
1.อัพโหลด csv ลง table detail_layout
2.Group ข้อมูลที่เหมือนกันที่อัพโหลด CSV ไป insert table receive_production
ถ้าผมต้องการที่จะนำ id ของตาราง receive_production ไปเพิ่มเป็น FK ของในตาราง detail_layout เพื่อให้ทราบ record นี้เป็นข้อมูลของreceive_production
ต้องเขียนเงื่อนไขยังไงครับ
Code (PHP) หน้า insert
if (!empty($_POST['summit'])) {
//ทำการเปิดไฟล์ CSV เพื่อนำข้อมูลไปใส่ใน MySQL
$path = "upload/";
$target_file = $path . basename($_FILES["fileToUpload"]["name"]); //อ่านชื่อไฟล์
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); //หานามสกุลไฟล์ โดยแบ่งออกเป็น 3 อาเรย์ 1 dirname = path , basename =name+type file
$upload_insert = 1;
$date_data = $_POST['date_data'];
$date_time = date("Y-m-d H:i:s");
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $path . $_FILES["fileToUpload"]["name"])) {
$objCSV = fopen($path . $_FILES["fileToUpload"]["name"], "r");
$i = 0;
while (($objArr = fgetcsv($objCSV, 1000, ",")) !== FALSE) {
$i++;
if ($i > 1) {
//$objArr[0] = ประเภทไม้
//$objArr[1] = คลังจัดเก็บ
//$objArr[2] = ล็อค
//$objArr[3] = แถว
//$objArr[4] = ชั้น
//$objArr[5] = เกรด
//$objArr[6] = ว/ด/ป ที่ผลิต
//$objArr[7] = จำนวน
//$objArr[10] = สต็อกจัดเก็บ
//$objArr[11] = รหัสสินค้า
//$objArr[12] = ประเภทการรับ
//$objArr[13] = วันที่รายงานความเคลื่อนไหว
//$objArr[14] = ประเภทการปิดผิว
//$objArr[15] = การจองไม้
$check_stock = getlist("SELECT stock_id FROM type_stock WHERE stock_name='" . $objArr[10] . "'"); //เช็คสต้อคจัดเก็บ
$check_wh = getlist("SELECT id_w FROM type_warehouse WHERE detail_warehouse='" . $objArr[1] . "'"); // เช็คคลังจัดเก็บ
$check_type = getlist("SELECT type_data_id FROM type_data WHERE type_data_name='" . $objArr[12] . "' AND type_data_referance='receive'"); // เช็คประเภทการรับ
$check_pro = getlist("SELECT product_code FROM type_product WHERE product_name='" . $objArr[0] . "'"); // เช็คประเภทไม้
$check_mfstock = getlist("SELECT fl_stock_id FROM type_fl_stock WHERE fl_stock_name='" . $objArr[14] . "'"); // เช็คประเภทไม้
//$inid_product = getlist("SELECT rp.production_id as production_id FROM detail_layout_test as dl INNER JOIN receive_production as rp ON dl.date_in = rp.date_in GROUP BY rp.item_number , rp.stock_id,rp.type_data_id");
for ($q = 0; $q < sizeof($check_stock); $q++) {
query("INSERT INTO detail_layout_test SET item_number='" . $objArr[11] . "',warehouse_true='" . $check_wh[$q]['id_w'] . "',lock_number='" . $objArr[2] . "',
row_number='" . $objArr[3] . "', layer_number='" . $objArr[4] . "', grade='" . $objArr[5] . "', date_manufacture='" . $objArr[6] . "',
quantity='" . $objArr[7] . "', stock_id='" . $check_stock[$q]['stock_id'] . "', referance='receive',date_in='" . $objArr[13] . "',note_layout='" . $objArr[9] . "', date_and_time='$date_time',
user_save='" . $_SESSION["name"] . "',type_data_id='" . $check_type[$q]['type_data_id'] . "', type_item='" . $check_pro[$q]['product_code'] . "', mf_stock='" . $check_mfstock[$q]['fl_stock_id'] . "'");
}
}
}
$sum_data = getlist("SELECT SUM(quantity) as qty, item_number, warehouse_true,type_data_id,stock_id,grade,type_item,mf_stock,date_in FROM detail_layout_test GROUP BY item_number,stock_id,type_data_id,date_manufacture,date_in");
for ($q = 0; $q < sizeof($sum_data); $q++) {
query(" INSERT INTO receive_production SET type_data_id='" . $sum_data[$q]['type_data_id'] . "',stock_id='" . $sum_data[$q]['stock_id'] . "',warehouse_true='" . $sum_data[$q]['warehouse_true'] . "',
type_item='" . $sum_data[$q]['type_item'] . "', grade='" . $sum_data[$q]['grade'] . "', quantity='" . $sum_data[$q]['qty'] . "', item_number='" . $sum_data[$q]['item_number'] . "', referance='receive',
date_in='" . $sum_data[$q]['date_in'] . "',crate_date_time='$date_time',user_refer='" . $_SESSION['name'] . "',lm_id='" . $sum_data[$q]['mf_stock'] . "'");
}
$message = "ลงข้อมูลเรียบร้อยแล้ว";
fclose($objCSV);
//print("<meta http-equiv='refresh' content='0; url= index.php?path=upload_data_pr '>");
}
print "<script type='text/javascript'>alert('$message');</script>";
}
Tag : PHP, MySQL, Apache, Appserv, XAMPP
ประวัติการแก้ไข 2022-05-09 13:31:30
Date :
2022-05-09 12:48:49
By :
benlovehi5
View :
880
Reply :
12
ถ้าสร้าง column ไว้รอแล้วก็เข้าลูป insert ธรรมดา ตามวิธีการนี้
Code (SQL)
-- table_b right of picture
-- table_a left of picture
-- type column of table_a
-- :btype = placeholder of prepare statement (or loop item), type column of table_b
INSERT INTO table_b (field)
VALUES (
(SELECT id FROM table_a WHERE type = :btype)
)
แต่ถ้ายัง ก็เพิ่มคอลัมน์ก่อนค่อย insert
Code (SQL)
ALTER TABLE table_b
ADD COLUMN column_name VARCHAR(15) AFTER column;
-- Then ADD INDEX, CONSTRAINT, FOREIGN KEY, etc.
Date :
2022-05-09 13:57:39
By :
009
อีกกรณี ถ้าแยกทำ (insert ไปก่อนแล้ว)
แทนที่จะ insert ก็เปลี่ยนเป็น update แทน
แต่ต้องสร้างคอลัมน์ไว้ตั้งแต่แรก
ส่วนเงื่อนไขการ update เหมือนกับ insert ใน rep แรก
Date :
2022-05-09 18:50:20
By :
009
ตอบความคิดเห็นที่ : 2 เขียนโดย : 009 เมื่อวันที่ 2022-05-09 18:50:20
รายละเอียดของการตอบ ::
ตอนนี้เพิ่ม ID Production ได้แล้วครับ ขอบคุณครับ
ถ้าผมต้องการเช็คข้อมูลซ้ำก่อน insert ลง DB ต้องใส่เงื่อนไขตรงไหนครับ
CODEINSERT (PHP)
if (!empty($_POST['summit'])) {
//ทำการเปิดไฟล์ CSV เพื่อนำข้อมูลไปใส่ใน MySQL
$path = "upload/";
$target_file = $path . basename($_FILES["fileToUpload"]["name"]); //อ่านชื่อไฟล์
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); //หานามสกุลไฟล์ โดยแบ่งออกเป็น 3 อาเรย์ 1 dirname = path , basename =name+type file
$upload_insert = 1;
$date_data = $_POST['date_data'];
$date_time = date("Y-m-d H:i:s");
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $path . $_FILES["fileToUpload"]["name"])) {
$objCSV = fopen($path . $_FILES["fileToUpload"]["name"], "r");
$i = 0;
while (($objArr = fgetcsv($objCSV, 1000, ",")) !== FALSE) {
$i++;
if ($i > 1) {
//$objArr[0] = ประเภทไม้
//$objArr[1] = คลังจัดเก็บ
//$objArr[2] = ล็อค
//$objArr[3] = แถว
//$objArr[4] = ชั้น
//$objArr[5] = เกรด
//$objArr[6] = ว/ด/ป ที่ผลิต
//$objArr[7] = จำนวน
//$objArr[10] = สต็อกจัดเก็บ
//$objArr[11] = รหัสสินค้า
//$objArr[12] = ประเภทการรับ
//$objArr[13] = วันที่รายงานความเคลื่อนไหว
//$objArr[14] = ประเภทการปิดผิว LM
//$objArr[15] = การจองไม้
$check_stock = getlist("SELECT stock_id FROM type_stock WHERE stock_name='" . $objArr[10] . "'"); //เช็คสต้อคจัดเก็บ
$check_wh = getlist("SELECT id_w FROM type_warehouse WHERE detail_warehouse='" . $objArr[1] . "'"); // เช็คคลังจัดเก็บ
$check_type = getlist("SELECT type_data_id FROM type_data WHERE type_data_name='" . $objArr[12] . "' AND type_data_referance='receive'"); // เช็คประเภทการรับ
$check_pro = getlist("SELECT product_code FROM type_product WHERE product_name='" . $objArr[0] . "'"); // เช็คประเภทไม้
$check_mfstock = getlist("SELECT fl_stock_id FROM type_fl_stock WHERE fl_stock_name='" . $objArr[14] . "'"); // เช็คประเภทไม้
$check_data = getlist("SELECT * FROM detail_layout_test as dl INNER JOIN receive_production as rp ON dl.date_in = rp.date_in WHERE rp.date_in='2021-05-07' GROUP BY rp.item_number , rp.stock_id,rp.type_data_id");
for ($q = 0; $q < sizeof($check_stock); $q++) {
$check_proid = getlist("SELECT production_id FROM receive_production WHERE item_number='" . $objArr[11] . "'AND stock_id='" . $check_stock[$q]['stock_id'] . "' AND type_data_id='" . $check_type[$q]['type_data_id'] . "' AND warehouse_true='" . $check_wh[$q]['id_w'] . "'");
query("INSERT INTO detail_layout_test SET item_number='" . $objArr[11] . "',warehouse_true='" . $check_wh[$q]['id_w'] . "',lock_number='" . $objArr[2] . "',
row_number='" . $objArr[3] . "', layer_number='" . $objArr[4] . "', grade='" . $objArr[5] . "', date_manufacture='" . $objArr[6] . "',
quantity='" . $objArr[7] . "', stock_id='" . $check_stock[$q]['stock_id'] . "', referance='receive',date_in='" . $objArr[13] . "',note_layout='" . $objArr[9] . "', date_and_time='$date_time',
user_save='" . $_SESSION["name"] . "',type_data_id='" . $check_type[$q]['type_data_id'] . "', type_item='" . $check_pro[$q]['product_code'] . "', mf_stock='" . $check_mfstock[$q]['fl_stock_id'] . "',production_id='" . $check_proid[$q]['production_id'] . "'");
}
}
}
$message = "ลงข้อมูลเรียบร้อยแล้ว";
fclose($objCSV);
//}//else
//print("<meta http-equiv='refresh' content='0; url= index.php?path=upload_data_pr '>");
}
print "<script type='text/javascript'>alert('$message');</script>";
} //END IF EMPTY
ประวัติการแก้ไข 2022-05-10 14:40:47
Date :
2022-05-10 14:29:15
By :
benlovehi5
Code (PHP)
if (!empty($_POST['summit'])) {
//ทำการเปิดไฟล์ CSV เพื่อนำข้อมูลไปใส่ใน MySQL
$path = "upload/";
$target_file = $path . basename($_FILES["fileToUpload"]["name"]); //อ่านชื่อไฟล์
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); //หานามสกุลไฟล์ โดยแบ่งออกเป็น 3 อาเรย์ 1 dirname = path , basename =name+type file
$filename=basename($_FILES["fileToUpload"]["name"]);
$upload_insert = 1;
$date_data = $_POST['date_data'];
$date_time = date("Y-m-d H:i:s");
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $path . $_FILES["fileToUpload"]["name"])) {
$objCSV = fopen($path . $_FILES["fileToUpload"]["name"], "r");
$i = 0;
while (($objArr = fgetcsv($objCSV, 1000, ",")) !== FALSE) {
$i++;
if ($i > 1) {
//$objArr[1] = คลังจัดเก็บ
//$objArr[2] = ล็อค
//$objArr[3] = แถว
//$objArr[4] = ชั้น
//$objArr[5] = เกรด
//$objArr[6] = ว/ด/ป ที่ผลิต
//$objArr[7] = จำนวน
//$objArr[10] = สต็อกจัดเก็บ
//$objArr[11] = รหัสสินค้า
//$objArr[12] = ประเภทการรับ
//$objArr[13] = วันที่รายงานความเคลื่อนไหว
//$objArr[14] = ประเภทการปิดผิว LM
//$objArr[15] = การจองไม้
$check_stock = getlist("SELECT stock_id FROM type_stock WHERE stock_name='" . $objArr[10] . "'"); //เช็คสต้อคจัดเก็บ
$check_wh = getlist("SELECT id_w FROM type_warehouse WHERE detail_warehouse='" . $objArr[1] . "'"); // เช็คคลังจัดเก็บ
$check_type = getlist("SELECT type_data_id FROM type_data WHERE type_data_name='" . $objArr[12] . "' AND type_data_referance='receive'"); // เช็คประเภทการรับ
$check_pro = getlist("SELECT product_code FROM type_product WHERE product_name='" . $objArr[0] . "'"); // เช็คประเภทไม้
$check_mfstock = getlist("SELECT fl_stock_id FROM type_fl_stock WHERE fl_stock_name='" . $objArr[14] . "'"); // เช็คประเภทไม้
for ($q = 0; $q < sizeof($objArr[14]); $q++) {
$check_proid = getlist("SELECT production_id FROM receive_production WHERE item_number='" . $objArr[11] . "'AND stock_id='" . $check_stock[$q]['stock_id'] . "' AND type_data_id='" . $check_type[$q]['type_data_id'] . "' AND date_in='" . $objArr[13] . "' AND data_new='1'");
$insert = query("INSERT INTO detail_layout_test2 SET item_number='" . $objArr[11] . "',warehouse_true='" . $check_wh[$q]['id_w'] . "',lock_number='" . $objArr[2] . "',
row_number='" . $objArr[3] . "', layer_number='" . $objArr[4] . "', grade='" . $objArr[5] . "', date_manufacture='" . $objArr[6] . "',
quantity='" . $objArr[7] . "', stock_id='" . $check_stock[$q]['stock_id'] . "', referance='receive',date_in='" . $objArr[13] . "',note_layout='" . $objArr[9] . "', date_and_time='$date_time',
user_save='" . $_SESSION["name"] . "',type_data_id='" . $check_type[$q]['type_data_id'] . "',production_id='" . $check_proid[$q]['production_id'] . "', type_item='" . $check_pro[$q]['product_code'] . "',data_new='1'");
}// end for loop
}//if
} //while
$sum_data = getlist("SELECT SUM(quantity) as qty, item_number, warehouse_true,type_data_id,stock_id,grade,type_item,date_in FROM detail_layout_test2 WHERE data_new='1' GROUP BY item_number,stock_id,type_data_id,date_manufacture,date_in");
//print("SELECT SUM(quantity) as qty, item_number, warehouse_true,type_data_id,stock_id,grade,type_item,date_in FROM detail_layout_test2 WHERE data_new='1' GROUP BY item_number,stock_id,type_data_id,date_manufacture,date_in");
for ($q = 0; $q < sizeof($sum_data); $q++) {
query(" INSERT INTO receive_production SET type_data_id='" . $sum_data[$q]['type_data_id'] . "',stock_id='" . $sum_data[$q]['stock_id'] . "',warehouse_true='" . $sum_data[$q]['warehouse_true'] . "',
type_item='" . $sum_data[$q]['type_item'] . "', grade='" . $sum_data[$q]['grade'] . "', quantity='" . $sum_data[$q]['qty'] . "', item_number='" . $sum_data[$q]['item_number'] . "', referance='receive',
date_in='" . $sum_data[$q]['date_in'] . "',crate_date_time='$date_time',user_refer='" . $_SESSION['name'] . "',lm_id='" . $sum_data[$q]['mf_stock'] . "',data_new='1'");
}
$message = "ลงข้อมูลเรียบร้อยแล้ว";
fclose($objCSV);
}//if move upload
print "<script type='text/javascript'>alert('$message');</script>";
}//if empty summit
จาก code ด้านบนติดปัญหาตรง SELECT production_id FROM receive_production ครับ
-ถ้าเป็นข้อมูลที่มีอยู่ในตาราง receive_production อยู่แล้ว สามารถเพิ่ม production_id ในตาราง detail_layout ได้ครับ
-แต่ถ้าเป็นข้อมูลที่ยังไม่มีใน receive_production แล้ว insert เข้าตาราง receive_production ในตาราง detail_layout จะไม่เพิ่ม production_id ให้ครับ
Date :
2022-05-23 11:20:22
By :
benlovehi5
if else ก็รู้จัก ทำไมไม่ใช่ใช้ให้เกิดประโยชน์ครับ
ก่อนที่จะ INSERT INTO detail_layout_test2
เช็ค $check_proid ก่อนไหมว่า หาเจอหรือเปล่า ไม่เจอ ก้ insert เข้าไปก่อน แล้ว หาค่า insert_id ของ receive_product มาใช้
ก็รู้ทั้งรู้ ว่ามันหาไม่เจอ ก็ยัง insert โดยไม่เขียนเช็คอีก ปัญหาก็รู้อยู่แท้ๆ
Date :
2022-05-23 16:05:20
By :
Chaidhanan
ตอบความคิดเห็นที่ : 8 เขียนโดย : Chaidhanan เมื่อวันที่ 2022-05-23 16:05:20
รายละเอียดของการตอบ ::
ตอนนี้ดึงค่า insert_id ออกมาได้แล้วครับ แต่ยังงๆกับการนำ insert_id ที่ดึงมาไปใช้ พอจะเขียนรูปแบบคร่าวหน่อยได้ไหมครับ
Code (PHP)
if (!empty($_POST['summit'])) {
//ทำการเปิดไฟล์ CSV เพื่อนำข้อมูลไปใส่ใน MySQL
$path = "upload/";
$target_file = $path . basename($_FILES["fileToUpload"]["name"]); //อ่านชื่อไฟล์
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); //หานามสกุลไฟล์ โดยแบ่งออกเป็น 3 อาเรย์ 1 dirname = path , basename =name+type file
$filename=basename($_FILES["fileToUpload"]["name"]);
$upload_insert = 1;
$date_data = $_POST['date_data'];
$date_time = date("Y-m-d H:i:s");
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $path . $_FILES["fileToUpload"]["name"])) {
query("INSERT INTO upload_layout SET upload_name='$filename', upload_date='$date_time',user_upload='" . $_SESSION['name'] . "'");
$get_FK = getlist("SELECT MAX(upload_id) AS upload_id FROM upload_layout");
$fk_upload = $get_FK[0]['upload_id'];
$objCSV = fopen($path . $_FILES["fileToUpload"]["name"], "r");
$i = 0;
while (($objArr = fgetcsv($objCSV, 1000, ",")) !== FALSE) {
$i++;
if ($i > 1) {
$data1 = strpos($objArr[13],"/");
if($data1 !== FALSE)
{
//$objArr[1] = คลังจัดเก็บ
//$objArr[2] = ล็อค
//$objArr[3] = แถว
//$objArr[4] = ชั้น
//$objArr[5] = เกรด
//$objArr[6] = ว/ด/ป ที่ผลิต
//$objArr[7] = จำนวน
//$objArr[10] = สต็อกจัดเก็บ
//$objArr[11] = รหัสสินค้า
//$objArr[12] = ประเภทการรับ
//$objArr[13] = วันที่รายงานความเคลื่อนไหว
//$objArr[14] = ประเภทการปิดผิว LM
//$objArr[15] = การจองไม้
$check_stock = getlist("SELECT stock_id FROM type_stock WHERE stock_name='" . $objArr[10] . "'"); //เช็คสต้อคจัดเก็บ
$check_wh = getlist("SELECT id_w FROM type_warehouse WHERE detail_warehouse='" . $objArr[1] . "'"); // เช็คคลังจัดเก็บ
$check_type = getlist("SELECT type_data_id FROM type_data WHERE type_data_name='" . $objArr[12] . "' AND type_data_referance='receive'"); // เช็คประเภทการรับ
$check_pro = getlist("SELECT product_code FROM type_product WHERE product_name='" . $objArr[0] . "'"); // เช็คประเภทไม้
$check_mfstock = getlist("SELECT fl_stock_id as lm_id FROM type_fl_stock WHERE fl_stock_name='" . $objArr[14] . "'"); // เช็คประเภทสต็อค
for ($q = 0; $q < sizeof($objArr[11]); $q++) {
$check_proid = getlist("SELECT production_id FROM receive_production WHERE item_number='" . $objArr[11] . "'AND stock_id='" . $check_stock[$q]['stock_id'] . "' AND type_data_id='" . $check_type[$q]['type_data_id'] . "' AND date_in='" . $objArr[13] . "' AND data_new='1'");
if(empty($check_proid[$q]['production_id'])){
query("INSERT INTO detail_layout_test2 SET item_number='" . $objArr[11] . "',warehouse_true='" . $check_wh[$q]['id_w'] . "',lock_number='" . $objArr[2] . "',
row_number='" . $objArr[3] . "', layer_number='" . $objArr[4] . "', grade='" . $objArr[5] . "', date_manufacture='" . $objArr[6] . "',
quantity='" . $objArr[7] . "', stock_id='" . $check_stock[$q]['stock_id'] . "', referance='receive',date_in='" . $objArr[13] . "',note_layout='" . $objArr[9] . "', date_and_time='$date_time',
user_save='" . $_SESSION["name"] . "',type_data_id='" . $check_type[$q]['type_data_id'] . "',type_item='" . $check_pro[$q]['product_code'] . "',data_new='1'
,upload_id='$fk_upload',mf_stock='" . $check_mfstock[$q]['lm_id'] . "'");
}else{
query("UPDATE detail_layout_test2 SET production_id='.$check_proid[$q]['production_id'].' WHERE item_number='" . $objArr[11] . "'AND stock_id='" . $check_stock[$q]['stock_id'] . "' AND type_data_id='" . $check_type[$q]['type_data_id'] . "' AND date_in='" . $objArr[13] . "' AND data_new='1'");
}
}// end for loop
$message = "ลงข้อมูลเรียบร้อยแล้ว";
}else{
$message = "รูปแบบของวันที่ไม่ถูกต้อง กรุณาทำให้อยู่ในรูปแบบ 2017-12-01 (ปี-เดือน-วัน)";
}//if เช็ครูปแบบวันที่
}//if
} //while
$sum_data = getlist("SELECT SUM(quantity) as qty, item_number, warehouse_true,type_data_id,stock_id,grade,type_item,date_in,mf_stock FROM detail_layout_test2 WHERE upload_id='$fk_upload' AND data_new='1' GROUP BY item_number,stock_id,type_data_id,date_manufacture,date_in");
$id = mysqli_insert_id($link); // คืนค่า id insert receive_production
}
fclose($objCSV);
}//if move upload
print "<script type='text/javascript'>alert('$message');</script>";
}//if empty summit
ประวัติการแก้ไข 2022-05-24 16:05:16 2022-05-24 23:13:39
Date :
2022-05-24 16:04:31
By :
benlovehi5
ตัวแปรไหน ของ insert_id ที่หาได้แล้ว
ไม่เห็นชุดคำสั่ง insert production เข้าไปยัง receive_production เลย
แล้วจะเอา insert_id ของ receive_production มาจากไหน
Date :
2022-05-24 16:33:22
By :
Chaidhanan
ตอบความคิดเห็นที่ : 10 เขียนโดย : Chaidhanan เมื่อวันที่ 2022-05-24 16:33:22
รายละเอียดของการตอบ ::
วาง code ไม่ครบครับ $id_receive ครับตัวแปรที่ดึง idที่ insertใน ตาราง receive_production
Code (PHP)
ตอบความคิดเห็นที่ : 8 เขียนโดย : Chaidhanan เมื่อวันที่ 2022-05-23 16:05:20
รายละเอียดของการตอบ ::
ตอนนี้ดึงค่า insert_id ออกมาได้แล้วครับ แต่ยังงๆกับการนำ insert_id ที่ดึงมาไปใช้ พอจะเขียนรูปแบบคร่าวหน่อยได้ไหมครับ
Code (PHP)
[php]if (!empty($_POST['summit'])) {
//ทำการเปิดไฟล์ CSV เพื่อนำข้อมูลไปใส่ใน MySQL
$path = "upload/";
$target_file = $path . basename($_FILES["fileToUpload"]["name"]); //อ่านชื่อไฟล์
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); //หานามสกุลไฟล์ โดยแบ่งออกเป็น 3 อาเรย์ 1 dirname = path , basename =name+type file
$filename=basename($_FILES["fileToUpload"]["name"]);
$upload_insert = 1;
$date_data = $_POST['date_data'];
$date_time = date("Y-m-d H:i:s");
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $path . $_FILES["fileToUpload"]["name"])) {
query("INSERT INTO upload_layout SET upload_name='$filename', upload_date='$date_time',user_upload='" . $_SESSION['name'] . "'");
$get_FK = getlist("SELECT MAX(upload_id) AS upload_id FROM upload_layout");
$fk_upload = $get_FK[0]['upload_id'];
$objCSV = fopen($path . $_FILES["fileToUpload"]["name"], "r");
$i = 0;
while (($objArr = fgetcsv($objCSV, 1000, ",")) !== FALSE) {
$i++;
if ($i > 1) {
$data1 = strpos($objArr[13],"/");
if($data1 !== FALSE)
{
//$objArr[1] = คลังจัดเก็บ
//$objArr[2] = ล็อค
//$objArr[3] = แถว
//$objArr[4] = ชั้น
//$objArr[5] = เกรด
//$objArr[6] = ว/ด/ป ที่ผลิต
//$objArr[7] = จำนวน
//$objArr[10] = สต็อกจัดเก็บ
//$objArr[11] = รหัสสินค้า
//$objArr[12] = ประเภทการรับ
//$objArr[13] = วันที่รายงานความเคลื่อนไหว
//$objArr[14] = ประเภทการปิดผิว LM
//$objArr[15] = การจองไม้
$check_stock = getlist("SELECT stock_id FROM type_stock WHERE stock_name='" . $objArr[10] . "'"); //เช็คสต้อคจัดเก็บ
$check_wh = getlist("SELECT id_w FROM type_warehouse WHERE detail_warehouse='" . $objArr[1] . "'"); // เช็คคลังจัดเก็บ
$check_type = getlist("SELECT type_data_id FROM type_data WHERE type_data_name='" . $objArr[12] . "' AND type_data_referance='receive'"); // เช็คประเภทการรับ
$check_pro = getlist("SELECT product_code FROM type_product WHERE product_name='" . $objArr[0] . "'"); // เช็คประเภทไม้
$check_mfstock = getlist("SELECT fl_stock_id as lm_id FROM type_fl_stock WHERE fl_stock_name='" . $objArr[14] . "'"); // เช็คประเภทสต็อค
for ($q = 0; $q < sizeof($objArr[11]); $q++) {
$check_proid = getlist("SELECT production_id FROM receive_production WHERE item_number='" . $objArr[11] . "'AND stock_id='" . $check_stock[$q]['stock_id'] . "' AND type_data_id='" . $check_type[$q]['type_data_id'] . "' AND date_in='" . $objArr[13] . "' AND data_new='1'");
if(empty($check_proid[$q]['production_id'])){
query("INSERT INTO detail_layout_test2 SET item_number='" . $objArr[11] . "',warehouse_true='" . $check_wh[$q]['id_w'] . "',lock_number='" . $objArr[2] . "',
row_number='" . $objArr[3] . "', layer_number='" . $objArr[4] . "', grade='" . $objArr[5] . "', date_manufacture='" . $objArr[6] . "',
quantity='" . $objArr[7] . "', stock_id='" . $check_stock[$q]['stock_id'] . "', referance='receive',date_in='" . $objArr[13] . "',note_layout='" . $objArr[9] . "', date_and_time='$date_time',
user_save='" . $_SESSION["name"] . "',type_data_id='" . $check_type[$q]['type_data_id'] . "',type_item='" . $check_pro[$q]['product_code'] . "',data_new='1'
,upload_id='$fk_upload',mf_stock='" . $check_mfstock[$q]['lm_id'] . "'");
}else{
query("UPDATE detail_layout_test2 SET production_id='.$check_proid[$q]['production_id'].' WHERE item_number='" . $objArr[11] . "'AND stock_id='" . $check_stock[$q]['stock_id'] . "' AND type_data_id='" . $check_type[$q]['type_data_id'] . "' AND date_in='" . $objArr[13] . "' AND data_new='1'");
}
}// end for loop
$message = "ลงข้อมูลเรียบร้อยแล้ว";
}else{
$message = "รูปแบบของวันที่ไม่ถูกต้อง กรุณาทำให้อยู่ในรูปแบบ 2017-12-01 (ปี-เดือน-วัน)";
}//if เช็ครูปแบบวันที่
}//if
} //while
$sum_data = getlist("SELECT SUM(quantity) as qty, item_number, warehouse_true,type_data_id,stock_id,grade,type_item,date_in,mf_stock FROM detail_layout_test2 WHERE upload_id='$fk_upload' AND data_new='1' GROUP BY item_number,stock_id,type_data_id,date_manufacture,date_in");
for ($q = 0; $q < sizeof($sum_data); $q++) {
query(" INSERT INTO receive_production SET type_data_id='" . $sum_data[$q]['type_data_id'] . "',stock_id='" . $sum_data[$q]['stock_id'] . "',warehouse_true='" . $sum_data[$q]['warehouse_true'] . "',
type_item='" . $sum_data[$q]['type_item'] . "', grade='" . $sum_data[$q]['grade'] . "', quantity='" . $sum_data[$q]['qty'] . "', item_number='" . $sum_data[$q]['item_number'] . "', referance='receive',
date_in='" . $sum_data[$q]['date_in'] . "',crate_date_time='$date_time',user_refer='" . $_SESSION['name'] . "',lm_id='" . $sum_data[$q]['mf_stock'] . "',data_new='1'");
$id_receive = mysqli_insert_id($link); // คืนค่า id insert receive_production
}
fclose($objCSV);
}//if move upload
print "<script type='text/javascript'>alert('$message');</script>";
}//if empty summit
Date :
2022-05-24 23:12:49
By :
benlovehi5
ตัวอย่าง อัลกอลิธึม แต่อย่าหลงดีใจได้โค๊ดล่ะ ผมแค่ทำเป็นตัวอย่าง
ตัวอย่างที่คุณไปเอามา มันสมัยไหนแล้วเนี่ย
ถ้าใช้จริง sql injection ต้องมาล่ะ ไม่รอดหรอกครับ มันต่อ string แบบนี้ ไม่ได้
Code (PHP)
<?php
for ($q = 0; $q < sizeof($objArr[11]); $q++) {
$check_proid = getlist("SELECT production_id
FROM receive_production
WHERE item_number='{$objArr[11]}'
AND stock_id='{$check_stock[$q][stock_id]}'
AND type_data_id='{$check_type[$q][type_data_id]}'
AND date_in='{$objArr[13]}'
AND data_new=1
");
if(empty($check_proid[$q]['production_id'])){
// ไม่พบ production_id
$insert_id = 'xx'; // xx คือ function ที่ทำการคิวรี่ เพิ่มรายการ ใน receive_production แล้ว คืนค่า insert_id มาให้
}else{
$insert_id = $check_proid[$q]['production_id'];
}
query("
UPDATE detail_layout_test2
SET production_id={$insert_id }
WHERE item_number='{$objArr[11]}'
AND stock_id='{$check_stock[$q]['stock_id']'}
AND type_data_id='{$check_type[$q]['type_data_id']}'
AND date_in='{$objArr[13]}' AND data_new=1
");
}
จาก ตรงนี้ for ($q = 0; $q < sizeof($objArr[11]); $q++) {
คำสั่ง sizeof( ใช้กับตัวแปรที่เป็น array )
แล้วคำสั่งนี้ มาได้ยังไง
WHERE item_number='".$objArr[11]." '
ต่อ string ด้วย array นี่นะ ทำความเข้าใจกับตัวแปร ให้มากกว่านี้ หน่อย อะไรใช้ได้อะไรใช้ไม่ได้ พื้นฐานไวยกรณ์สำคัญมากๆ
เลิกใช้ tools การคิวรี่ กลุ่มนี้ได้แล้ว นะเขียนเอง ง่ายๆ ไม่ยาก ตัวอย่างนี้ป้องกัน sql injection ได้ด้วย
Code (PHP)
$con = new mysqli('host', 'user', 'psw', 'database') or die ( mysqli_connection_error() );
$con->set_charset('utf8');
$stmt = $con->prepare('insert into table (field1, field2 ) values ( ? , ? )');
$stmt->bind_param( 'ss', $value1, $value2 );
$stmt->execute();
Date :
2022-05-25 05:12:07
By :
Chaidhanan
Load balance : Server 05