Login-Abfrage über txt-Datei

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Login-Abfrage über txt-Datei

    Hallo ihr Lieben,
    ich habe ein Formular geschrieben, indem der Benutzername in einer externen txt-Datei gespeichert wird. Im weiteren Schritt möchte ich eine Funktion schreiben, die den Nutzernamen als Parameter übergeben bekommt und als Ergebnis ein "true" für Nutzer existiert oder "false" für Nutzer existiert nicht zurückgeben wird. Außerdem habe ich vorher einen Zeilenumbruch eingefügt, der an der Stelle dann entfernt werden müsste.

    Leider waren alle Versuche, solch eine Funktion zu schreiben, ohne Erfolg.

    Mein bisheriges Skript:

    <form method="post" action="uebung4.php">
    <input name="benutzername" size="10" />
    <input type="submit" name="namenSenden" value="Benutzernamen speichern" />

    </form>

    <?php

    if(isset($_POST['benutzername'])) $benutzername = $_POST['benutzername']; else $benutzername="";

    $ausgabe="\n".$benutzername;

    $datei=fopen("benutzernamen.txt","a") ;

    $output=fwrite($datei,$ausgabe);
    fclose($datei);


    $zeilenArray = file('benutzernamen.txt');

    //Ausgeben des Arrays mit einer foreach Schleife
    foreach ($zeilenArray as $zeilenNummer => $zeile) {
    echo "Benutzer: <b>".$zeilenNummer."</b> : " . $zeile . "<br>\n";

    }

    ?>

    Ich wäre euch bei hilfreichen Antworten sehr dankbar.

    Liebe Grüße

  • #2
    Was ist jetzt die Frage?

    Du solltest übrigens das EVA-Prinzip einhalten, also Verarbeitungscode nicht mit HTML-Ausgabe vermischen. Die Verarbeitung (Dateioperationen, Datenbankzugriffe, Berechnungen, etc.) haben vor der HTML-Ausgabe stattzufinden.

    Kommentar


    • #3
      Laut meinem Prof, sollen wir alles in eine Datei schreiben :/ .
      Meine Frage ist, wie ich die txt-Datei danach überprüfe, ob der eingetragene Benutzername vorhanden ist. Dies soll mit true und false übergeben werden.
      Ich habe jetzt folgenden Ansatz:
      <?php

      $datei=fopen("benutzernamen.txt","r") ;
      $benutzername = array($_POST['benutzername']);
      if (in_array($_POST['benutzername'],$benutzername)) {
      echo "Nutzer enthalten";
      }
      fclose($datei);

      ?>

      Allerdings ist das noch unvollständig und es ist kein true bzw false enthalten.

      Kommentar


      • #4
        Zitat von Hananananan Beitrag anzeigen
        Laut meinem Prof, sollen wir alles in eine Datei schreiben :/ .
        Das kannst du ja machen. Trotzdem solltest du das EVA-Prinzip einhalten.

        Zitat von Hananananan Beitrag anzeigen
        Meine Frage ist, wie ich die txt-Datei danach überprüfe, ob der eingetragene Benutzername vorhanden ist. Dies soll mit true und false übergeben werden.
        Ich habe jetzt folgenden Ansatz:
        <?php

        $datei=fopen("benutzernamen.txt","r") ;
        $benutzername = array($_POST['benutzername']);
        if (in_array($_POST['benutzername'],$benutzername)) {
        echo "Nutzer enthalten";
        }
        fclose($datei);

        ?>

        Allerdings ist das noch unvollständig und es ist kein true bzw false enthalten.
        Beschreibe mal jede Programmzeile, was dort passiert.

        Kommentar


        • #5
          ?php

          $datei=fopen("benutzernamen.txt","r") ; Datei wird geöffnet
          $benutzername = array($_POST['benutzername']); der eingetragene Benutzername ist in der Variable $benutzername verpackt
          if (in_array($_POST['benutzername'],$benutzername)) {
          echo "Nutzer enthalten"; wenn der eingetragene Benutzername in der txt.Datei steht, gebe aus "Nutzer enthalten"
          }
          fclose($datei); Datei wird geschlossen

          ?>


          Der Code ist bestimmt fehlerhaft, denn das Echo steht die ganze Zeit da, auch wenn ein anderer Benutzername eingetragen wird (trotz else-Anweisung).

          Kommentar


          • #6
            Du liest nirgendwo den Benutzernamen aus der Datei aus. Du vergleichst nur den eingegebenen Benutzernamen mit dem eingegebenen Benutzernamen, und das muss logischerweise immer der gleiche sein.

            Kommentar


            • #7
              Stimmt. Ich hab es so versucht :

              <?php

              $datei=fopen("benutzernamen.txt","r") ;
              while (!feof($datei))
              {
              $inhalt = fgets ($datei, 1000);

              echo "Nutzer enthalten";

              }



              fclose($datei);

              ?>

              Aber so wird das echo mehrmals hintereinander ausgegeben.
              Kannst du mir auf die Sprünge helfen?

              Kommentar


              • #8
                Wie sind die Benutzernamen in der Datei überhaupt gespeichert?

                Kommentar


                • #9
                  die Namen die ins Feld eingetragen werden, werden durch diese Funktion in die txt Datei gespeichert.
                  $datei=fopen("benutzernamen.txt","a") ;

                  $output=fwrite($datei,$ausgabe);
                  fclose($datei);

                  Die txt-Datei ist anfangs leer, also bevor man irgendeinen Namen einträgt.

                  du kannst dir hier die Ausgabe unter Teil 4 anschauen
                  http://hanan.bplaced.net/uebung4.php
                  Zuletzt geändert von Hananananan; 20.06.2015, 20:55.

                  Kommentar


                  • #10
                    Das beantwortet meine Frage nicht. Was in $ausgabe steht, könnt ich höchstens raten.

                    Also, mit welcher Struktur wird die Textdatei angelegt?

                    Kommentar


                    • #11
                      Das ist der komplette Code. Ich hoffe das beantwortet dir deine Frage.

                      <h3>3. Teil - Benutzernamen speichern</h3>

                      <form method="post" action="uebung4.php">
                      <input name="benutzername" size="10" />
                      <input type="submit" name="namenSenden" value="Benutzernamen speichern" />

                      </form>

                      <?php

                      if(isset($_POST['benutzername'])) $benutzername = $_POST['benutzername']; else $benutzername="";

                      $ausgabe="\n".$benutzername;

                      $datei=fopen("benutzernamen.txt","a") ;

                      $output=fwrite($datei,$ausgabe);
                      fclose($datei);


                      $zeilenArray = file('benutzernamen.txt');

                      //Ausgeben des Arrays mit einer foreach Schleife
                      foreach ($zeilenArray as $zeilenNummer => $zeile) {
                      echo "Benutzer: <b>".$zeilenNummer."</b> : " . $zeile . "<br>\n";

                      }

                      ?>


                      <h3>4. Teil - Login</h3>


                      <form method="post" action="uebung4.php">
                      <input name="benutzername" size="10" />
                      <input type="submit" name="namenSenden" value="Benutzernamen speichern" />

                      </form>

                      <?php

                      $datei=fopen("benutzernamen.txt","r") ;
                      for ($i = 0; $i < count($datei); $i++)
                      {
                      echo "Nutzer enthalten";
                      }



                      fclose($datei);

                      ?>

                      Kommentar


                      • #12
                        Warum verwendest du bei der Ausgabe der Benutzernamen file(), aber bei der Prüfung nicht?

                        Du hältst übrigens immer noch nicht das EVA-Prinzip ein. Dateioperationen gehören vor die HTML-Ausgabe.

                        Kommentar


                        • #13
                          file funktioniert nicht.
                          Ich würde gerne erst mein Problem lösen, bevor ich mich an die Feinheiten ran mache. Das ist vorerst nicht von Priorität.

                          Also, hast du eine Lösung für mich? Mir wurde der Tipp gegeben, die txt mittels in_array auszulesen, und die Bedingung dann mit einer for-Schleife auszuführen. Leider klappts bei mir nicht.

                          Kommentar


                          • #14
                            Zitat von Hananananan Beitrag anzeigen
                            file funktioniert nicht.
                            "funktioniert nicht" ist keine Fehlerbeschreibung.

                            Kommentar


                            • #15
                              und das ist keine Antwort auf meine Frage.

                              Kommentar

                              Lädt...
                              X