Php 如何根据文件名将多个csv插入不同的表中?
下面是我的代码片段,我想在其中根据csv文件的文件名将数据插入csv中 例如,我选择的文件是:icslab 1.csv、icslab 2.csv、icslab 3.csv、icslab 4.csv,每个csv都应该插入到各自的数据库表中,分别是room_icslab 1、room_icslab 2、room_icslab 3、room_icslab 4 在这段代码中,所有的csv文件都只插入db表室_icslab 1中Php 如何根据文件名将多个csv插入不同的表中?,php,mysql,csv,Php,Mysql,Csv,下面是我的代码片段,我想在其中根据csv文件的文件名将数据插入csv中 例如,我选择的文件是:icslab 1.csv、icslab 2.csv、icslab 3.csv、icslab 4.csv,每个csv都应该插入到各自的数据库表中,分别是room_icslab 1、room_icslab 2、room_icslab 3、room_icslab 4 在这段代码中,所有的csv文件都只插入db表室_icslab 1中 if(isset($_POST['roomschedule'])){ $t
if(isset($_POST['roomschedule'])){
$tmpfile = $_FILES["file"]["tmp_name"];
$fname = $_FILES["file"]["name"]['0'];
if($fname == "ICSLAB1.csv"){
$tableName = "room_icslab1";
}elseif($fname == "ICSLAB2.csv"){
$tableName = "room_icslab2";
}elseif($fname == "ICSLAB3.csv"){
$tableName = "room_icslab3";
}elseif($fname == "ICSLAB4.csv"){
$tableName = "room_icslab4";
}
foreach ($tmpfile as $key => $filename) {
if ($_FILES["file"]["size"] > 0) {
$file = fopen($filename, "r");
$count = 0;
while (($uploadData = fgetcsv($file, 1000, ",")) !== FALSE) {
$count++;
$day = $uploadData[0];
$startTime = $uploadData[1];
$endTime = $uploadData[2];
$room = $uploadData[3];
$subject = $uploadData[4];
$section = $uploadData[5];
$firstname = $uploadData[6];
$lastname = $uploadData[7];
if ($count > 1) {
$sql = "INSERT into ".$tableName."(day, startTime, endTime, room, subject, section, firstname, lastname, fullname,filename)
values ('$day',time(str_to_date('".$startTime."', '%h:%i %p')),time(str_to_date('".$endTime."', '%h:%i %p')), '$room', '$subject', '$section', '$firstname', '$lastname', '$firstname $lastname', '$fname')";
mysqli_query($conn,$sql) or die(mysqli_error());
}
}
fclose($file);
看起来您需要在循环中移动设置
$tablename
的if/elseif块来检查每个文件的名称。当前的方式,在循环之前
$fname = $_FILES["file"]["name"]['0'];
将只引用第一个,将$tablename
设置为该值,并在整个循环中使用相同的值
使用[$key]
而不是[0]
来引用循环当前迭代中的文件。下面是这部分代码的一个示例
// ...
foreach ($tmpfile as $key => $filename) {
$fname = $_FILES["file"]["name"][$key];
// ^^ Index of the current iteration
if($fname == "ICSLAB1.csv"){
$tableName = "room_icslab1";
} elseif($fname == "ICSLAB2.csv"){
$tableName = "room_icslab2";
} elseif($fname == "ICSLAB3.csv"){
$tableName = "room_icslab3";
} elseif($fname == "ICSLAB4.csv"){
$tableName = "room_icslab4";
}
// ...
您可以查看n以了解更多详细信息。特别是,请看“示例3上载文件数组”。即使在for循环中移动if/elseif块,我仍然会得到相同的结果。您是否仍在使用
$fname=$\u文件[“文件”][“名称”][“0”]代码>?即使在循环中,也只会引用第一个文件。如何在不使用['0']参数的情况下动态检索所选文件的所有文件名?