【发布时间】:2013-06-18 09:05:57
【问题描述】:
让我的 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 上;))如果没有,请耐心等待 - 我会密切关注这个问题并迅速回答任何回复和要求。
提前谢谢你:)
【问题讨论】:
-
您使用的是an obsolete database API,应该使用modern replacement。
addslashes不足以抵御 SQL injection attacks(现代 API 可以更轻松地从他们那里 defend 自己)。 -
感谢昆汀的回复。我知道我缺乏支持的 SQL 和 PHP。然而,由于这不是我的专业领域,我没有,也无法更新我对这些主题的知识。因此,我希望您忽略所有安全性和老式功能使用。我(和我的雇主)决定不雇用开发人员,因此不关心这些问题 :-)