csv import problem

DiDiJo

Erfahrenes Mitglied
hey leute ...

ich habe ne Online Kunden Verwaltung gebastelt in der Leute ihre eigenen Kunden eintragen und auch per CSV Datei importieren können.

ichhabe für die kunden eine Musterdatei angelegt die Sie befüllen können, um Ihre Daten zu importieren zu können. Soweit kein Problem.

Die Struktur der csv sieht übrigens so aus:
Code:
anrede1;titel1;vorname1;nachname1;anrede2;titel2;vorname2; (etc....)

Und so lese ich die Datei ein

PHP:
	function csvToSql($csv,$ziel) {
		$array = getColumns($ziel);
		$zeile = 1;
		$error = 0;
		$dateizeiger = fopen($_SERVER['DOCUMENT_ROOT'].'/uploads/csv/'.$csv, "r");
		while(($daten = fgetcsv($dateizeiger, 130000, ";")) !== FALSE){	
			if ($zeile >= 2) {
				foreach ($daten as $cnt => $value) $daten[$cnt] = "'".addslashes($value)."'";	
				if ($ziel == 'kunden') $sql = "INSERT INTO kunden (`uid`,`regDate`,`".implode("`,`",$array)."`,`status`) VALUES ('$_SESSION[uid]','".date("Y-m-d")."',".implode(",",$daten).",'1')";	
				if (!mysql_query($sql))	{
					#echo '<p style="color:red">'.$sql.'</p>';
					$error++;
				} #else echo '<p style="color:green">'.$sql.'</p>';
			}			
			$zeile++;
		}
		fclose($dateizeiger);
		unlink($_SERVER['DOCUMENT_ROOT'].'/uploads/csv/'.$csv);
		if ($error == 0) return "<span class='success'>Sie haben erfolgreich Ihre Kundenliste importiert</span>";
		else return "<span class='message'>Beim Importieren der Kundenliste ist ein Fehler aufgetreten</span>";
	}

das Funktioniert auch wunderbar ... allerdings werden Felder in denen ein Sonderzeichen vorkommt einfach abgeschitten.

kleines Beispiel:

in dem Feld "Ort" steht "Köln" ... in der Datenbank kommt an "K" oder bei name steht 'Klüser' und in die Datenbank wird 'Kl' geschrieben ... woran liegt das und falls es an der Kodierung der Datei leiegn sollte ... wie kann ich meine Funktion so umschreiben, dass die Funktion selber den 'Input' umkodiert oder nicht ?
 
Ich weiß nicht ob das System auch mit ae oe und ue auskommt?
Dann könnte man ja einfach str_replace zur Umformatierung verwenden.

Ansonsten gibt es ja noch mehrere andere Möglichkeiten, Umlaute in diverse Formate umzucodieren.

Oder man liest sie p.ex als "[ae]" ein und macht dann bei der Abfrage daraus wieder ein ä.

Vielleicht liegt auch bei der Datenbank eine falsche Bezeichung der Tabellenfelder vor? Eine die keine Umlaute akzeptiert?
 
also alle zeichen einzelken durchzugehen und durch ae zu erzetzen is ja wohl das unprofessionellste was man machen kann .... ich will gar nicht wissen wie viele fehler da raus kommen ....

p.s. decodiere ich vorher über denb windows-editor die die datei in utf-8 dann klappt alles ... da aber ca. 99 % aller menschen dateuien immernoch als ANSI speichern fliegt bei mir das ganze system auseinander ....
 
Ich halte eine automatisierte Umkodierung von Umlauten für äußerst sinnvoll und ganz und gar nicht unprofessionell.

Natürlich kommt es im wesentlichen auf den Kontext an - aber gerade bei Internationalen Systemen kann ich mir eine derartige Umformulierung gut vorstellen. Umlaute können einen Haufen Probleme mit sich bringen.
 
Zurück