|
|
|
เพิ่มข้อมูลให้วน loop ข้อความที่ต้องการลงตาราง พร้อมกับข้อมูลไฟล์ csv |
|
|
|
|
|
|
|
ขอบคุณล่วงหน้าครับ พยายามทำนานอยู่ ในอยากจะเพิ่มข้อมูลที่คอลัมน์ของ .csv ไม่มีมา ด้วยการเพิ่มข้อความที่ต้องการลงตารางเข้าไปครับ
แต่คงต้องใช้ array แต่จะเพิ่มตรงบรรทัดไหนครับ
ตาราง testprn.sql
CREATE TABLE IF NOT EXISTS `testprn` (
`ID` int(10) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL,
`YEAR` varchar(50) NOT NULL,
`LOCATION` varchar(50) NOT NULL,
`SN` varchar(50) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=tis620 AUTO_INCREMENT=1 ;
ไฟล์ printer.scv
"PRN-NAME";"YEAR";"LOCATOIN";"PRN-ID";"SN"
"HP EC7750i";"2017";;"6Y08WRE0";
"CANON XiPo";"2017";;"R6YXT62";
"RICHO MP210i";"2017";;"X0NF098";
ไฟล์ printer.php (PHP)
<?php
$server = "localhost";
$user = "root";
$pass = "";
$db = "dbprn";
$con = mysql_connect($server, $user, $pass) ;
mysql_query("SET NAMES tis620", $con);
mysql_query("USE $db");
if (($hd= fopen("printer.csv", "r")) !== FALSE) { // อ่านไฟล์ printer.csv
while (($data = fgetcsv($hd, 1000, ";")) !== FALSE) { // วน loop อ่านทีละบรรทัด
$row++;
if($row > 1){
$name = $data[0]; // คอลัมน์ PRN-NAME
$year = $data[1]; // คอลัมน์ YEAR-MONTH
// คอลัมน์ LOCATION $data[2] จากไฟล์ printer.csv เป็นข้อมูลที่ว่างเปล่า และไม่มีค่าส่งมา ($location)
// ต้องการให้ข้อความ F1, F2, F3 ลงไปแทนทีละบรรทัด ทั้ง 3 บรรทัด ในคอลัมน์ฟิลด์ LOCATION ในตาราง testprn
$sn = $data[3]; // คอลัมน์ SN
echo $name."-".$year."-".$sn."<br />\n";
// เอาข้อมูลลงตาราง testprn ทีละบรรทัด
$SQL = mysql_query("INSERT INTO testprn (ID, NAME, YEAR, LOCATION, SN) VALUES (NULL,'".$name."','".$year."','".$location."','".$sn."')");
}
}
fclose($hd);
}
?>
---------------------------
ขอขอบคุณมากครับ
Tag : PHP
|
|
|
|
|
|
Date :
2017-07-20 12:12:18 |
By :
pukmtec |
View :
2427 |
Reply :
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เอาตัว แปร $location
มาใส่ค่าที่ต้องการ ก่อนคำสั่ง SQL
มันก็จะได้ค่าที่คุณต้องการยัดลงไปในฐานข้อมูล แล้วไม่ใช่ รึครับ
|
|
|
|
|
Date :
2017-07-20 13:06:52 |
By :
9nonameman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code
if (($hd= fopen("printer.csv", "r")) !== FALSE) { // อ่านไฟล์ printer.csv
$location = array("F1", "F2", "F3");
$i = 0;
foreach ($location as $loc) {
while (($data = fgetcsv($hd, 1000, ";")) !== FALSE) { // วน loop อ่านทีละบรรทัด
$row++;
if($row > 1){
$name = $data[0]; // คอลัมน์ PRN-NAME
$year = $data[1]; // คอลัมน์ YEAR-MONTH
// คอลัมน์ LOCATION $data[2] จากไฟล์ printer.csv เป็นข้อมูลที่ว่างเปล่า และไม่มีค่าส่งมา ($location)
// ต้องการให้ข้อความ F1, F2, F3 ลงไปแทนทีละบรรทัด ทั้ง 3 บรรทัด ในคอลัมน์ฟิลด์ LOCATION ในตาราง testprn
$sn = $data[3]; // คอลัมน์ SN
echo $name."-".$year."-".$sn."<br />\n";
// เอาข้อมูลลงตาราง ทีละบรรทัด
$SQL = mysql_query("INSERT INTO testprn (ID, NAME, YEAR, LOCATION, SN) VALUES (NULL,'".$name."','".$year."','".$loc."','".$sn."')");
$i++;
}
}
}
fclose($hd);
}
---------------
มันได้ข้อมูลในตารางแบบนี้แหละครับ
อันที่จริงต้อง F1 F2 F3 เรียงลงไปที 3 บรรทัด
หากไม่เป็นการรบกวน ช่วยแก้ array ต้องอยู่บรรทัดไหน หรือผมใช้คำสั่ง loop ผิด
|
ประวัติการแก้ไข 2017-07-20 13:38:41
|
|
|
|
Date :
2017-07-20 13:36:09 |
By :
pukmtec |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยังไม่ค่อยเข้าใจในความต้องการ เท่าไหร่ นะครับ ทำไมต้องไปกำหนดค่า
$location เป็น array แล้ว ไป foreach อีกรอบ
ทำไมไม่กำหนดเป็น
$location = "F1 F2 F3"; แล้วเอาไปจับยัดใส่ ฐานข้อมูล ทีเดียว
|
|
|
|
|
Date :
2017-07-20 14:37:45 |
By :
9nonameman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
บ้านๆ ผมยังงง ว่าเหตุให้ใส่ทำไม ถ้าข้อมูลมากกว่า 3 หล่ะ
Code (PHP)
if (($hd= fopen("printer.csv", "r")) !== FALSE) { // อ่านไฟล์ printer.csv
$location = array("F", "F", "F");
$i = 0;
foreach ($location as $loc) {
while (($data = fgetcsv($hd, 1000, ";")) !== FALSE) { // วน loop อ่านทีละบรรทัด
$row++;
if($row > 1){
$name = $data[0]; // คอลัมน์ PRN-NAME
$year = $data[1]; // คอลัมน์ YEAR-MONTH
// คอลัมน์ LOCATION $data[2] จากไฟล์ printer.csv เป็นข้อมูลที่ว่างเปล่า และไม่มีค่าส่งมา ($location)
// ต้องการให้ข้อความ F1, F2, F3 ลงไปแทนทีละบรรทัด ทั้ง 3 บรรทัด ในคอลัมน์ฟิลด์ LOCATION ในตาราง testprn
$sn = $data[3]; // คอลัมน์ SN
echo $name."-".$year."-".$sn."<br />\n";
// เอาข้อมูลลงตาราง ทีละบรรทัด
$SQL = mysql_query("INSERT INTO testprn (ID, NAME, YEAR, LOCATION, SN) VALUES (NULL,'".$name."','".$year."','".$loc.$i."','".$sn."')");
$i++;
}
}
}
fclose($hd);
}
|
|
|
|
|
Date :
2017-07-20 15:48:46 |
By :
Pong Thep |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก่อนอื่น ต้องขอโทษด้วย ที่ผมอาจจะทำให้พี่ ๆ สับสน
ข้อมูลจากไฟล์ .csv ถูกส่งค่ามาจาก Print Server โดยที่ไม่ได้มีการระบุตำแหน่งที่วางเครื่องพิมพ์แต่ละชั้นไว้
มีแต่หัวคอลัมน์ (LOCATION) แต่ไม่มีรายละเอียดข้อมูลในไฟล์ .csv ว่ายี่ห้อเครื่องพิมพ์นั้นตั้งอยู่ชั้นไหน
ผมเอาไฟล์ .csv เอามาลงตาราง แล้วเขียนขึ้นบนรายงานบนเว็บเพื่อให้ทราบว่าแต่ละเครื่องของชั้นนั้น ๆ มีการใช้จำนวนกระดาษไปกี่แผ่น อะไรประมาณนี้
ส่วนตัวอย่างไฟล์ที่ส่งไปให้ดูนี้นั้น ผมจำลองมาให้ดูเพื่อให้เข้าใจระบบการทำงานให้ง่ายขึ้น อันที่จริงข้อมูลในไฟล์ .csv มีทั้งหมดเกือบ 20 คอลัมน์ มีจำนวนเครื่องพิมพ์ 7 เครื่อง วางไว้แต่ละชั้น บางชั้นก็มี 2 ตัวบ้าง (ผมเอาลงตารางได้หมดแล้ว) แต่ขาดตรง LOCATION ว่าจะกำหนดให้ลงไปในช่องว่างในตารางได้อย่างไร (ชื่อแต่ละชั้น ผมจะกำหนดใน array ที่พี่ ๆ เห็นนั่นแหละครับ อันนั้นผมแค่ยกตัวอย่างให้ครับ)
เช่น $location = array("Floor 2 Sale", "Floor 1 Budget", "Floor 3 Market");
ยี่ห้อ BRAND MODEL ipAddress MacAddress.....PaperA4...Location.......
คอลัมน์อื่น ๆ มีข้อมูลครบ แต่คอลัมน์ Location ไม่มีข้อมูล เนื่องจาก บ ผู้ติดตั้งระบบ printer ไม่ใส่ข้อมูลแต่ละชั้นให้นะครับ ผมจึงต้องมาใส่เอง
ระบบเครือง Print Server จะส่งค่าการใช้งานเป็นไฟล์ .csv มาทางเมลของผมทุก ๆ วันที่ 1 ของแตละเดือน แต่ผมก็เอาไฟล์ .csv นี้มาทำเป็นรายงานแสดงบนเว็บภายในสำนักงาน (เอาข้อมูลแต่ละเดือนลงตาราง เพื่อดูย้อนหลังได้ครับ)
หากผมทำให้พี่ๆ สับสน หรือต่อว่าผมยินดีครับ ขอโทษด้วยครับ
อันนี้ที่ผมต้องการครับ ผมเอาข้อมูลยัดใส่ตารางเองด้วยมือ phpMyadmin (เพื่อให้เห็นที่ผมต้องการครับ)
ขอบคุณมากครับ
|
ประวัติการแก้ไข 2017-07-20 16:59:13 2017-07-20 17:02:18
|
|
|
|
Date :
2017-07-20 16:55:37 |
By :
pukmtec |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แล้วค่าที่ได้จากไฟล์ csv แถวที่ 1 2 3
มันเรียงลำดับ ตรงกับค่า ที่อยู่ในตัวแปร $location ไหมครับ
ถ้าตรง ก็เอาค่า $i ที่ได้ในแต่ละรอบที่ while อ่านค่าจาก ไฟล์ csv ไปทำเป็นค่า index array ของ $location ดูครับ
Code (PHP)
if (($hd= fopen("printer.csv", "r")) !== FALSE) { // อ่านไฟล์ printer.csv
$location = array("Floor 2 Sale", "Floor 1 Budget", "Floor 3 Market");
$i = 0;
while (($data = fgetcsv($hd, 1000, ";")) !== FALSE) { // วน loop อ่านทีละบรรทัด
$row++;
if($row > 1){
$name = $data[0]; // คอลัมน์ PRN-NAME
$year = $data[1]; // คอลัมน์ YEAR-MONTH
// คอลัมน์ LOCATION $data[2] จากไฟล์ printer.csv เป็นข้อมูลที่ว่างเปล่า และไม่มีค่าส่งมา ($location)
// ต้องการให้ข้อความ F1, F2, F3 ลงไปแทนทีละบรรทัด ทั้ง 3 บรรทัด ในคอลัมน์ฟิลด์ LOCATION ในตาราง testprn
$sn = $data[3]; // คอลัมน์ SN
echo $name."-".$year."-".$sn."<br />\n";
// เอาข้อมูลลงตาราง ทีละบรรทัด
$SQL = mysql_query("INSERT INTO testprn (ID, NAME, YEAR, LOCATION, SN) VALUES (NULL,'".$name."','".$year."','".$location[$i]."','".$sn."')");
$i++;
}
}
fclose($hd);
}
|
|
|
|
|
Date :
2017-07-20 21:20:19 |
By :
9nonameman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แล้วค่าที่ได้จากไฟล์ csv แถวที่ 1 2 3
มันเรียงลำดับ ตรงกับค่า ที่อยู่ในตัวแปร $location ไหมครับ
ถ้าตรง ก็เอาค่า $i ที่ได้ในแต่ละรอบที่ while อ่านค่าจาก ไฟล์ csv ไปทำเป็นค่า index array ของ $location ดูครับ
---- ตอบ ไฟล์ .csv จะส่งมาโดยอัติโนมัตจากระบบ Print Server เหมือนลำดับเดิม ๆ ทุกเดือนครับ ที่ผ่านมา ผมกรอกชื่อชั้นด้วยมือเพิ่มเข้าไปในไฟล์ .csv แทนช่องว่างไปเองครับ ----
ขอขอบคุณพี่ 9nonameman อย่างสูงครับ ตอนนี้รันตรงข้อมูลที่ต้องการแล้วครับ
เอา foreach ($location as $loc) ออกเท่านี้เองเหรอนิ อ้าว ผมโง่ตั้งนาน เสียเวลาตรงนี้นานมาก
ผมก็ทำตั้งนาน ว่างตำแหน่ง loop array ไม่ถูกที่ โปรแกรมรันแล้วข้อมูลไม่ลงตารางไม่ถูกซะทีครับ ขอบคุณมากครับ
|
ประวัติการแก้ไข 2017-07-21 09:42:29 2017-07-21 10:29:34
|
|
|
|
Date :
2017-07-21 09:39:49 |
By :
pukmtec |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|