0

PHP スクリプトを機能させるのに少し問題があります。

私が達成しようとしていること: サブページで、MySQL データベースへの非常に単純な CSV ファイルのアップロードが必要です。以前のソリューションに応じて、テーブルを DROP または TRUNCATE し、この CSV ファイル内の一部のデータを CREATE または INSERT INTO する必要があります。

私の問題は何ですか: 私は 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に投稿されました;))そうでない場合は、しばらくお待ちください-この質問を注意深く監視し、返信と要求に迅速に回答します。

前もって感謝します :)

4

2 に答える 2

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...";
    }
?>
于 2013-06-18T12:43:15.363 に答える