Hendrik: daten in db schreiben! aus txt datei

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

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

    1. Hi! Getrennt sind die mit einem Semikolon!

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

        1. 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;

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

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

          2. Wie kannst du denn meinen GESCHÜTZTEN Namen benutzen???

            Der wahre Hendrik

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

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