slaYer: Datei einlesen mit php und mysql anbindung

Hallo ich versuche seit längerer Zeit den Inhalt einer Datei mit PHP in eine Datenbak einzufügen...das will er aber nich so richtig machen!

<td>Schülerdaten:</td>
  <td><input name="datei" type="file" value="" /></td>
 </tr>
 <tr>
 <td></td>
  <td><br /><input name="datbe" type="submit" value="Best&auml;tigen" /></td>
 </tr>
<tr>
<td colspan="2"><br /><br /><center><h3>Schüler manuell hinzufügen</h3></center></td>
</tr>
<?php
if((!isset($_POST["datbe"])))
{
}
else
{
$handle = fopen("$datei", 'rb');
while(($Daten = fgetcsv($handle, "", ";") != FALSE))
{
    $AnzahlDerFelder = count($Daten);
    if(count($Daten)>=0)
 {
        $imp_records =
                    array(
                           'nachname'=>$Daten[0],
                           'vorname'=>$Daten[1],
                           'benutzername'=>$Daten[2],
                           'kennwort'=>$Daten[3],
                           'strasse'=>$Daten[4],
         'plz'=>$Daten[5],
         'ort'=>$Daten[6],
         'telefon'=>$Daten[7],
         'erziehtelefon'=>$Daten[8],
         'foto'=>$Daten[9],
         'berufsbezeichnung'=>$Daten[10],
         'klassenid'=>$Daten[11]);

$sql ="INSERT INTO schueler ( benutzername, kennwort, vorname, nachname, strasse, plz, ort, foto, berufsbezeichnung, telefon, erziehtelefon,                 klasse_id)
                         values
                               ('$Daten[0]',
                                '$Daten[1]',
                                '$Daten[2]',
                                '$Daten[3]',
                                '$Daten[4]',
        '$Daten[5]',
        '$Daten[6]',
        '$Daten[7]',
        '$Daten[8]',
        '$Daten[9]',
        '$Daten[10]',
        '$Daten[11]')";
   }
$ergebnis1=mysql_query($sql, $db);
fclose($handle);
}
}

Folgende Fehler werden mir hierbei ausgegeben:

Warning: fopen(muh.txt) [function.fopen]: failed to open stream: No such file or directory in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 44

Warning: fgetcsv() expects parameter 1 to be resource, boolean given in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 45

das betrifft also diesen beiden Zeilen:

$handle = fopen("$datei", 'rb');
while(($Daten = fgetcsv($handle, "", ";") != FALSE))

Ich möchte diese Datei einlesen....wenn es geht will ich auch noch mehrere Zeilen einlesen ...hab allerdings noch keine Vorstellung wie ich das hinbekommen soll :(

Ich hoffe auf eure Hilfe!
mfg slaYer

  1. Ich würde dir empfehlen eine Datenbank anstatt eine txt-Datei zu nehmen. Damit umgehst du auch das Problem das nie mehrere Gleichzeitig in die Datei schreiben können.
    Nebenbei hat MySQL ganz bequeme Möglichkeiten zum Einfügen, Ändern und Löschen.
    Grüße, Matze

    1. Ich würde dir empfehlen eine Datenbank anstatt eine txt-Datei zu nehmen. Damit umgehst du auch das Problem das nie mehrere Gleichzeitig in die Datei schreiben können.
      Nebenbei hat MySQL ganz bequeme Möglichkeiten zum Einfügen, Ändern und Löschen.
      Grüße, Matze

      Das Problem is das die verwendung einer txt-datei leider vorgeschrieben ist :/ Ausserdem soll das auslesen nur zum einfügen von datensätzen dienen, mehr nicht!

      gruß slaYer

      1. Mittlerweile habe ich das ganze auf einen Fehler reduzieren können!

        Warning: fgetcsv(): 5 is not a valid stream resource in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 45

        Hoffe mir kann jemand dabei helfen!

        1. hi,

          Mittlerweile habe ich das ganze auf einen Fehler reduzieren können!

          Und wie sah diese "Reduzierung" aus?

          Warning: fgetcsv(): 5 is not a valid stream resource in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 45

          Du versuchst, mit fgetcsv zu lesen, ohne einen gültigen Dateihandle vorliegen zu haben.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. an der endung der datei liegt es aber nicht, falls du das meinst!
            bin imo echt mit meinem latein am ende :/ haste icq oder sowas das du mir beistehen könntest?

            mfg slaYer

            1. Hallo!

              an der endung der datei liegt es aber nicht, falls du das meinst!

              Der Dateihandle hat nix mit der Extension zu tun. Den Dateihandle bekommst du mit fopen. Wie öffnest du die CSV Datei?

              mfg
                frafu

              1. Hallo!

                Der Dateihandle hat nix mit der Extension zu tun. Den Dateihandle bekommst du mit fopen. Wie öffnest du die CSV Datei?

                Habs mir jetzt erst angesehen.

                $handle = fopen("$datei", 'rb');
                Die Hochkommas in denen $datei steht, kannst du dir übrigens sparen.
                Was steht in $datei?
                Hänge danach doch mal folgendes nach dem fopen an:

                if(false===$handle)
                  echo "Kann Datei $datei nicht öffnen";
                else
                  echo "$datei erfolgreich geöffnet";

                mfg
                  frafu

              2. Hallo!

                an der endung der datei liegt es aber nicht, falls du das meinst!

                Der Dateihandle hat nix mit der Extension zu tun. Den Dateihandle bekommst du mit fopen. Wie öffnest du die CSV Datei?

                mfg
                  frafu

                Also die Datei öffne ich über

                <td>Schülerdaten:</td>
                <td><input  name="datei" type="file" value="" /></td>

                daher hole ich mir den Dateinamen den ich dann später aufrufe!

                Das geht doch so oder?!

                Gruß slaYer

                1. hi,

                  Also die Datei öffne ich über

                  <td>Schülerdaten:</td>
                  <td><input  name="datei" type="file" value="" /></td>

                  Damit führst du einen Dateiupload auf den Server durch.
                  Ist es das, was du willst?

                  daher hole ich mir den Dateinamen den ich dann später aufrufe!

                  Das geht doch so oder?!

                  Jein.
                  Du solltest - falls du wirklich einen Dateiupload machen willst - die Datei zunächst mal aus dem temporären Upload-Verzeichnis an ihren Zielort schieben.
                  http://www.php.net/manual/de/features.file-upload.php gäbe weitere Auskunft - aber ich habe echte Zweifel, ob es das ist, was du willst.

                  gruß,
                  wahsaga

                  --
                  /voodoo.css:
                  #GeorgeWBush { position:absolute; bottom:-6ft; }
                  1. Also bei der Sache die ich mache soll es so sein das eine Datei via USB-Stick in den Ordner dat geschoben werden soll die von dem ordner aus will ich die Datei dann auswählen können und dann den Datensatz in die DB einfügen lassen! Das ist es was ich will! Es ist so das ich in meinem
                    Fall Server und User bin, da ich das ja mit xampp emuliere, später soll es aber schon so sein, das ich mit dem clienten auf die seiten die auf dem server liegen zugreife! hoffe das ich nicht zu verwirrend! Gruß Hendrik

                2. Also die Datei öffne ich über

                  <td>Schülerdaten:</td>
                  <td><input  name="datei" type="file" value="" /></td>

                  daher hole ich mir den Dateinamen den ich dann später aufrufe!

                  Das geht doch so oder?!

                  Gruß slaYer

                  Den Namen kriegst du mit:

                  $datei[name] vom Inputfeld

                  Grüße, Matze

      2. Also bei der Sache die ich mache soll es so sein das
        eine Datei via USB-Stick in den Ordner dat geschoben werden soll

        move_uploaded_file($bild,"Ordner und Dateiname"); #  $bild kommt aus einem Input type file

        die von dem ordner aus will ich die Datei dann auswählen
        können und dann den Datensatz in die DB einfügen lassen!

        Blöde Frage aber warum nimmst du dafür nicht phpmyadmin?

        später soll es aber schon so sein, das ich mit dem clienten
        auf die seiten die auf dem server liegen zugreife!

        $datei = fopen("datei.txt","r+");     # öffnen
        $datei = fgets($datei);               # einlesen
        $dateineu = "neuer Inhalt"            # Inhalt ändern
        rewind($datei);                       # zum Dateianfang
        fwrite($datei, $dateineu);            # schreiben
        fclose($datei);                       #schließen

        Klingt simpel aber ich weiß auch nicht genau was du machen willst.
        Grüße, Matze

        1. Hello,

          damit sich hier nichts einschleicht:

          $datei = fopen("datei.txt","rb+");    # öffnen

          $ok    = flock($datei,LOCK_EX);       # Datei _exclusiv_ sperren
            $daten = fread($datei,$filesize);     # einlesen

          $daten = aendern($daten);             # Inhalt ändern
          rewind($datei);                       # zum Dateianfang
          fwrite($datei, $daten);               # schreiben

          ftruncate($datei,strlen($daten));     # Länge der Datei anpassen

          fclose($datei);                       # schließen und damit entsperren

          Der Lese- und der Schreibvorgang müssen durch eine Sperre 'gebunden' werden.
          http://de2.php.net/manual/de/function.flock.php

          Nach dem Schreiben des Inhaltes muss die Länge der Datei wieder angepasst werden, wenn der neue Inhalt kürzer ist, als der alte.

          Es ist besser, die Öffnung im Modus 'rb+' durchzuführen.

          Außerdem sollte man auch die Ergenisse von rewind() oder fseek(), fwrite(), ftruncate() abfragen und auswerten.

          Harzliche Grüße vom Berg
          http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau

  2. Hallo

    [...]

    $handle = fopen("$datei", 'rb');

    Warum Anführungszeichen um die Variable. Welchen Sinn siehst Du darin?

    while(($Daten = fgetcsv($handle, "", ";") != FALSE))

    Sehr schön, sehr falsch. Du überprüfst überhaupt nicht, ob Dein fopen() erfolgreich war. Dass dies nicht der Fall ist, sagt Dir Deine Fehlermeldung:

    Warning: fopen(muh.txt) [function.fopen]: failed to open stream: No such file or directory in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 44

    Daraus resultiert der Folgefehler:

    Warning: fgetcsv() expects parameter 1 to be resource, boolean given in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 45

    Öffne die Datei
    Wenn das nicht funktioniert hat
        Gebe eine entsprechende Fehlermeldung aus
        Beende die Verarbeitung sinnvoll
    Ende Wenn

    Wenn Du bis hierhin kommst,

    Solange das Einlesen eines Datensates aus der Datei funktioniert
        Verarbeite den Datensatz
    Ende Solange

    Freundliche Grüße

    Vinzenz

  3. $handle = fopen("dat/$datei", "r");
    while(($Daten = fgetcsv($handle, "", ";") != FALSE))
    {
        $AnzahlDerFelder = count($Daten);
        if(count($Daten)>=0)

    So sieht das im moment aus und nun gibt er nur noch den fehler aus

    Warning: fgetcsv(): 5 is not a valid stream resource in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 45

    Damit is die 2. Zeile gemeint!

    Ich hoffe auf eure Hilfe!
    mfg slaYer

    1. Hallo

      $handle = fopen("dat/$datei", "r");

      Du hast noch nichts verbessert.
      Bitte überprüfe jetzt, ob fopen() erfolgreich war.
      Wenn nein
          Gebe eine ordentliche Fehlermeldung aus
          Beende diesen Teil der Verarbeitung auf nette Weise
      Ende Wenn

      Jetzt kannst Du
      Solange Du Datensätze aus der Datei lesen kannst ...

      while(($Daten = fgetcsv($handle, "", ";") != FALSE))
      {

      ... diese verarbeiten

      $AnzahlDerFelder = count($Daten);
          if(count($Daten)>=0)

      Die folgende Warning ist kein Wunder, aber das hatten wahsaga und ich Dir bereits gesagt:

      Warning: fgetcsv(): 5 is not a valid stream resource in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 45

      Freundliche Grüße

      Vinzenz

    2. Hello,

      while(($Daten = fgetcsv($handle, "", ";") != FALSE))

      while(($Daten = fgetcsv($handle, "", ";") !== FALSE))

      Nimm lieber den "nichjt identisch"-Operator.
      Schließlich könnte in einer CSV-Datei auch mal eine Leerzeile enthalten sein.
      Du solltest außerdem das vollständige Satzformat (Anzahl der Felder) überprüfen, bevor Du den Inhalt der Zeile verwendest.

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau