Ankündigung

Einklappen
Keine Ankündigung bisher.

Mittels php nach Datensätzen in einer Textdatei suchen - Lösung

Einklappen

Neue Werbung 2019

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

  • Mittels php nach Datensätzen in einer Textdatei suchen - Lösung

    Auf einem anderen php-Forum wollte mir niemand bei der Fehlerbeseitigung helfen - hier habe ich niemanden gefragt - dann fiel es mir wie Schuppen von den Augen - und ich habe das Skript fertigbekommen, dass es auch arbeitet.

    Das Problem ist, dass in den meisten Lernprogrammen für php an der Stelle abgebrochen wird, wo man gezeigt bekommen hat, wie man mittels php Daten aus einem html-Formular abfragen und als Array gestaltet in einer Textdatei speichern kann - dann wird einem noch gezeigt, wie man die gesamte Datei ausgeben kann - ja, aber wie bekommt man diese gespeicherten Datensätze da wieder nach bestimmten Kriterien herausgefiltert, denn dann wird im allgemeinen zu sql hinübergewechselt - die SQL-Konfiguration auf Servern bekommt man jedoch regelmäßig nur gegen Bezahlung zur Verfügung gestellt.

    Die Ausgangsposition: über ein html-Formular wie dieses:

    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Uebung</title>
    <meta name="author" content="Udo">
    <meta name="editor" content="html-editor phase 5">
    </head>
    <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
    <form action="uebung.php" method="post">
    Vorname:<br>
    <input type="Text" name="vorname" size="20">
    <br>
    <br>
    Nachname:<br>
    <input type="Text" name="nachname" size="20">
    <br>
    <br>
    PLZ:<br>
    <input type="Text" name="plz" size="5">
    <input type="submit" value="Eintragen">
    </form>
    </body>
    </html>
    eine schlichte Angelegenheit bei der man einfach Namen, Vornamen und Postleitzahl eintragen kann - könnte alles andere sein - Haarfarbe, Alter, etc.

    wurden die eingetragenen Daten übergeben an eine php-Datei wie diese:

    PHP-Code:
    <?php
    $vorname 
    $_POST["vorname"];
    $nachname $_POST["nachname"];
    $plz $_POST["plz"];
    $vorname_vorhanden = array(); 
    $uebungdatei fopen ("uebung.txt","r"); 
    while (!
    feof($uebungdatei)) 

    $zeile fgets($uebungdatei,500); 
    $uebungdata explode("|"$zeile); 
    array_push ($vorname_vorhanden,$uebungdata[0]); 

    fclose($uebungdatei); 
    if (
    in_array($vorname,$vorname_vorhanden)) 

    echo 
    "vorname schon vorhanden <br> <a href=\"uebung.html\">ein weiterer Eintrag</a>"

    else {
    $eintrag ="$vorname|$nachname|$plz\r\n";
    $uebungdatei fopen ("uebung.txt","a");
    fwrite($uebungdatei"$eintrag");
    fclose($uebungdatei);
    echo 
    "$vorname, Ihr Eintrag wurde ergänzt
    <br><a href=\"uebung.html\">ein weiterer Eintrag</a>"
    ;
    }
    ?>
    Eingabefelder des html-Formulares tragen die gleichen Namen - dies ist wichtig. Auch wenn hier anhand des Vornamens geprüft wird, ob es einen Eintrag schon gibt, kann man das noch besser gestalten - da mein Problem jedoch an einer ganz anderen Stelle lag, hab ich das als funktionierend hingenommen und mich um die wichtigen Dinge bemüht, denn nachdem man über das Formular einige Eingaben vorgenommen hat, liegt eine "uebung.txt" vor - die sieht dann in etwa so aus:

    Udo|RoXXXmel|03XXX
    Kerstin|LXXXe|03XXX
    Hannelore|HXXXXcke|03XXX
    Heinz|KoXXXt|03XXX
    Maik|HXXXXcke|03XXX

    Die "X" habe ich jetzt zur Verfremdung der Daten verwendet, da diese Personen tatsächlich existieren - in der Datei kommen die nicht vor.

    Um nun die Daten aber wieder ordentlich abzufragen, habe ich ein einfaches html-Formular gestaltet - so eins wie dieses hier:

    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Abfrage</title>
    <meta name="author" content="Udo">
    <meta name="editor" content="html-editor phase 5">
    </head>
    <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
    <form action="uebung2.php" method="post">
    Abfrage
    Vorname:<br>
    <input type="Text" name="vorname" size="20">
    <br>
    <br>
    <input type="submit" value="Abfragen">
    </form>
    </body>
    </html>
    Dort gibt man einen Vornamen ein, der hoffentlich in der Datenbank "uebung.txt" vorkommt und diese Abfrage wird weitergeleitet an die "uebung2.php" - diese findet lediglich den Vornamen, wenn er genau so geschrieben wird, wie er in der "uebung.txt" abgelegt wurde und gibt dann den entsprechenden Datensatz aus - das ist alles noch unformatiert und daher zusammengeklatscht - aber ich will ja hier nicht das Abschreiben fördern sondern lediglich eine Hilfestellung geben - Dinge, wie die Überprüfung des Vornamens ob nun groß- oder kleingeschrieben und die Formatierung der Ausgabe - da kann sich jeder selbst daran versuchen - es gibt da auch noch einen Weg, dies alles in einer Art Kreislauf zu gestalten, damit man von einer html-Seite sowohl Eingaben als auch Abfragen der Datenbank durchführen kann - ja, und was die Anzahl der hintereinander zu setzenden Fakten betrifft, da gibt es wohl erstmal keine Begrenzung - lediglich muss jede der Dateien dafür angepasst werden - diese Dateien hier arbeiten mit 3 übergebenen Daten je Datensatz - eine Erweiterung ist jedoch reine Schreibarbeit - hier also die Datei "uebung2.php", die mich glatt 2 Wochen Arbeit gekostet hat:

    PHP-Code:
    <?php
    $vorname 
    $_POST["vorname"];
    $variable file("uebung.txt");  
    $suche = array();
    foreach (
    $variable as $zeile

    $term explode("|"$zeile);
    array_push ($suche$term[0],$term[1],$term[2]); 
    if ( 
    $term[0]==$vorname )
    {              
    $nachname $term[1];
    $plz $term[2];
    echo 
    $vorname;
    echo 
    $nachname;
    echo 
    $plz;
    exit;
    }

    ?>
    Eine Alternativausgabe, wenn es in diesem Fall den Vornamen nicht gibt, habe ich hier nicht eingebaut - aber das ist wohl das geringste Problem.

    Und nun hoffentlich viel Spaß damit - muss weitermachen - Anpassungen vornehmen.

  • #2
    Hallo,

    ein wirklich netter Beitrag, aber du zeigst gerade die Nachteile auf, die so eine Textdatei-Datenbank mit sich bringt.
    eine Erweiterung ist jedoch reine Schreibarbeit [...] die mich glatt 2 Wochen Arbeit gekostet hat:
    Und damit sollte sich jeder überlegen, ob das Argument für Textdateien
    die SQL-Konfiguration auf Servern bekommt man jedoch regelmäßig nur gegen Bezahlung zur Verfügung gestellt.
    diesen Arbeitsaufwand rechtfertigt.

    Schlussendlich frage ich mich noch: Was möchtest du uns mit diesem Beitrag mitteilen?

    Gruß
    [URL]http://hallophp.de[/URL]

    Kommentar


    • #3
      Zitat von Asipak Beitrag anzeigen
      Hallo,

      ein wirklich netter Beitrag, aber du zeigst gerade die Nachteile auf, die so eine Textdatei-Datenbank mit sich bringt. Und damit sollte sich jeder überlegen, ob das Argument für Textdateien diesen Arbeitsaufwand rechtfertigt.

      Schlussendlich frage ich mich noch: Was möchtest du uns mit diesem Beitrag mitteilen?

      Gruß
      Habe vor ca. 2 Wochen erstmals mit php gearbeitet - daher zwei Wochen bis die letzte php-Datei endlich fertig war.

      Die reine Schreibarbeit besteht lediglich in den Anpassungen, was die einmalige Erweiterung auf ein längeres Array betrifft, so im Eingabeformular und in den beiden php-Dateien - und diese Schreibarbeit hat mich auch keine zwei Wochen gekostet.

      Ich musste den Fehler in der php-Datei für das Auslesen entdecken - um dies weiteren Anfängern zu ersparen, habe ich dies hier gepostet - selbst wenn jemand Bilddateien einbinden möchte, so scheint mir hier die Einbindung des notwendigen Links in den Array als möglich.

      SQL wird regelmäßig verwendet - so geht es auch mal mit txt-Dateien über php.

      Kommentar


      • #4
        Wie immer behandelt auch dein Script nicht den Sonderfall, wenn innerhalb der Daten selbst das Trennzeichen vorkommt. Was dann? Dein Script wird in diesem Fall fehlerhaft arbeiten!
        [IMG]http://media.ubuntuusers.de/portal/files/ubuntu.png[/IMG][IMG]http://sqlmanager.net/i/ico/mysql.gif[/IMG][SIGPIC][/SIGPIC]

        Kommentar


        • #5
          Zitat von Frank Beitrag anzeigen
          Wie immer behandelt auch dein Script nicht den Sonderfall, wenn innerhalb der Daten selbst das Trennzeichen vorkommt. Was dann? Dein Script wird in diesem Fall fehlerhaft arbeiten!
          Ja, also, wer im Gegensatz zu jeder Anfängerlektion, das Trennzeichen - hier in diesem Fall "|" - als Drittbelegung der "<->"-Taste unter Verwendung der "Alt Gr"-Taste zu erzeugen - also, wer dieses später zu verwendende Trennzeichen mit in die Datenfelder eingibt, der muss mit einer fehlerhaften Ausgabe rechnen, wenn er dieses Skript verwendet.

          Andernfalls sind es nur wenige Skriptzeilen, die sehr effektiv arbeiten und es gibt augenscheinlich viele Mitmenschen, die dies gern als Geheimnis hüten wollen - kann ich nur um Entschuldigung bitten - kommt sicher nicht wieder vor.

          Kommentar


          • #6
            Das Argument ist durchaus berechtigt. Als Programmierer sollte man solche Fälle berücksichtigen.
            Viel wichtiger ist, dass Deine Daten nicht geprüft werden. Das betrifft sowohl den Fall, dass eine Eingabe eine Pipe (|) enthält, als auch ein Umbruchzeichen (ja, das geht, auch wenn Dein Form das scheinbar nicht zulässt). Ganz kritisch wird es, wenn jemand HTML oder Javascript eingibt, das später ausgegeben wird, denn auch das filterst Du nirgendwo.

            Schließlich noch diese Zeile:
            PHP-Code:
            array_push ($suche$term[0],$term[1],$term[2]); 
            erschliéßt sich mir nicht.
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            Kommentar


            • #7
              Zitat von UdoDirk Beitrag anzeigen
              Andernfalls sind es nur wenige Skriptzeilen, die sehr effektiv arbeiten und es gibt augenscheinlich viele Mitmenschen, die dies gern als Geheimnis hüten wollen - kann ich nur um Entschuldigung bitten - kommt sicher nicht wieder vor.
              Nein, das ist kein Geheimnis.
              Nur, weil du zu etwas keine fertige Lösung findest, heißt das nicht, dass es ein Geheimnis wäre.

              Vielleicht hat das niemand implementiert, weil es sich bei der Betrachtung aller Probleme und Nachteile (ein Problem wurde dir gerade genannt - und du lehnst es achselzuckend mit „da kann man als Benutzer doch aufpassen“ ab) einfach nicht lohnt? Weil man letztendlich doch zu viele Features einer „richtigen“ Datenbank wieder nachprogrammieren muss, obwohl es RDBMs schon zuhauf gibt, die man stattdessen nutzen könnte.
              SQLite wäre da z.B. zu nennen. Das ist eine „Datenbank“, die zwar sehr wohl textfile-basiert ist - aber mit der man in der standardisierten Sprache SQL kommunizieren kann. Die Datenhaltung des Projektes kann man dann später, wenn das bspw. durch Nutzerzahlen/Datenaufkommen gefordert ist, relativ einfach austauschen, in dem man eine „richtige“ Datenbank stattdessen daran anschließt. Und Webhoster, die SQLite nicht „im Angebot“ haben oder nur gegen Aufpreis, die wirst du heutzutage wohl kaum noch finden. (Und wenn, dann würde ich diese unseriös nennen.)


              Leute, die Erfahrung haben im Bereich Webentwicklung, die wissen um all die Nachteile, die der gezeigte naive Anfänger-Ansatz hat; die wissen, dass man einiges mehr tun muss als ein bisschen Text irgendwie in eine Datei zu schreiben, wenn man eine verlässliche Datenhaltung braucht, mit der sich auch sinnvoll arbeiten lässt. (Du willst Daten auf längere Sicht nicht nur speichern, sondern auch irgendwie auswerten wollen - und das umfasst einiges mehr, als nur die Suche nach einem Datensatz.)

              Dass du als Anfänger diesen Ansatz wählst, ist nicht verwerflich - dafür gibt's ja dann ein Forum mit erfahreneren Leuten, die dir sagen können, warum es sich kaum rentiert, diesen Ansatz noch weiter zu verfolgen.

              Your welcome.
              [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

              Kommentar


              • #8
                Zitat von ChrisB Beitrag anzeigen
                Nein, das ist kein Geheimnis.
                Nur, weil du zu etwas keine fertige Lösung findest, heißt das nicht, dass es ein Geheimnis wäre.

                Vielleicht hat das niemand implementiert, weil es sich bei der Betrachtung aller Probleme und Nachteile (ein Problem wurde dir gerade genannt - und du lehnst es achselzuckend mit „da kann man als Benutzer doch aufpassen“ ab) einfach nicht lohnt? Weil man letztendlich doch zu viele Features einer „richtigen“ Datenbank wieder nachprogrammieren muss, obwohl es RDBMs schon zuhauf gibt, die man stattdessen nutzen könnte.
                SQLite wäre da z.B. zu nennen. Das ist eine „Datenbank“, die zwar sehr wohl textfile-basiert ist - aber mit der man in der standardisierten Sprache SQL kommunizieren kann. Die Datenhaltung des Projektes kann man dann später, wenn das bspw. durch Nutzerzahlen/Datenaufkommen gefordert ist, relativ einfach austauschen, in dem man eine „richtige“ Datenbank stattdessen daran anschließt. Und Webhoster, die SQLite nicht „im Angebot“ haben oder nur gegen Aufpreis, die wirst du heutzutage wohl kaum noch finden. (Und wenn, dann würde ich diese unseriös nennen.)


                Leute, die Erfahrung haben im Bereich Webentwicklung, die wissen um all die Nachteile, die der gezeigte naive Anfänger-Ansatz hat; die wissen, dass man einiges mehr tun muss als ein bisschen Text irgendwie in eine Datei zu schreiben, wenn man eine verlässliche Datenhaltung braucht, mit der sich auch sinnvoll arbeiten lässt. (Du willst Daten auf längere Sicht nicht nur speichern, sondern auch irgendwie auswerten wollen - und das umfasst einiges mehr, als nur die Suche nach einem Datensatz.)

                Dass du als Anfänger diesen Ansatz wählst, ist nicht verwerflich - dafür gibt's ja dann ein Forum mit erfahreneren Leuten, die dir sagen können, warum es sich kaum rentiert, diesen Ansatz noch weiter zu verfolgen.

                Your welcome.
                Also gut, ja, dafür schleichen wir Anfänger ja hier vorbei, damit man uns gelegentlich auf den richtigen Weg bringt.

                Ich würde dieses Datenbankmodell auch nicht gerade als Nutzung für einen Onlineshop empfehlen, obwohl das jeder für sich selbst entscheiden muss - bis man wiederum das SQL beherrscht kann man derartiges anfangs möglicherweise dennoch verwenden, und bis dahin fehlt einem ja auch der Einblick, welchen Aufwand man jeweils zu betreiben hat.

                Zum einen wurde aber aufgezeigt, dass es auch geht - freilich fehlen sämtliche Kontrollmechanismen - aber der Sinn und Zweck war ja auch die Möglichkeit, wie man eine Textdatenbank abfragen kann - modifizieren muss es jeder selbst - was wiederum überall nachzulesen ist, wie das dann geht.

                Und der tatsächliche Verwendungszweck dieses Projektes besteht darin, als Hintergrund für eine website zu dienen, über welche durch Scroll-up-Menüs Informationen zu Angelegenheiten aufgerufen werden sollen, die jeweils nur einmal existieren - die Auswahlmöglichkeiten werden also voreingestellt sein.

                Eine Fremdeingabe wird es nicht geben - sozusagen bleibt eine statische Datenbank für die Gestaltung einer dynamischen html-Seite - man muss also nix kontrollieren, da man die fehlenden Kontrollmöglichkeiten kennt und Eingaben sich also im Rahmen der Möglichkeiten befinden - Groß- und Kleinschreibung interessiert auch nicht, da man nur auswählen, aber keine echte Abfrage selbst formulieren kann.

                Gut, wenn man eine Seite gestaltet, die über lange Zeit existieren soll, aber gelegentlich die Datenbank auf den neuesten Stand gebracht werden muss - meinetwegen kann man ja eine Auswahl von öffentlichen Einrichtungen in dem Auswahlmenü vorhalten - und wenn man eine davon auswählt, dann bekommt man die Sprechzeiten und Telefonnummern oder so angezeigt - die ändern sich ja auch mal - durch die Datenbank im Hintergrund kann man durch Anpassung der Datenbank die Seite immer wieder aktuell halten und muss nicht jede einzelne Unterseite immer wieder neu programmieren - so gesehen nix besonderes - eben nur der Vorteil, den dynamische Websites bieten, weil eine Datenbank hinten angeschlossen ist.

                Und unter den Voraussetzungen, dass man selbst die Eingaben vornimmt und die Abfrage lediglich durch vorgegebene Menüpunkte ermöglicht sein soll, halte ich die Verwendung des Skripts für akzeptabel.

                Kommentar

                Lädt...
                X