Я импортирую файл csv в таблицу mysql с помощью php. Теперь я собираюсь добавить несколько строк, как в csv. csv не имеет заголовка.
Я оставляю скрипт того, как я создал таблицу в mysql:
CREATE TABLE `Areceber` (
`Id` int NOT NULL AUTO_INCREMENT,
`N_utente` varchar(45) DEFAULT NULL,
`Ano` varchar(10) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
сейчас поставлю html скрипт:
<form method = "post" action = "conexaoexcel1.php" enctype = "multipart/form-data">
<input type = "file" name = "file"/>
<input type = "submit" name = "submit_file" value = "Submit"/>
</form>
а теперь страница conexaoexcel1.php:
$file = $_FILES["file"]["tmp_name"];
$file_open = fopen($file,"r");
while(($csv = fgetcsv($file_open, 1000, ";")) !== false)
{
foreach ($csv as $key => $value){
$Id = str_getcsv($value[0], ',');
var_dump($Id);
}
}
Теперь, когда я var_dump первый столбец, он возвращается следующим образом:
array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "2" } array(1) { [0]=> string(1) "3" } array(1) { [0]=> string(1) "4" } array(1) { [0]=> string(1) "5" } array(1) { [0]=> string(1) "6" } array(1) { [0]=> string(1) "7" } array(1) { [0]=> string(1) "8" } array(1) { [0]=> string(1) "9" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "2" }
До строки с номером девять он возвращает нормально, но когда он начинается со строки с номером 10, он возвращает только число 1 без нуля и так далее. Можете ли вы помочь решить проблему?
зачем ты это делаешь $value[0] ? Это вернет первый символ строки.
@CBroe Но если я поставлю $Id = $value;, он вернет все в CSV. Когда вставляю в базу, выдает ошибку, потому что пытается вставить все в первую колонку базы
Это потому, что ваш цикл foreach перебирает значения всех столбцов строки, которую вы только что прочитали. Если вы хотите работать только со значением первого столбца, тогда не перебирайте их все, а просто напрямую обращайтесь к первому.
@C Broe Я намерен вставить первый столбец csv в столбец «Id» mysql, второй столбец csv в столбец N_utente mysql и третий столбец csv в столбец Ano mysql. Ты понимаешь?
Можете ли вы показать фактическое содержимое файла CSV, это могут быть разделители, которые вы используете.






Ваш $csv уже является массивом данных, и для вывода первого столбца используйте $csv[0] без цикла.
$file = $_FILES["file"]["tmp_name"];
$file_open = fopen($file,"r");
while(($csv = fgetcsv($file_open, 1000, ";")) !== false)
{
$Id = $csv[0];
var_dump($Id);
}
Просто проверьте правильность вашего разделителя. Если это строка изменения с разделителями-запятыми
while(($csv = fgetcsv($file_open, 1000, ";")) !== false)
к
while(($csv = fgetcsv($file_open, 1000, ",")) !== false)
В противном случае это должно работать.
Вы проверяли разделитель? Он вернет все данные, если вы установили неправильный разделитель
Я использовал запятую и должен был поставить ;. Это было именно так. Спасибо
$valueуже будет содержать10для этого столбца в этой строке, ваша ошибка в том, что вы смотрите только на первый символ (точнее, байт) этого столбца с$value[0]. И то, что вы вызываетеstr_getcsvв этот момент, с самого начала не имеет смысла —fgetcsvуже разобрал строку в массив.