如何使用PHP中的条件将.csv文件上载到MySql表中

时间:2015-11-14 10:13:52

标签: php mysql

我想将.csv文件上传到我的mysql数据库表中。我的编码工作正常。我需要的是我想根据某些条件上传记录。如果条件为真,则仅将数据上载到数据库中。这是我的代码:

<html>
<head>
<title>Upload CSV and Insert into Database Using PHP</title>
<head>
<body>
<form method='POST' enctype='multipart/form-data'>
Upload CSV: <input type='file' name='csv_data' /> <input type='submit' name='submit' value='import' />
</form>
</body>
</html>

<?php

if (isset($_POST['submit'])) {

       if (!empty($_FILES['csv_data']['name'])) {
            if(pathinfo( $_FILES['csv_data']['name'],PATHINFO_EXTENSION) =='csv') {
                $handle = fopen($_FILES['csv_data']['tmp_name'], "r");

 $headers = fgetcsv($handle, 1000, ",");

                while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                    $item1 = mysqli_real_escape_string($dbConnection, $data[0]);
                    $item2 = mysqli_real_escape_string($dbConnection, $data[1]);

                    $check="select id from m_tl_course";
                    $che=get_records_sql($check);
                    foreach ($che as $ch){
                        $re=$ch->id;
                    }

  if($re == $item2){

                    $import = "INSERT into tbl_csv values('','$item1','$item2')";
                    mysqli_query($dbConnection, $import);
                    echo "<script>alert('Master Course Files Uploaded Successfully')</script>";
                }else
                {
                echo "<script>alert('Id Not Match')</script>";
                }
                fclose($handle);
                print "Import done";
            }
            else{
               echo "only csv file allowed"; 
            }
        } else {
            echo "Please select file";
        }
    }

这里我从m_tl_course表中检索一个id并将其存储到变量$ re中,并检查变量$ re是否等于我的.csv字段item2表示只记录上传到我的表中。

此编码工作正常。但如果我从.csv上传3条记录,则表示只有最后一条记录会存储到我的表格中。

如何解决此错误。请帮助我。

2 个答案:

答案 0 :(得分:0)

在这些情况下,我倾向于使用临时表来导入完整的csv文件。这样做的好处是

  1. 您可以允许mySQL验证例程验证数据和
  2. 它允许您使用SQL命令将适当的数据移动到您的tbl_csv记录集中。
  3. 当您从csv

    中读取的每一行连续读取相同数据时,以下部分应从循环中移出到顶部
                    $check="select id from m_tl_course";
                    $che=get_records_sql($check);
                    foreach ($che as $ch){
                        $re=$ch->id;
                    }
    

    你还应该考虑一个键入ID的关联数组,因此设置了使用...

    <html>
    <head>
    <title>Upload CSV and Insert into Database Using PHP</title>
    <head>
    <body>
    <form method='POST' enctype='multipart/form-data'>
    Upload CSV: <input type='file' name='csv_data' /> <input type='submit'    name='submit' value='import' />
    </form>
    </body>
    </html>
    <?php
    
    
    if (isset($_POST['submit'])) {
    
       if (!empty($_FILES['csv_data']['name'])) {
            if(pathinfo( $_FILES['csv_data']['name'],PATHINFO_EXTENSION) =='csv') {
    
                // Get Current ID list and place it into an associative array
                $check="select id from m_tl_course";
                $che=get_records_sql($check);
                foreach ($che as $ch){
                    $arrId[ $ch->id] = true; // just want to set an array
                }
     $handle = fopen($_FILES['csv_data']['tmp_name'], "r");
     $headers = fgetcsv($handle, 1000, ",");
    
                while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                    $item1 = mysqli_real_escape_string($dbConnection, $data[0]);
                    $item2 = mysqli_real_escape_string($dbConnection, $data[1]);
    
    
      if(isset($arrId[$item2])){
    
                    $import = "INSERT into tbl_csv values('','$item1','$item2')";
                    mysqli_query($dbConnection, $import);
                    echo "<script>alert('Master Course Files Uploaded Successfully')</script>";
                }else
                {
                echo "<script>alert('Id Not Match')</script>";
                }
                fclose($handle);
                print "Import done";
            }
            else{
               echo "only csv file allowed"; 
            }
        } else {
            echo "Please select file";
        }
    }
    

答案 1 :(得分:0)

好像你没有正确设置括号。请参阅以下代码中的评论,以查看我添加的括号:

<?php

if (isset($_POST['submit'])) 
{
       if (!empty($_FILES['csv_data']['name'])) 
       {
            if(pathinfo( $_FILES['csv_data']['name'],PATHINFO_EXTENSION) =='csv') 
            {
                $handle = fopen($_FILES['csv_data']['tmp_name'], "r");

                $headers = fgetcsv($handle, 1000, ",");

                while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
                {
                    $item1 = mysqli_real_escape_string($dbConnection, $data[0]);
                    $item2 = mysqli_real_escape_string($dbConnection, $data[1]);

                    $check="select id from m_tl_course";
                    $che=get_records_sql($check);

                    foreach ($che as $ch)
                    {
                        $re=$ch->id;
                    }

                    if($re == $item2)
                    {
                        $import = "INSERT into tbl_csv values('','$item1','$item2')";
                        mysqli_query($dbConnection, $import);
                        echo "<script>alert('Master Course Files Uploaded Successfully')</script>";
                    }
                    else
                    {
                        echo "<script>alert('Id Not Match')</script>";
                    }

                    fclose($handle);
                    print "Import done";
                }//INSERTED THIS BRACKET
            }
            else
            {
                echo "only csv file allowed"; 
            }
        } 
        else 
        {
            echo "Please select file";
        }
}

?>