Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Import CSV do databáze.

Zdravím,

mám problém s importem do databáze CSV souboru.
Mám vytvořený správně sloupce ale při importu přes phpadmin mi to píše Chybný počet polí v CSV datech na řádku 1.
CSV soubor je vytvořený v mp3 tagu, přikládám ho pro kontrolu. Snad mi někdo řekne co je špatně.

V databázi mám vytvořený tyto sloupce:
1 Title
2 Artist
3 Album
4 Track
5 Year
6 Length
7 Autor
8 Filename

Předmět Autor Datum
Vymaž ty středníky na koncích řádků.
Wikan 31.03.2012 10:36
Wikan
Vymazáno ale při importu zase stejný problém.
Gizzer 31.03.2012 10:40
Gizzer
Ako nevadí Ti, že tých polí tam máš 9 ? Hneď druhý riadok, keď rátam teda aj hlavičku... Si ich zrát…
pme 31.03.2012 10:48
pme
Nevím ale jak počítám jak počítám vidím 8 polí což mám i vytvořené. Jambalaya; ===Title George Jone…
Gizzer 31.03.2012 10:54
Gizzer
Myslel jsem že je možná chyba zde Country & Western Favourites, Vol. 1; ta čárka za Favourites ale p…
Gizzer 31.03.2012 11:00
Gizzer
Myslel som si aj ja... A čo Coutry & Western ? Skús aj toto "&" zmazať...
pme 31.03.2012 11:02
pme
Tak ani to to nevyřešilo, a navíc kdyby to byl ten problém s & tak by to bylo k ničemu, protože je t…
Gizzer 31.03.2012 11:06
Gizzer
A ako vyzerá tabuľka v databáze? Stĺpce sú všetky rovnaké? String/text/číslo? Alebo?
pme 31.03.2012 11:07
pme
1 Title varchar(255) utf8_general_ci 2 Artist varchar(255) utf8_general_ci 3 Album longtext utf8_gen…
Gizzer 31.03.2012 11:12
Gizzer
S jakými parametry ten import provádíš?
Wikan 31.03.2012 11:25
Wikan
Nevím jestli je tím myšleno toto, viz screen.
Gizzer 31.03.2012 11:32
Gizzer
Pole oddělené: dej tam ;
Wikan 31.03.2012 11:34
Wikan
Tak už jsem se díky tomuto dostal že to zapíše ten první řádek: Title Artist Album Track Year Length…
Gizzer 31.03.2012 11:40
Gizzer
A umazal jsi ty středníky na konci?
Wikan 31.03.2012 11:45
Wikan
Ano, přikládám upravený CSV pro kontrolu.
Gizzer 31.03.2012 11:49
Gizzer
Tak ještě zkus obsah těch jednotlivých polí dát do uvozovek.
Wikan 31.03.2012 11:51
Wikan
Jednoduché uvozovky? Udělal jsem to a píše mi to už zase tu chybu na prvním řádku. Nemůže být probl…
Gizzer 31.03.2012 12:05
Gizzer
Dvojité.
Wikan 31.03.2012 12:07
Wikan
to jsem také udělal a zmíněná chyba na první řádku. Zkusím ještě místo těch středníků dát všude čár…
Gizzer 31.03.2012 12:11
Gizzer
Musíš to mít tak, jak to máš nastavené při importu.
Wikan 31.03.2012 12:12
Wikan
jj to vím, nechal jsem při importu , a všude přepsal středníky a stále ta chyba na řádku 2, ten prvn…
Gizzer 31.03.2012 12:15
Gizzer
A máš to teď ve dvojitých uvozovkách nebo ne?
Wikan 31.03.2012 12:16
Wikan
Když je to v uovozovkách vše "Title","Artist","Album","Track","Year","Length","Autor","Filename" "J…
Gizzer 31.03.2012 12:21
Gizzer
Ještě by mohl být problém v tom, že importuješ soubor v Unicode kódování, ale máš nastavené UTF-8.
Wikan 31.03.2012 12:28
Wikan
Tak tohle by mě nenapadlo, kod který tvoří v tom mp3tagu ten soubor CSV je nastaven na kodování utf-…
Gizzer 31.03.2012 12:32
Gizzer
"Ale teď to háže zase problém s těmi poli na řádku 2." To napíše len problém a číslo riadku? Kde je…
pme 31.03.2012 11:51
pme
Chybný počet polí v CSV datech na řádku 2. INSERT INTO `country` VALUES ( 'T\0i\0t\0l\0e\0', '\0A\0r…
Gizzer 31.03.2012 11:53
Gizzer
Doufám že nevadí že jsem to znovu otevřel. Mám problém s tím zápisem. Vytvořil jsem si formulář pr…
Gizzer 31.03.2012 21:24
Gizzer
Tak nemuzes to delat podle čárky žejo ;) Musíš to dělat podle regulerního výrazu který to dělí na uv…
AZOR 31.03.2012 21:31
AZOR
Tak jsem asi lama ale to co si napsal jsem vůbec nepochopil :D Znamená to snad každou skladbu přeps…
Gizzer 31.03.2012 21:36
Gizzer
Jen se ti snažil sdělit, že čárka jako oddělovač polí funguje pouze v případě, že čárka není uvnitř…
Wikan 31.03.2012 21:54
Wikan
Už jsem to pochopil, takže chyba je v tom že to není v uvozovkách :D
Gizzer 31.03.2012 21:59
Gizzer
ne chyba je v tom, ze to delis na zakladne carky, coz je spatny algoritmus, mas to delit minimaln na…
AZOR 31.03.2012 22:16
AZOR
Co mám tedy upravit, soubor CSV nebo kod který to zpracovává a odesílá? Jsem z toho teď tak trochu c…
Gizzer 31.03.2012 22:19
Gizzer
Kód.
Wikan 31.03.2012 22:21
Wikan
Ten soubor co to zpracovává $cells = explode(",",$line); to rozhazuje do pole podle čárky, což je šp…
AZOR 31.03.2012 22:24
AZOR
\" - pokud to v PHP udelat to co si myslim ze to udela a to co to udela v kazdem normalnim jazyku
AZOR 31.03.2012 22:25
AZOR
Pokud tam dám toto explode("\",\"",$line)tak upload nefunguje, ikdyž to napíše Konec ForEach Nahráno…
Gizzer 31.03.2012 22:33
Gizzer
Vyřešeno tak že vytváření toho CSV jsem upravil aby to dělal místo čárek ; a v kodu jsem to upravil…
Gizzer 01.04.2012 12:20
Gizzer
no ale ted ti to nepujde pokud to bude osahovat strednik. To jsi mohl rovnou udelat "sloupecA"@,@"Sl…
AZOR 01.04.2012 12:30
AZOR
Tak v 13000 alb nemám středník tak mám snad vyhráno :D
Gizzer 01.04.2012 12:36
Gizzer
13000 ::) myslel jsem ze Powerwolf má 4 CD, Skyfire také, Wintersun 1, Norhland 1 Crimfall 2, tzn. 1…
AZOR 01.04.2012 12:51
AZOR
:-) každý máme to své :) a spletl jsem se bylo myšleno skladeb ;§ poslední
Gizzer 01.04.2012 13:11
Gizzer

1 Title varchar(255) utf8_general_ci
2 Artist varchar(255) utf8_general_ci
3 Album longtext utf8_general_ci
4 Track varchar(255) utf8_general_ci
5 Year varchar(255) utf8_general_ci
6 Length varchar(255) utf8_general_ci
7 Autor varchar(255) utf8_general_ci
8 Filename varchar(255) utf8_general_ci

Když je to v uovozovkách vše

"Title","Artist","Album","Track","Year","Length","Autor","Filename"
"Jambalaya","George Jones","Country & Western Favourites Vol 1","1","1992","106","Williams","01 - Jambalayamp3"
"Sally Was A Good Old Girl","Waylon Jennings","Country & Western Favourites Vol 1","2","1992","149","Howard","02 - Sally Was A Good Old Girlmp3"
"Have I Been Away Too Long","Conway Twitty","Country & Western Favourites Vol 1","3","1992","149","Twitty","03 - Have I Been Away Too Longmp3"
"Crystal Chandeliers","Billie Jo Spears","Country & Western Favourites Vol 1","4","1992","200","Harris","04 - Crystal Chandeliersmp3"
"Mean Eyed Cat","Johnny Cash","Country & Western Favourites Vol 1","5","1992","151","Cash","05 - Mean Eyed Catmp3"
"Face Of Fighter","Willie Nelson","Country & Western Favourites Vol 1","6","1992","199","W Nelson","06 - Face Of Fightermp3"
"Follow Me Back To Louisville","Don Williams","Country & Western Favourites Vol 1","7","1992","152","Davidson","07 - Follow Me Back To Louisvillemp3"
"Hello Walls","Faron Young","Country & Western Favourites Vol 1","8","1992","135","Willie Nelson","08 - Hello Wallsmp3"
"Fraulein","Bobby Helms","Country & Western Favourites Vol 1","9","1992","167","Williams","09 - Frauleinmp3"
"Silver Wings","Freddy Fender","Country & Western Favourites Vol 1","10","1992","169","Haggard","10 - Silver Wingsmp3"
"How Do I Hide From A Memory","Ray Pillow","Country & Western Favourites Vol 1","11","1992","206","Pillow","11 - How Do I Hide From A Memorymp3"
"Catahoula Cur Dog","Gene Simmons","Country & Western Favourites Vol 1","12","1992","163","Simmons","12 - Catahoula Cur Dogmp3"
"Georgia In A Jug","Johnny Paycheck","Country & Western Favourites Vol 1","13","1992","170","Braddock","13 - Georgia In A Jugmp3"
"Sweet Country Music","Dave Travis","Country & Western Favourites Vol 1","14","1992","256","Travis","14 - Sweet Country Musicmp3"
"Memory Train","Rex Allen Jr","Country & Western Favourites Vol 1","15","1992","218","Wayne","15 - Memory Trainmp3"
"What Am I Living For","Carl Perkins","Country & Western Favourites Vol 1","16","1992","141","Harris/Jay","16 - What Am I Living Formp3"
"Rain And Tears","Ray Price","Country & Western Favourites Vol 1","17","1992","165","Goebner/Reklov","17 - Rain And Tearsmp3"
"Singing The Blues","Guy Mitchell","Country & Western Favourites Vol 1","18","1992","117","Endsley","18 - Singing The Bluesmp3"

Tak už to háže chybu na řádku 1

PS: Díky za vaší trpělivost

Tak tohle by mě nenapadlo, kod který tvoří v tom mp3tagu ten soubor CSV je nastaven na kodování utf-16

Celý kod je :

$filename(csv,utf-16)Title;Artist;Album;Track;Year;Length;Autor;Filename
$loop(%_filename_ext%)%title%;%artist%;%album%;%track%;%year%;%_length_seconds%;%composer%;%_filename_ext%
$loopend()build on

Když jsem tedy změnil při importu UTF-8 na UTF-16 tak je to OK a zapsalo se vše správně.

Děkuji ti moc, hodně si mi pomohl.

Chybný počet polí v CSV datech na řádku 2.
INSERT INTO `country`
VALUES (
'T\0i\0t\0l\0e\0', '\0A\0r\0t\0i\0s\0t\0', '\0A\0l\0b\0u\0m\0', '\0T\0r\0a\0c\0k\0', '\0Y\0e\0a\0r\0', '\0L\0e\0n\0g\0t\0h\0', '\0A\0u\0t\0o\0r\0', '\0F\0i\0l\0e\0n\0a\0m\0e\0'
)# Ovlivněn 1 řádek.

Doufám že nevadí že jsem to znovu otevřel.

Mám problém s tím zápisem.

Vytvořil jsem si formulář pro upload těch CSV do databáze vše funguje jak má až do doby kdy je v názvu písně čárka oddělující slovo. Pak to bere jako další sloupec což je chyba.

Existuje řešení aby jí to nebralo jako dlaší sloupec.
Už jen z toho důvodu že z mé sbírky asi 13000 skladeb obsahuje čárku v názvu skladby oddělující slovo asi 75% skladeb

Soubor který to posílá je zde:

<!DocType HTML>
<html>
<head>
	<meta charset="Windows-1250" />
	<title>Probíhá nahrávání alb</title>
</head>
<body>
<?php
include "settings.php";

if(isset($_POST['submit']) && !Empty($_FILES['fupload']['tmp_name']) ) {
	$data = File_Get_Contents($_FILES['fupload']['tmp_name']);
	$data = explode("\r\n",$data);
	$nahrano=0;
	foreach($data as $line) {
		$nahrano++;
		$cells = explode(",",$line);
		
		If($cells[1]=='Artist' || !isset($cells[1]) )
			continue;
		mysql_query("INSERT INTO `country`
			SET `Title` = '".mysql_real_escape_string($cells[0])."',
			 `Artist` = '".mysql_real_escape_string($cells[1])."',
			 `Album` = '".mysql_real_escape_string($cells[2])."',
			 `Track` = '".mysql_real_escape_string($cells[3])."',
			 `Year` = '".mysql_real_escape_string($cells[4])."',
			 `Length` = '".mysql_real_escape_string($cells[5])."',
			 `Autor` = '".mysql_real_escape_string($cells[6])."',
			 `Filename` = '".mysql_real_escape_string($cells[7])."'
		") or die('Máš v Query chybu ty pitomče!!<br>'.MySQL_Error());
	}
	echo "Konec ForEach<br>Nahráno: $nahrano řádků<br>";
}
else
	echo 'Není submit || soubor';
?>
</body>
</html>

Jen se ti snažil sdělit, že čárka jako oddělovač polí funguje pouze v případě, že čárka není uvnitř uvozovek. Pokud je uvnitř uvozovek, tak je součástí pole. To se dá řešit několika způsoby a naznačil ti, že dobře by se to řešilo pomocí regulárních výrazů.

Ten soubor co to zpracovává $cells = explode(",",$line); to rozhazuje do pole podle čárky, což je špatně. Ja mysql rozumím jako lidi v hospodě ekonomice. Ale napsat se to dá ruznejma zpusobama, například rozhození do pole podle regularního vyrazu umi funkce http://www.php.net/manual/en/function.preg-split.p hp - což technicky vzato je vymeneni pouze volani teto funkce.

Ale bych zkusil mozna jen toto : explode("\",\"",$line), přidat tam \"

Zpět do poradny Odpovědět na původní otázku Nahoru