Php 如何根据文件名将多个csv插入不同的表中?

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

下面是我的代码片段,我想在其中根据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'])){

$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']参数的情况下动态检索所选文件的所有文件名?