Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Textdatei mit Formular durchsuchen und bestimmte Zeile ausgeben

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Textdatei mit Formular durchsuchen und bestimmte Zeile ausgeben

    Hallo,
    vorab bin ich froh das es dieses Forum gibt und hoffe das mir hier geholfen werden kann, da ich Anfänger bin.

    Folgende Aufgabe habe ich mir gestellt:

    - es wird eine .TXT erzeugt die dann auf den Server hochgeladen wird
    - auf der Webseite gibt es ein Formular wo eine Bearbeitungsnummer eingegeben wird
    - diese soll dann in der TXT gesucht werden
    - wenn diese gefunden wurde soll eine Ausgabe erscheinen mit der jeweiligen Zeile
    - wenn diese nicht gefunden wird soll eine Fehlermeldung ercheinen
    - Wenn der User die Webseite verlässt soll die Ausgabe gelöscht werden

    Mein aktueller Arbeitsfortschritt:
    Er besteht aus Codeschnipseln die ich im Netz gefunden habe, ich habe ein Formular erstellt das die Abfrage regeln soll, die Ausgabe ist durch einen Style definiert, ich nutze eine explode Abfrage mit einem Pipe als Trenner.

    Meine Probleme:
    Wenn die PHP Datei aufgerufen wird wird sofort alles aus der TXT angezeigt und das Formular funktioniert nicht.

    Hier ist mein Code für die PHP Datei (besteht nur aus einer Datei das Script):

    PHP-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html><head><title>Bearbeitungsstatus</title>
    <style type="text/css">
    table { width:60%; }
    .Titel { width:350px; font-size:14px; color:#000000; background-color:#EFBC0B; }
    .Titelrechts { width:100px; font-size:14px; color:#000000; background-color:#EFBC0B; }
    .Titelrechtseins { width:130px; font-size:14px; color:#000000; background-color:#EFBC0B; }
    .Titelbearbeitung { width:110px; font-size:14px; color:#000000; background-color:#EFBC0B; }
    .Inhalt { font-size:14px; color:#000000; background-color:#ffffff; vertical-align:top; }
    .Inhaltrechts { font-size:14px; color:#000000; background-color:#ffffff; vertical-align:top; }
    .Inhaltbearbeitung { font-size:14px; color:#000000; background-color:#ffffff; vertical-align:top; }
    .Text { font-family:Arial,Helvetica,sans-serif; font-size:14px; color:#000000; }
    </style>
    </head><body>
    <form action="<? echo $_SERVER['PHP_SELF'];?>" method = "post">
     <p>Geben Sie hier Ihren Statuscode ein: <input type="text" name="$ergebnis" /><input type = "submit" name = "gesendet" value="ok"></p>
    </form>
    <?php
    $datei 
    file("user.txt");

    foreach(
    $datei AS $ergebnis){

        
    $array explode('|'$ergebnis);
        
    $abschnitt0 $array[0];
        
    $abschnitt1 $array[1];
        
    $abschnitt2 $array[2];
        
    $abschnitt3 $array[3];




    if (
    $_POST["gesendet"] == "ok")
    {
          echo 
    "<table>
                   <tr>
                   <td class=\"Titelbearbeitung\"><b>Ihre Abhol ID:</b></td>
                    <td class=\"Titelrechts\"><b>Auftrag vom:</b></td>
                     <td class=\"Titelrechtseins\"><b>Aktueller Status</b></td>
                     <td class=\"Titel\"><b>Information</b></td>
                   </tr>
                   <tr>
                   <td class=\"Inhaltbearbeitung\"><b>
    $abschnitt0</b></td>
                    <td class=\"Inhalt\">
    $abschnitt1</td>
                     <td class=\"Inhalt\">
    $abschnitt2</td>
                     <td class=\"Inhalt\">
    $abschnitt3</td>
                   </tr>
          </table>"
    ;         // Code wurde gefunden
    }else{                              // Code nicht gefunden
          // Fehler
               
    echo "<table>
                       <tr>
                       <td class=\"Titelbearbeitung\">Falsche Abhol ID</td>
                       </tr>
          </table>"
    ;
         }}

    ?>
    So sieht die user.txt aus:

    PHP-Code:
    AGNI6|29.04.2014|in Bearbeitung|Ihr Auftrag ist voraussichtlich am 25.09.2014 fertig
    Ich hoffe das ich mich verständlich ausgedrückt habe und hoffe das Ihr mir weiterhelfen könnt.


  • #2
    Wo hast du denn das ausgegraben, das ist ja Uralt. Dein $ergebnis findest du in $_POST['ergebnis']. Du musst das erst in dein $ergebnis zuweisen, das ist schon lange überholt und hoch unsicher: http://php.net/manual/de/security.globals.php

    Mach zu Beginn deines Scriptes mal das rein und schau was so an Notices kommt, die auch mal beheben.

    PHP-Code:
    error_reporting(-1);
    ini_set('display_errors'1); 
    Hier weiteres zur Fromularverarbeitung und schau dir auch die E-V-A an:
    http://php-de.github.io/#form
    http://php-de.github.io/jumpto/eva-prinzip/

    Und PHP_SELF nicht verwenden, besser das Action leer lassen, PHP_SELF ist "böse" sprich ein potentielles XSS Risiko.

    Und css lagert man für gewöhnlich in eine eigene .css Datei aus.

    LG
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Vielen Dank für die schnelle Antwort, das error reporting gibt nichts aus.
      Die Links habe ich mir angeschaut aber im Moment bin ich etwas überfordert damit, werde aber weiterlesen.

      Wenn ich das Script aufrufe werden alle Einträge angezeigt und deie Suche gibt nichts aus weder Fehlermeldung noch das richtige Ergebnis.

      Nachtrag:

      Notice gibt jetzt etwas aus (ich habe etwas vergessen):

      Notice: Undefined index: ergebnis in /var/www/clients/client2/web6/web/bearbeitungsstatus/work.php on line 36
      Zeile 36:

      if ($_POST['ergebnis'] == "ok")

      Kommentar


      • #4
        Abgesehen von dem anderen oben...

        Wenn ich das Script aufrufe werden alle Einträge angezeigt
        Ja klar, du filterst ja auch nirgends. Deine Verarbeitung müsste beim Auslesen der Textdatei nur die Einträge/Zeilen anzeigen wo der Suchbegriff vorhanden ist. Derzeit durchläuft du einfach nur alle Sätze, dh es muss bei jedem Durchlauf noch geprüft werden ob die betreffende Spalte/Feld mit deinem Suchbegriff übereinstimmt und dann erst ausgegeben.
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Was bedeutet denn "werden alle Einträge angezeigt"?

          Ich seh da auch nichts davon, dass du etwas durchsuchst. Du fragst nur ab, ob der Button gedrückt wurde.
          Relax, you're doing fine.
          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

          Kommentar


          • #6
            Wenn die Datei nicht allzu groß ist, würde ich mir die entsprechenden Zeilen rausfiltern:
            PHP-Code:
            if ( isset($_POST['gesendet']) ) {

                
            $aUserFile file'./user.txt'FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES );
                
            $rxPatternQuoted '/^' preg_quote$_POST['usereingabe'], '/' ) . '/iu';
                
            $aMatchedLines preg_grep$rxPatternQuoted$aUserFile );

                
            var_dump$aMatchedLines );


            je nachdem, wie das Ergebnis nun aufgebaut ist, passt Du die Ausgabe an.

            Erwähnt sei noch, daß Du hausl´s ersten Beitrag bedenken solltest.
            Das was Du da hast ist nichts zeitgemäßes.

            Es stellt sich auch die Frage, ob die Daten in einer DB nicht besser aufgehoben sind!
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              Nachtrag:

              Notice gibt jetzt etwas aus (ich habe etwas vergessen):

              Code:
              Notice: Undefined index: ergebnis in /var/www/clients/client2/web6/web/bearbeitungsstatus/work.php on line 36
              Ja klar beim ersten Aufruf ist die ja nicht gesetzt, daher macht es auch keinen Sinn etwas nicht gesetztes zu vergleichen. isset() oder !empty() ist hier zu verwenden.

              Du solltest dich in die Grundlagen einarbeiten, wenn du es wirklich selbst machen willst.
              http://www.php.de/php-einsteiger/489...rundlagen.html

              Das wird so nichts, wenn du mit der obigen Notice schon nichts anfangen kannst.
              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Es sind zwei Zeilen in der Testdatei. Genau das ist ja mein Problem mit dem Dursuchen und ausgeben. Als Anfänger (seit ca. 3 Wochen) ist mir der logische Schritt noch nicht so klar bzw. gar nicht klar.
                Das filtern und Ausgeben machen mir eben die Probleme.

                Kommentar


                • #9
                  Ja mache ich, trotzdem Danke für die Ansätze.

                  Kommentar

                  Lädt...
                  X