PHP / MYSQL - 将Excel / CSV上传到MySql表

时间:2015-12-08 13:55:01

标签: php mysql excel

我最近建立了一个网络应用程序,允许教师给学生和很多其他东西。现在我正在添加一个功能,让教师可以选择将包含所有成绩的excel / csv文件上传到不同的学生。我的代码似乎很好但是它有一些问题,我无法弄清楚为什么。当我只能获得2条记录时,我会在'avaliacoes'表上获得一堆空白记录。

我的excel看起来如何:

1 (row) :  naluno, uc, tipo, nota
2 (row) : r2011251, BD, exame, 15
3 (row) : r2011223, BD, exame, 16

(插入表格时不考虑第一行)

表单的HTML代码(在Diretor-Curso.php中):

<form class="form-group" action="lancarnota3.php" method="post" enctype="multipart/form-data">
  <label class="control-label" for="uc">Enviar Ficheiro Excel/CSV com notas</label>

  <br>
  <input id="fileSelect" type="file" name="file" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />  
  <br>

  <input type="submit" class="btn btn-default botao2" name="Submeter" value="Submeter"></button>

</form>

我的PHP页面(lancarnota3.php)处理上传:

<?php

if(isset($_POST["Submeter"]))
{
    $conn = mysqli_connect("localhost", "root", "", "teste");
    $conn->set_charset("utf8");

    // Check connection
    if($conn === false){
        die("ERROR: Could not connect. " . mysqli_connect_error());
    }
    //$filename=$_FILES["file"]["tmp_name"];
    if($_FILES["file"]["size"] > 0)
    {
        $file = fopen($_FILES["file"]["tmp_name"], "r");

        $count = 0;                                         
        while (($emapData = fgetcsv($file, 1000, ",")) !== FALSE)
        {

            $count++;                                      

            if($count>1){                                  
              $sql = "INSERT into avaliacoes (naluno, uc, tipo, nota) values ('$emapData[0]','$emapData[1]','$emapData[2]','$emapData[3]')";
              mysqli_query($conn, $sql);
            }                                              
        }
        fclose($file);
        include 'Diretor-Curso.php';
        echo "<script> replace('lancarnotas2'); </script>";
    }
    else
    {
        include 'Diretor-Curso.php';
        echo "<script> replace('lancarnotas6'); </script>";
    }
}


// close connection
mysqli_close($conn);
?>

知道如何让它发挥作用吗?

2 个答案:

答案 0 :(得分:0)

您确定您的数据文件不包含空行吗?检查MySQL常规日志以查看执行了哪些查询。我希望你会看到在日志中插入空白记录的查询。

您可以在INSERT之前添加条件,以检查您是否正在尝试插入&#34;非空&#34;数据,或执行其他验证以确保数据确实完整。

答案 1 :(得分:0)

这是一个愚蠢的,所以基本上我不得不将逗号(“,”)更改为半冒号(“;”)因为csv由于某种原因将这些内容分开。现在它完美无缺。哦,希望这有助于任何人:)