整个程序需要两个文件
upload.php (其实html也OK啦)
upload_file.php
第一个php纯粹是用来选择你要的文件
第二个文件几个步骤:
1.读取选择的文件的类型,名称
2.读取文件内容,以逗号(csv嘛)将内容分割
3.新建一个table,以文件名作为表的名字
4.文件第一行的内容是字段名(我比较喜欢这种csv。。。没字段叫什么数据嘛。。。如果遇到不需要字段的就将$i 那部分删掉就好了)
5.之后文件的每一行内容以数组的形式一行行地插入数据表
6.Successful~
一些东西:在创建新的table的时候需要带上一个tempCoulmn,否则无法插入新的字段,不知道有没有方法减掉这一步
不知有没有办法更好地检测csv文件呢?我这里用的是content type,或许检测后缀名会更加好
upload.php:
<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Please open your .CSV File:</label>
<input type="file" name="file" id="file" />
<br/>
<input type="submit" name="submit" value="Submit"/>
</form>
</body>
</html>
upload_file.php
<?php
$db = mysql_connect("","root","") or die("Could not connect.");
if(!$db)
die("no db");
if(!mysql_select_db("upload",$db))
die("No database selected.");
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
//echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
//echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
echo "</br>";
if ($_FILES["file"]["type"]=='application/vnd.ms-excel') {
$myfile = fopen($_FILES["file"]["tmp_name"], "r") or die("Unable to open file!");
//echo fread($myfile,filesize($_FILES["file"]["tmp_name"]));
$i=0;
$name=mysql_real_escape_string($_FILES["file"]["name"]);
while (($data = fgetcsv($myfile, ",")) !== FALSE) {
if ($i==0) {
mysql_query("CREATE TABLE `".$name."` (
tempColumn VARCHAR(255)
)");
for ($m=0; $m < count($data); $m++) {
$newColumn=mysql_real_escape_string($data[$m]);
mysql_query("ALTER TABLE `".$name."` ADD `".$newColumn."` VARCHAR(255) ");
}
mysql_query("ALTER TABLE `".$name."` DROP tempColumn");
$i++;
}
else
{
$newdata = "'".implode("','",$data)."'";
mysql_query("insert into `".$name."` values($newdata)",$db);
}
echo "Your file has been successfully uploaded";
}
fclose($myfile);
}else{
echo 'Sorry,your selected file is not a excel file';
}
?>