使用php将CSV上传到数据库中
我正在做我的一个小项目,我得出结论,能够自动将excel表格上传到我的数据库将非常非常有用,问题是我不知道从哪里开始,我做了一些研究,决定使用从excel工作表创建的CSV文件将数据上传到数据库的表中 我所举的大多数例子看起来都像是把PHP代码放到html中,而不是像我在过去两个月里所做的那样将逻辑划分到不同的文件中 我现在拥有的是html格式的上传表单:使用php将CSV上传到数据库中,php,mysql,csv,Php,Mysql,Csv,我正在做我的一个小项目,我得出结论,能够自动将excel表格上传到我的数据库将非常非常有用,问题是我不知道从哪里开始,我做了一些研究,决定使用从excel工作表创建的CSV文件将数据上传到数据库的表中 我所举的大多数例子看起来都像是把PHP代码放到html中,而不是像我在过去两个月里所做的那样将逻辑划分到不同的文件中 我现在拥有的是html格式的上传表单: <form enctype="multipart/form-data" method="post" id="upload
<form enctype="multipart/form-data" method="post" id="uploadForm">
<input name="filesfiles" id="upload" type="file" accept=".csv" class="left" />
<input type="submit" value="Cargar" />
</form>
或在某些其他excel版本中:
Cedula,Nombre,Primer Apellido,Segundo Apellido,Correo,IDRol,Estado
126548791,Franz ,Ritter ,von Liszt,fliszt@arppegio.com,3,0
174657109,Sofia ,Asgatovna ,Gubaidulina ,gubaidulina@yahoo.com,3,0
第一行是我要将文件上载到的表的列名称(添加信息时应忽略)
问题是,我不知道在单击submit按钮后如何将上传文件链接到我的includes中的PHP代码,该代码将CSV插入表中
提前多谢
编辑:
EDIT4:
我是一个纯粹的天才和技能的中风马杜卡能够帮助我解决这个庞然大物的问题。我对他感激不尽,以下是代码,希望有一天它能为某人服务,让他们免于失败的悲痛
<?php
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_WARNING & ~E_STRICT);
mysql_connect('localhost', 'root', '');
mysql_select_db("proyecto") or die(mysql_error());
if (isset($_FILES['csvupload'])) {
$errors = array();
$allowed_ext = array('.csv');
$file_name = $_FILES['csvupload']['name'];
$file_ext = strtolower(end(explode('.', $file_name)));
$file_size = $_FILES['csvupload']['size'];
$file_tmp = $_FILES['csvupload']['tmp_name'];
if (in_array($allowed_ext) === false) {
$errors[] = 'La extensión del archivo no es valida.';
}
if ($file_size > 10485760) {
$errors[] = 'El archivo sobrepasa el limite de 10MB';
}
if (empty($errors)) {
$handle = fopen($file_tmp, "r");
while (!feof($handle)) {
$value = (fgetcsv($handle, 0, ','));
if ($i > 0) {
if ($value[0] != '') {
$inserts[] = "('" . mysql_real_escape_string($value[0]) . "','"
. mysql_real_escape_string($value["1"]) . "','"
. mysql_real_escape_string($value["2"]) . "','"
. mysql_real_escape_string($value["3"]) . "','"
. mysql_real_escape_string($value["4"]) . "','"
. mysql_real_escape_string($value["5"]) . "','"
. mysql_real_escape_string($value["6"]) . "')";
}
} elseif ($i == 0) {
$fields = $value;
}
$i++;
}
mysql_query("INSERT INTO `usuarios` (`cedula`,`nombre`,`apellido1`,`apellido2`,`correo`,`idRol`,`estado`) VALUES " . implode(",", $inserts));
fclose($handle);
if ($sq1) {
echo '¡Los usuarios han sido agregados exitosamente!';
}
}
}
?>
上传表单
<form enctype="multipart/form-data" action="uploader.php" method="POST">
<ul><li>
<input name="file" type="file" /><br /></li><li>
<br><input type="submit" name="submit" value="Upload" /></li>
</ul>
</form>
-
-
uploader.php
<?php
if (isset($_FILES['file'])) {
$errors = array();
$allowed_ext = array('csv');
$file_name = $_FILES['file']['name'];
$file_ext = strtolower(end(explode('.', $file_name)));
$file_size = $_FILES['file']['size'];
$file_tmp = $_FILES['file']['tmp_name'];
if (in_array($file_ext, $allowed_ext) === false) {
$errors[] ='Extension not allowed';
}
if ($file_size > 10485760) {
$errors[] = 'File size must be under 10mb';
}
if (empty($errors)) {
$handle = fopen($file_tmp,"r");
while(($fileop = fgetcsv($handle,",")) !== false)
{
$companycode = mysql_real_escape_string($fileop[0]);
$pdtcode = mysql_real_escape_string($fileop[2]);
$Item = mysql_real_escape_string($fileop[3]);
$pack = preg_replace('/[^A-Za-z0-9\. -]/', '', $fileop[4]);
$lastmonth = mysql_real_escape_string($fileop[5]);
$ltlmonth = mysql_real_escape_string($fileop[6]);
$op = mysql_real_escape_string($fileop[9]);
$pur = mysql_real_escape_string($fileop[10]);
$sale = mysql_real_escape_string($fileop[12]);
$bal = mysql_real_escape_string($fileop[17]);
$bval = mysql_real_escape_string($fileop[18]);
$sval = mysql_real_escape_string($fileop[19]);
$sq1 = mysql_query("INSERT INTO `sas` (companycode,pdtcode,Item,pack,lastmonth,ltlmonth,op,pur,sale,bal,bval,sval) VALUES ('$companycode','$pdtcode','$Item','$pack','$lastmonth','$ltlmonth','$op','$pur','$sale','$bal','$bval','$sval')");
}
fclose($handle);
if($sq1){
echo 'Stock and Sales successfully updated. Please check the values.<br><br>';
}
}
?>
上面的代码很简单。我正在为我的项目使用。以下是执行任务所需的基本代码
$file = fopen($_FILES['csvUpload']['tmp_name'], "r");
$i = 0;
while (!feof($file)) {
$value = (fgetcsv($file, 0, ';'));
if ($i > 0) {
if ($value[0] != '') {
$inserts[] = "(" . $value[0] . ","
. $value["1"] . ","
. $value["2"] . ","
. $value["3"] . ","
. $value["4"] . ","
. $value["5"] . ","
. $value["6"] . ")";
}
} elseif ($i == 0) {
$fields = $value;
}
$i++;
}
mysql_query("INSERT INTO `MyTable` (`" . $fields[0] . "`,`" . $fields[1] . "`,`" . $fields[2] . "`,`" . $fields[3] . "`,`" . $fields[4] . "`,`" . $fields[5] . "`) VALUES " . implode(",", $inserts));
fclose($file);
您必须实现验证,检查文件类型和大小限制。然后将数据插入表中。我已经使用MySQL批量插入来处理大量数据。希望这有帮助
编辑1:
请用此代码替换您的代码,并查看它是否正常工作
<?php
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_WARNING);
mysql_connect('localhost', 'root', '');
mysql_select_db("proyecto") or die(mysql_error());
if (isset($_FILES['csvUpload'])) {
$errors = array();
$allowed_ext = array('.csv');
$file_name = $_FILES['csvUpload']['name'];
$file_ext = strtolower(end(explode('.', $file_name)));
$file_size = $_FILES['csvUpload']['size'];
$file_tmp = $_FILES['csvUpload']['tmp_name'];
if (in_array($allowed_ext) === false) {
$errors[] = 'La extensión del archivo no es valida.';
}
if ($file_size > 10485760) {
$errors[] = 'El archivo sobrepasa el limite de 10MB';
}
if (empty($errors)) {
$handle = fopen($file_tmp, "r");
while (($fileop = fgetcsv($handle, ";") && fgetcsv($handle, ",")) !== false) {
$cedula = mysql_real_escape_string($fileop[0]);
$nombre = mysql_real_escape_string($fileop[2]);
$apellido1 = mysql_real_escape_string($fileop[3]);
$apellido2 = mysql_real_escape_string($fileop[4]);
$correo = mysql_real_escape_string($fileop[5]);
$idRol = mysql_real_escape_string($fileop[6]);
$estado = mysql_real_escape_string($fileop[9]);
$sq1 = mysql_query("INSERT INTO `usuarios` (cedula,nombre,apellido1,apellido2,correo,idRol,estado) VALUES ('$cedula','$nombre','$apellido1','$apellido2','$correo','$idRol','$estado')");
}
fclose($handle);
if ($sq1) {
echo '¡Los usuarios han sido agregados exitosamente!';
}
}
}
?>
<form enctype="multipart/form-data" method="post" id="uploadForm">
<input name="csvUpload" id="upload" type="file" accept=".csv" class="left" />
<input type="submit" value="¡Cargar!" />
</form>
你能把上传的内容写到一个临时文件吗?@tadman上传表单在一个php文件上,该文件调用包含所有php函数的include files,在这两者之间,我使用jquerys建立连接。如果这不是你的意思,很抱歉。或者你是想让我做一把小提琴吗?我是说,如果你可以将上传保存到一个临时文件,那么你可以在该路径上调用LOAD DATA infle
。完成。@tadman好吧,我必须承认我不知道这种方法,谢谢你告诉我它看起来和我正在寻找的类似,从php标记判断,我假设你在表单的同一个文件中使用该代码。同样在我的例子中,我有更少的列,它们的类型是varchar(20),最后两个是int和char(1)。此外,对于语法,我的Excel正在使用保存其CSV;相反,我需要改变什么?在此之前,非常感谢您为我提供了一个示例。在第二组代码中,将while($fileop=fgetcsv($handle,“,”)!==false)替换为while($fileop=fgetcsv($handle,“;”))!==false),然后尝试。。。。。。。。。我不确定它是否能解决古老的、不受欢迎的mysql\u查询
接口的问题,但这并不是一个好主意。这是可行的,但一个简单的错误可能会使您暴露于一个巨大的SQL注入错误中。@Indra我会尽快检查它home@Indra我试着改变你所说的,当然删除了变量,并用我自己的变量替换它们,但是我在文档的末尾发现了一个语法错误,这里没有结束html标记,您使用的是糟糕的mysql\u query
界面。我不知道这看起来与上面的非常相似,因为这更像是一个个人的小项目,我不怕冒风险injection@tadman希望你能读懂我的“英语”,我说这是基本代码,实现验证,检查文件类型和大小limit@CodeGrasshopper运行代码,看看它是否符合您的要求。如果您需要清除任何与此相关的内容,请让我知道。@Maduka Jayalath,我的出席不成功,我正在编辑我的帖子以添加代码和错误。
<?php
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_WARNING);
mysql_connect('localhost', 'root', '');
mysql_select_db("proyecto") or die(mysql_error());
if (isset($_FILES['csvUpload'])) {
$errors = array();
$allowed_ext = array('.csv');
$file_name = $_FILES['csvUpload']['name'];
$file_ext = strtolower(end(explode('.', $file_name)));
$file_size = $_FILES['csvUpload']['size'];
$file_tmp = $_FILES['csvUpload']['tmp_name'];
if (in_array($allowed_ext) === false) {
$errors[] = 'La extensión del archivo no es valida.';
}
if ($file_size > 10485760) {
$errors[] = 'El archivo sobrepasa el limite de 10MB';
}
if (empty($errors)) {
$handle = fopen($file_tmp, "r");
while (($fileop = fgetcsv($handle, ";") && fgetcsv($handle, ",")) !== false) {
$cedula = mysql_real_escape_string($fileop[0]);
$nombre = mysql_real_escape_string($fileop[2]);
$apellido1 = mysql_real_escape_string($fileop[3]);
$apellido2 = mysql_real_escape_string($fileop[4]);
$correo = mysql_real_escape_string($fileop[5]);
$idRol = mysql_real_escape_string($fileop[6]);
$estado = mysql_real_escape_string($fileop[9]);
$sq1 = mysql_query("INSERT INTO `usuarios` (cedula,nombre,apellido1,apellido2,correo,idRol,estado) VALUES ('$cedula','$nombre','$apellido1','$apellido2','$correo','$idRol','$estado')");
}
fclose($handle);
if ($sq1) {
echo '¡Los usuarios han sido agregados exitosamente!';
}
}
}
?>
<form enctype="multipart/form-data" method="post" id="uploadForm">
<input name="csvUpload" id="upload" type="file" accept=".csv" class="left" />
<input type="submit" value="¡Cargar!" />
</form>