Допустим, у меня есть 3 строки в файле .csv с 3 столбцами. В этом случае мне нужно импортировать один и тот же файл 3 раза, чтобы все мои данные в файле .csv были полностью вставлены в мою базу данных SQL. Я подумал, что !feof($file)
должен убедиться, что цикл проходит через конец файла?
if (isset($_POST['submitI'])){
$filename = $_FILES["file"]["tmp_name"];
if ($_FILES["file"]["size"] > 0){
$file = fopen($filename, "r");
while (!feof($file)){
$getData = fgetcsv($file, '0');
$sql = "SELECT * FROM murid WHERE No_Sek_Murid = '".$getData[0]."'";
$result = mysqli_query($conn, $sql);
if(empty($getData[0] || $getData[1] || $getData[2])){
$errorForm = "Sila isikan semua medan dalam fail!";
echo "<script type='text/javascript'>alert('$errorForm');</script>";
echo "<script> location.href='../main.php'; </script>";
exit();
}
if(mysqli_num_rows($result) === 0){
$sqlMurid = "INSERT INTO murid (No_Sek_Murid, Nama_Murid, Kelas_Murid) VALUES ('".$getData[0]."', '".$getData[1]."', '".$getData[2]."')";
$sqlKelab = "INSERT INTO kelab (Kod_Kelab, No_Sek_Murid, ID_Pengguna) VALUES ('{$_SESSION['kodKelab']}', '".$getData[0]."', '{$_SESSION['username']}')";
mysqli_query($conn, $sqlMurid);
mysqli_query($conn, $sqlKelab);
$success = "Berjaya menambah rekod ke dalam pangkalan data!";
echo "<script type='text/javascript'>alert('$success');</script>";
echo "<script> location.href='../main.php'; </script>";
exit();
}
} fclose($file);
} else {
$errorfile = "Operasi import gagal!";
echo "<script type='text/javascript'>alert('$errorfile');</script>";
echo "<script> location.href='../main.php'; </script>";
exit();
}
Удалить выход(); из вашего 4-го оператора if..
также кажется, что мы хотели бы выполнить предварительное чтение из файла перед циклом while и еще одно чтение в самом конце цикла, прежде чем мы вернемся к условному тесту (в
while
).В вашем коде есть уязвимости SQLInjection. Вы можете подумать, что CSV безопасен, потому что это файл, но это не так. Если вы разрешите конечным пользователям загружать эти файлы, это не лучше, чем объединение
$_REQUEST
прямо в ваших запросах. Никогда не объединяйте данные в запрос, это того не стоит.