让我的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;))如果不是,请耐心等待-我会密切关注这个问题,并迅速回答任何回复和请求。
提前感谢:)
每次截断你的表,这要容易得多。
这是我昨晚为一个朋友写的一个基本的导入器,它只是简单的,但你应该明白。显然,我在这里使用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";
}
你正在使用;分隔符所以修复,我与这样的东西应该工作,这不是最好的方式去做,但感谢@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...";
}
?>