Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: CLH - Hoerspielforum und mehr. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Donnerstag, 7. Januar 2010, 15:35

CSV to MySQL

Vielleicht kann mir hier ja jemand helfen. Die Technikforen nehmen mich entweder nicht ernst oder mein Problem ist unter deren Würde ;)

Ich pflege aktuell eine Seite, die Daten einer CSV in eine MySQL-DB einträgt. Der Vorgang läuft über eine php-Seite, die die jeweiligen Inhalte Zeile für Zeile als jeweiligen Datensatz einträgt. Aus irgendeinem Grund werden aber nicht alle Datensätze übertragen, sondern immer wieder mal einer oder zwei einfach ausgelassen. Es handelt sich immer um die gleichen Datensätze die fehlen, was mich vermuten ließ Sonderzeichen oder ähnliches darin zu haben, die die Zeile unbrauchbar machen. Dummerweise erkenne ich keinen signifikanten Unterschied zwischen den übertragenen und nicht übertragenen Daten in der originalen CSV. Ich weiß so langsam nicht mehr wonach ich suchen muss. Die DB ist mit ca. 100 Datensätzen glücklicherweise nicht so groß, aber um so mehr fallen 15 fehlende auf.

Drehwurm

Fortgeschrittener

Beiträge: 208

Wohnort: südl. v. Nbg

  • Nachricht senden

2

Donnerstag, 7. Januar 2010, 16:37

Bei der Übertragung meiner CSV Datenbank über eine php Seite hat es immer dann Probleme gegeben, wenn ein Datensatz ein Hochkomma enthalten hat.
Gruß

Martin
_______________

Die Welt ist eine Scheibe ...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Drehwurm« (7. Januar 2010, 16:38)


leocat

Königin von Hukapetapank

Beiträge: 2 863

Wohnort: Auch fast ganz oben

Beruf: Buchhändlerin

  • Nachricht senden

3

Donnerstag, 7. Januar 2010, 16:43

Genau, damit hatten wir auf unserer früheren Firmen-HP (Joomla CMS) auch Probleme: Hochkommas. Ich hab mir dann so beholfen, dass ich (nicht ganz korrekt, aber in Notwehr ;-) ) die Hochkommas durch Apostrophen ersetzt habe - also ´ statt ' . Gar nicht schön, aber geht: was will man machen? Mittlerweile hat sich das CMS auch an Hochkommas gewöhnt :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »leocat« (7. Januar 2010, 16:45)


DRY

Aggro-Tim & Killer-Klößchen

Beiträge: 2 100

Wohnort: Bayern / MM

Beruf: Schüler

  • Nachricht senden

4

Donnerstag, 7. Januar 2010, 19:48

Das Problem mit Hochkommas dürfte damit zu tun haben, dass diese vor dem Eintragen nicht escaped wurden. Evtl. kannst du eine entsprechende PHP-Funktion vor dem Transfer auf die alten Datensätze anwenden, welche derartige Probleme behebt.

Wenn du ausgelesenen Datensätze testweise mal ausgibst, fehlen dann die 15 Stück auch oder nicht?
Falls du auf der Suche nach weiteren News rund ums Hörspiel bist, schau doch einfach mal auf www.hoerspiel3.de vorbei.

5

Freitag, 8. Januar 2010, 09:20

Erstmal danke für die Antworten. Hochkommas waren auch mein erster Gedanke, aber "leider" wurde nirgendwo eines verwendet.

@DRY
Ich verstehe nicht genau was du meinst. Ich habe eine CSV mit 96 Datensätzen, mache einen Übertrag per php, die mir keinen Fehler ausgibt und am Ende sind 81 Datensätze in der MySQL angekommen :) An welchem Punkt soll ich eine Testausgabe machen?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Kabukichan« (8. Januar 2010, 09:20)


DRY

Aggro-Tim & Killer-Klößchen

Beiträge: 2 100

Wohnort: Bayern / MM

Beruf: Schüler

  • Nachricht senden

6

Freitag, 8. Januar 2010, 10:33

@DRY
Ich verstehe nicht genau was du meinst. Ich habe eine CSV mit 96 Datensätzen, mache einen Übertrag per php, die mir keinen Fehler ausgibt und am Ende sind 81 Datensätze in der MySQL angekommen :) An welchem Punkt soll ich eine Testausgabe machen?
Ich kenne dein Skript zwar nicht genau, aber du musst die Datensätze ja in dem PHP-Skript irgendwo zwischenspeichern, in Variablen oder einem Array. Dieses müsstest du ja eigentlich vor dem Schreiben dieser mit einem MySQL-Befehl mit "echo" ausgeben können.

Somit kannst du zumindest herausfinden, ob der Fehler schon beim Auslesen auftritt oder erst beim Schreiben in die MySQL-Datenbank.
Falls du auf der Suche nach weiteren News rund ums Hörspiel bist, schau doch einfach mal auf www.hoerspiel3.de vorbei.

Streifenkarl

Kaffeemühlendieb

Beiträge: 2 849

Wohnort: Winzenbutzhausen

  • Nachricht senden

7

Freitag, 8. Januar 2010, 11:18

Versuch das mal: (ist aber nicht durchgetestet!)

<?php

// Systemeinstellungen
$id = "dieid"; //id
$pw = "fksggg30kvk3"; // passwort
$host = "homer2.tit.de"; //hostname
$database = "datenbank1"; //datenbankname
$table = "tabelle1"; //tabellenname der db
$datei = "import.csv"; //name der text/csv-datei auf dem server
// Einstellungen Ende



if(!$table || !$datei) die("Die Quelle oder das Ziel sind unbekannt");
// Verbindung mit dem Server und einer Datenbank
$conn_id = mysql_pconnect($host,$id,$pw) or die("Verbindung konnte nicht hergestellt werden");
mysql_select_db($database) or die("Die Datenbank konnte nicht gefunden werden");

// ermitteln Namen und Menge der Spalten
$result = mysql_list_fields($database,$table);
for($i=0;$i<mysql_num_fields($result);$i++) {
$spalten .= mysql_field_name($result,$i).",";
}
$anzahl = mysql_num_fields($result);
$spalten = trim(substr($spalten,0,-1));

// leert die Tabelle
echo "Leere DB-Tabelle....<br><br>";
mysql_query("DELETE FROM $table") or die(mysql_error());

// liest die Datei ab und überträgt sie zeilenweise in die Tabelle
$fp = fopen($datei,"r"); unset($i);
while(!feof($fp)) {
$zeile = fgets($fp,1024);

//einfache und dplte gänsefüßchen entfernen
$zeile=str_replace("'","",$zeile);
$zeile=str_replace(chr(34),"",$zeile);

//als feldtrenner wird ein semikolon vorausgesetzt, ansonsten hinter dem explode ein komma anstelle des ";" setzen
echo "Anzahl Spalten in Zeile: ".count(explode(";",$zeile))."<br>";
echo "Anzahl Spalten in DB: ".$anzahl."<br>";

$zaehlmal=0;
$zeileneu="";
$arr3 = explode(";",$zeile);
$fehler="nein";

foreach($arr3 as $key => $value_alt)
{
//unnötige leerzeichen am anfang und ende entfernen
$valuetrim=trim($value_alt);
$zeileneu=$zeileneu.";".$valuetrim;
}

$laenge=strlen($zeileneu);
$zeile=substr($zeileneu,1,$laenge);

$zeile = "'".str_replace(";","','",$zeile)."'";

echo "Anzahl Spalten in Zeile: ".count(explode(",",$zeile))."<br>";
echo "Anzahl Spalten in DB: ".$anzahl."<br><br><br>";

//eintrag in die db...
mysql_query("INSERT INTO $table ($spalten) VALUES ($zeile)") or die(mysql_error());
echo "<br>Eingefügte Zeilen: ".$i++."<br>";

//verbindung schließen
}
fclose($fp);

echo "Import abgeschlossen am ".date("d.m.Y").", um ".date("H:i").".<p></p>";
?>

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Streifenkarl« (8. Januar 2010, 11:21)


8

Dienstag, 12. Januar 2010, 12:19

Danke, das hilft mir zumindest schon mal weiter. Ich sage Bescheid, wenn das Problem gelöst ist :)