Я хочу вставить данные из файла csv в мою таблицу sql excel, код работает, но не работает должным образом.
ПРИМЕР:
Данные в файле Excel
Кир
kier @ Noemail @ gmail.com
вывод в таблице Excel
excel_name: kier; kier @ Noemail @ gmail.com
excel_email: пустой
<?php
$connect = mysqli_connect('localhost','root','P@ssw0rd@sql','voters');
if (isset($_POST['submit'])) {
if ($_FILES['file']['name']) {
$filename = explode(".",$_FILES['file']['name']);
if ($filename[1] == 'csv') {
$handle = fopen($_FILES['file']['tmp_name'], "r");
while ($data= fgetcsv($handle)) {
$item1 = mysqli_real_escape_string($connect, $data[0]);
$item2 = mysqli_real_escape_string($connect, $data[1]);
$sql = "INSERT INTO excel (excel_name, excel_email) VALUES ('$item1','$item2')";
mysqli_query($connect, $sql);
}
fclose($handle);
print "Rois x Dave!";
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form method = "POST" enctype = "multipart/form-data">
<div align = "center">
<p>upload<input type = "file" name = "file"></p>
<p><input type = "submit" name = "submit" value = "import"></p>
</div>
</form>
</body>
</html>
Проблема в том, что excel_name и excel_email объединяются в один столбец, который является excel_name, пожалуйста, помогите мне решить эту проблему. Тия!






Похоже, что $data[0] содержит вашу информацию, которая вам нужна. Я бы просто снова использовал взрыв и разделил данные, прежде чем переместить их в свою БД.
Попробуйте изменить свой цикл while на это:
while ($data= fgetcsv($handle)) {
$items = explode(';', $data[0]);
$sql = "INSERT INTO excel (excel_name, excel_email) VALUES ('$items[0]','$items[1]')";
mysqli_query($connect, $sql);
}
Старею, ; не видел. Ответ обновлен.
прочтите документ: http://php.net/manual/en/function.fgetcsv.php
array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]]] )
модифицировать
$data= fgetcsv($handle)
к
$data = fgetcsv($handle, $length = 0, $delimiter = ';')
Деломер загруженного вами CSV-файла: нет ,
большое спасибо! @ryan !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!! Ты спас мне жизнь, ты искренне благодарен! <3
Согласно значению kier;kier@[email protected] ваш разделитель - ;. Разделителем по умолчанию для fgetcsv является ,. Итак, вы должны передать ; в качестве аргумента-разделителя:
while ($data = fgetcsv($handle, 4096, ';')) {
Кроме того, всегда полезный для отладки ваших переменных, чтобы увидеть, какое значение они имеют:
var_dump($item1, $item2);
В
,есть нет$data[0].