使用PHP脚本将CSV上传到MySQL。问题

时间:2013-06-18 09:05:58

标签: php mysql csv upload

我在使用PHP脚本时遇到了一些麻烦。

我想要完成的任务: 在子页面上,我想要一个非常简单的CSV文件上载到MySQL数据库。它需要DROP或TRUNCATE一个表,并根据以前的解决方案,CREATE或INSERT INTO,这个CSV文件中的一些数据。

我现在的问题是什么: 我是PHP和MySQL的初学者,因此无法弄清楚我的脚本无法正常工作的原因。

我的代码:

PHP:

$connect = mysql_connect("host","user","pass");  
mysql_select_db("database",$connect); //select the table 

if ($_FILES[csv][size] > 0) { 

$file = $_FILES[csv][tmp_name]; 
$handle = fopen($file,"r"); 

mysql_query (" 
CREATE TABLE IF NOT EXISTS `database`.`table` (
`item_number` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_danish_ci NOT NULL ,
`item_desq` VARCHAR( 200 ) CHARACTER SET utf8 COLLATE utf8_danish_ci NOT NULL ,
`item_img_path` VARCHAR( 200 ) CHARACTER SET utf8 COLLATE utf8_danish_ci NULL ,
`item_id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
PRIMARY KEY (  `item_id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_danish_ci                      
        ");

do { 
if ($data[0]) { 
   mysql_query("
                INSERT INTO strand_items1 (item_number, item_desq, item_img_path) 
                VALUES 
                      ( 
                      '".addslashes($data[0])."', 
                      '".addslashes($data[1])."',
          '".addslashes($data[2])."
                      ) 
              "); 
} 
} while ($data = fgetcsv($handle,1000,";","\"")); 

header('Location: import_old.php?success=1'); die; 
} 

HTML:

<body>
    <form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
        Choose your file: <br />
        <input name="csv" type="file" id="csv" />
        <input type="submit" name="Submit" value="Submit" />
    </form>
</body>

CSV:CSV中的普通行看起来像这样

"13371337";"Some description of the item";"NULL";

现在,结果:从这一点开始,我得到了一个“成功”的流程,但是表中没有数据,而且我可以猜测,数据库上存在某种无限循环,因为它会产生越来越多的数据量表中的空条目只有item_id自动递增和打开。 我哪里出错了,是否有一种简单的方法来解决这个问题?

这是我在这里的第一个问题,我希望我能满足所有要求。 (要指出我福利局的烦躁;问题是第一次张贴在meta.stackoverflow.com)。)如果没有,请耐心等待 - 我将密切关注这个问题,并在任何答复和requiests很快得出答案

提前谢谢你:)

2 个答案:

答案 0 :(得分:1)

每次更容易截断你的桌子。

这是我昨晚为朋友写的一个基本的进口商,它只是简单但你应该明白。显然我在这里使用mysqli所以你需要改变那个位以适应你的位置,你还必须在顶部添加截断(在开始导入位之后就好了。

if (isset($_POST['action']) && $_POST['action']=="beginimport") {
    echo "<h4>Starting Import</h4><br />";
    // Ignore user abort and expand time limit 
    //ignore_user_abort(true);
    set_time_limit(60);
    $result = @move_uploaded_file($_FILES['clientimport']['tmp_name'], getcwd()."/tmp/siccodes.csv");
    if(empty($result)){
        echo "<span style=\"font-weight:bold;color:red;\">There was an error moving the uploaded file</span><br />";
    } else {
        echo "<span style=\"font-weight:bold;color:green;\">Temp file created begining data parse<br /><br /></span>";
        if (($handle = fopen(getcwd()."/tmp/siccodes.csv", "r")) !== FALSE) {
            $row = 0;
            while (($data = fgetcsv($handle, 10000, ",")) !== FALSE) {  
                $client = $db->queryUniqueObject("SELECT ClientID FROM tblcreditchecks WHERE RegNumber='".mysqli_real_escape_string($db->mysqli,$data[0])."'",ENABLE_DEBUG);
                if ($data[2]>0) {
                    $db->execute("UPDATE tblcreditchecks SET TurnOver='".mysqli_real_escape_string($db->mysqli,$data[2])."' WHERE RegNumber='".mysqli_real_escape_string($db->mysqli,$data[0])."'",ENABLE_DEBUG);
                } else {
                    echo "Turnover fail - ".$data[0];
                }
                if ($client->ClientID>0) {
                    $db->execute("UPDATE tblclients SET SICCodes='".mysqli_real_escape_string($db->mysqli,$data[1])."' WHERE ID=".$client->ClientID,ENABLE_DEBUG);
                } else {
                    echo " SIC fail - ".$data[0];
                }

                echo " - IMPORTED - ".$data[0]."<br />";
                fcflush();
                set_time_limit(60); // reset timer on loop
            } 
        }
        fclose($handle);
        unlink(getcwd()."/tmp/siccodes.csv");
    }
    echo "COMPLETE";
}

答案 1 :(得分:0)

你正在使用;分隔符所以用这样的东西修复我应该工作,这不是最好的方法,但感谢@Dave提示如何做到这一点......

if (isset($_POST['process'])) 
    {
        echo "<h2>Importing...</h2>";

        set_time_limit(60);
        $fileResult = move_uploaded_file($_FILES['csv']['tmp_name'], getcwd()."/tmp/somefile.csv");
        if(empty($fileResult))
        {
            echo "<h1>Some error</h1>";
        }
        else
        {
            if(($handle = fopen(getcwd()."/tmp/somefile.csv", "r")) !== false)
            {
                require_once 'dbController.php';
                $db_controller = new dbController();
                $db_connection = $db_controller->connectToDb();
                if($db_controller->conections_check == true)
                {   
                    $truncateTable = "
                        truncate table strand_items3
                    ";
                    $truncateTable = mysql_query($truncateTable);
                    $row = 1;
                    while (($data = fgetcsv($handle, 1000, ";")) !== false) 
                    {
                      $itiemId = $data[0];
                      $itemDescription = $data[1];

                      $insertQuery = "
                        INSERT INTO `tablename` (`value`, `value`, `value`) 
                        VALUES ('$itiemId', '$itemDescription', NULL)
                      ";

                       $insertQuery = mysql_query($insertQuery);
                    }
                }
                else
                {
                    echo "Error connecting to the server";
                }

            }
            fclose($handle);
            unlink(getcwd()."/tmp/somefile.csv");
        }
        echo "Done...";
    }
?>