我最近建立了一个网络应用程序,允许教师给学生和很多其他东西。现在我正在添加一个功能,让教师可以选择将包含所有成绩的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);
?>
知道如何让它发挥作用吗?
答案 0 :(得分:0)
您确定您的数据文件不包含空行吗?检查MySQL常规日志以查看执行了哪些查询。我希望你会看到在日志中插入空白记录的查询。
您可以在INSERT之前添加条件,以检查您是否正在尝试插入&#34;非空&#34;数据,或执行其他验证以确保数据确实完整。
答案 1 :(得分:0)
这是一个愚蠢的,所以基本上我不得不将逗号(“,”)更改为半冒号(“;”)因为csv由于某种原因将这些内容分开。现在它完美无缺。哦,希望这有助于任何人:)