daten in db schreiben! aus txt datei
Hendrik
- php
0 Juan0 Hendrik0 Vinzenz Mai0 Hendrik0 Vinzenz Mai0 Hendrik
0 Hendrik
0 Vinzenz Mai0 Hendrik
Hello again!
Habe das Problem, das ich den Inhalt der Datei immer nur in ein Feld der db-tabelle geschrieben bekomme! müsste das aber aufgeteilt haben! Hier is das skript!
$a_fileContents = file("dat/muh.txt");
$i=0;
while($i<count($a_fileContents))
{
$a_temp[] =$a_fileContents[$i];
if($i%11 == 0)
{
$query = "INSERT INTO schueler ( benutzername, kennwort, vorname, nachname, strasse, plz, ort, foto, berufsbezeichnung, telefon, erziehtelefon)
VALUES ('".$a_temp[0]."',
'".$a_temp[1]."',
'".$a_temp[2]."',
'".$a_temp[3]."',
'".$a_temp[4]."',
'".$a_temp[5]."',
'".$a_temp[6]."',
'".$a_temp[7]."',
'".$a_temp[8]."',
'".$a_temp[9]."',
'".$a_temp[10]."')";
mysql_query($query) or die(mysql_error());
unset($a_temp);
}
$i++;
}
Lösungsansetze oder Vorschläge bitte an mich ; )
Gruß Hendrik
Moin!
Habe das Problem, das ich den Inhalt der Datei immer nur in ein Feld der db-tabelle geschrieben bekomme! müsste das aber aufgeteilt haben! Hier is das skript!
$a_fileContents = file("dat/muh.txt");
$i=0;
while($i<count($a_fileContents))
{
$a_temp[] =$a_fileContents[$i];
wie sind denn die einzelnen Felder in der Datei von einander getrennt?
Vielleicht ist explode genau das, was du suchst.
MfG,
Juan
Hi! Getrennt sind die mit einem Semikolon!
Hallo Hendrik,
Hi! Getrennt sind die mit einem Semikolon!
könntest Du bitte einen Beispielabschnitt aus Deiner Textdatei posten?
Nach Deinem Ausgangsposting ging ich davon aus, dass die Datei in etwa wie folgt aussieht:
benutzername, kennwort, vorname, nachname, strasse, plz, ort, foto, berufsbezeichnung, telefon, erziehtelefon
#-----------------------------------------
otto
geheim
Otto
Normalverbraucher
Mustergasse
D-12345
Musterstadt
pfad/zum/foto
Musterschüler
01234/56789
09876/54321
petra
geheimer
Petra
Musterfrau
...
Nach diesem Posting vermute ich eher, dass Deine Daten so vorliegen:
#------------------------------------------------------
otto;geheim;Otto;Normalverbraucher; [...] ; 09876/54321
petra;geheimer;Petra [...]
Das zweite Format wäre wesentlich leichter zu verarbeiten als das erste. Aber ohne das Format Deiner Textdatei spielen wir hier Blindekuh.
Freundliche Grüße
Vinzenz
Hi!
Hast
#-------Neuer Proggi quellcode-----
$a_fileContents = file("dat/muh.txt");
$i=0;
while($i<count($a_fileContents))
{
$a_temp =$a_fileContents[$i];
$teile = explode(";", $a_temp);
if($i%11 == 0)
{
$query = "INSERT INTO schueler ( benutzername, kennwort, vorname, nachname, strasse, plz, ort, foto, berufsbezeichnung, telefon, erziehtelefon)
VALUES ('".$teile[0]."',
'".md5($teile[1])."',
'".$teile[2]."',
'".$teile[3]."',
'".$teile[4]."',
'".$teile[5]."',
'".$teile[6]."',
'".$teile[7]."',
'".$teile[8]."',
'".$teile[9]."',
'".$teile[10]."')";
mysql_query($query) or die(mysql_error());
unset($teile);
}
$i++;
}
#-------Format der Textdatei-------
hend;hend;hend;hend;hend 1;12345;hend;hend.gif;hend;12344;1234;
sebbo;sebbo;sebbo;sebbo;sebbo 1;12345;sebbo;sebbo.gif;sebbo;12344;1234;
Hallo Hendrik,
#-------Format der Textdatei-------
hend;hend;hend;hend;hend 1;12345;hend;hend.gif;hend;12344;1234;
sebbo;sebbo;sebbo;sebbo;sebbo 1;12345;sebbo;sebbo.gif;sebbo;12344;1234;
ok, das ist schön verarbeitbar (das Semikolon am Ende überflüssig, aber nicht schlimm).
#-------Neuer Proggi quellcode-----
$a_fileContents = file("dat/muh.txt");
$i=0;
while($i<count($a_fileContents))
Nein, nein, nein. Du hast eine wunderbare Datei, in der jede Zeile einen Datensatz repräsentiert. Du kannst Dir somit Deine Modulo-11-Geschichte sparen.
file() liest Deine Datei in ein Array. Du willst jede Zeile verarbeiten. Wunderbar, dafür gibt es foreach. Auf Deinen Schleifenzähler kannst Du ebenso verzichten.
$a_fileContents = file("dat/muh.txt");
# Hier bitte überprüfen, was [link:http://www.php.net/manual/de/function.file.php@title=file()] zurückliefert:
if ($a_fileContents === false) {
# irgendetwas ist schiefgegangen
# Nette Fehlermeldung ausgeben und Skript beenden.
die ("blabla");
# Du könntest Dir ein besseres Fehlerhandling überlegen
}
# Hier angelangt bedeutet: Datei erfolgreich eingelesen
foreach($a_fileContents as $zeile) {
# bei jedem Durchlauf steht eine Zeile Deiner Ausgangsdatei
# als Zeichenkette in der Variablen $zeil
# Verarbeite den Inhalt
}
Nutze auf geeignete Weise Multi-Row-Insert.
Freundliche Grüße
Vinzenz
Na Wonderbra! Nuckelt alles!
Hab ich nur noch ne Frage wegen dem Fehler den das Programm
mir ausgibt wenn ich keine Datei ausgewählt habe! Ich will nur das er meine echo "Fehlermeldung"; ausgibt wie bekomme ich das hin? gruß Hendrik
Wie kannst du denn meinen GESCHÜTZTEN Namen benutzen???
Der wahre Hendrik
Hallo Hendrik,
Habe das Problem, das ich den Inhalt der Datei immer nur in ein Feld der db-tabelle geschrieben bekomme! müsste das aber aufgeteilt haben! Hier is das skript!
das liegt an der Logik des Skriptes.
> $a_fileContents = file("dat/muh.txt");
# Handelt es sich hierbei um einzelne Einträge,
# 11 Zeilen in der Textdatei ergeben einen Datensatz?
# Eine Erläuterung des Aufbaus der Textdatei wäre sinnvoll.
# Ein kleines Schritt für Schritt-Debug:
> $i=0;
# $i hat den Wert 0
> while($i<count($a_fileContents))
# nehmen wir an, $a_fileContents sei größer 0
# zweite Runde, wir nehmen an der Abbruch sei noch nicht erreicht
> {
> $a_temp[] =$a_fileContents[$i];
# $a_temp[0] = $a_fileContents[0]
# 2. Runde: $a_temp[0] = $a_fileContents[1]
> if($i%11 == 0)
# Prüfung: 0 % 0 hat das Ergebnis 0, daher ist 0 == 0 wahr, gehe in den if-Zweig
# so bestimmt nicht gewollt ;-)
# 2. Runde: 1 % 1 ist 1, 1 == 0 ist falsch, überspringe if-Zweig
> {
> $query = "INSERT INTO schueler ( benutzername, kennwort, vorname, nachname, strasse, plz, ort, foto, berufsbezeichnung, telefon, erziehtelefon)
> VALUES ('".$a_temp[0]."', # da steht was drin
> '".$a_temp[1]."', # die gibt es gar nicht
# Hier solltest Du eine Notice bekommen
> '".$a_temp[2]."', # gibt es auch nicht
> '".$a_temp[3]."', # ...
> '".$a_temp[4]."',
> '".$a_temp[5]."',
> '".$a_temp[6]."',
> '".$a_temp[7]."',
> '".$a_temp[8]."',
> '".$a_temp[9]."',
> '".$a_temp[10]."')";
>
> mysql_query($query) or die(mysql_error());
# Ein gefüllter Wert + 10 Leerstrings werden in die DB eingefügt
> unset($a_temp);
# Wir löschen das Array
> }
> $i++;
# $i hat nun den Wert 1
# 2. Runde $i hat nun den Wert 2 [...]
> }
Ich vermute, Du testest nur mit einem Datensatz. In der zweiten Runde solltest Du einen kompletten Datensatz bekommen, wenn auch nicht mit den von Dir erwarteten Daten.
Es ist eine gute Idee, während der Entwicklung- und Debugphase mit [link:http://www.php.net/manual/de/function.error-reporting.php@title=error_reporting](E_ALL);
Dir alle Fehler, Warnungen und Notices anzeigen zu lassen.
Weiterhin wäre es eine gute Idee, alle INSERTS in einem einzigen Statement durchführen zu lassen, siehe MySQL-Handbuch, INSERT-Syntax. Bei MySQL ist es immer sinnvoll, die verwendete Version anzugeben, da die Fähigkeiten sich von Version zu Version dramatisch unterscheiden können.
Freundliche Grüße
Vinzenz
Danke schonmal bis jetzt für eure Hilfe!
Das mit dem Einfügen eines Datensatzes passt schonmal!
Nun ist die Frage wie ich es hinbekomme das er einen 2, 3, 3, etc. hinzufügt!
Mir ist es eigentlich gleich ob alle Daten hintereinander stehen
oder ob pro datensatz eine zeile benutzt wird!
Habt ihr da auch was was mir helfen könnte?
Gruß Hendrik