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

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
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
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… nový
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

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>

Tak nemuzes to delat podle čárky žejo ;) Musíš to dělat podle regulerního výrazu který to dělí na uvozovky, něco, uvozovky, čárka + bere v potaz esape sekvenci pro uvozovky..

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ů.

ne chyba je v tom, ze to delis na zakladne carky, coz je spatny algoritmus, mas to delit minimaln na zaklade carky, která neni uzavrena v uvozovkách a i to je spatny algoritmus, presto podle mne zafunguje na vetisnu radku.

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 \"

no ale ted ti to nepujde pokud to bude osahovat strednik. To jsi mohl rovnou udelat "sloupecA"@,@"SloupecB" a $cells = explode("@,@",$line); Tohle ale zase nezafunguje pokud text bude obsahovat tuhle @,@ kombinaci znaku.

13000 ::) myslel jsem ze Powerwolf má 4 CD, Skyfire také, Wintersun 1, Norhland 1 Crimfall 2, tzn. 12 alb, všechny ostatní alba jsou zbytečná 8-)

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