tinu: Mein erstes PHP Gebastel

Hi Allerseits!

Ihr kennt mich aus Beiträgen wie "zu doof!", "if (mybrain too klein) {echo "passt kein php hinein";}" oder "Alle Hühner kacken im stehen, ausser die menschlichen... denn die würden so das Klo verfehlen.".

Ich hab mich trotz anfänglichem Frust weiter mit meinem Mini-PHP-Gästebuch-Projekt beschäftigt. Das Grundgerüst steht nun. Unter Grundgerüst ist zu verstehen: Gästebuch anzeigen, Formular anzeigen, Eintragen (und wieder von vorn). Nun würde ich mal gerne wissen, ob mein erster (intensiverer) Kontakt mit PHP was gebracht hat, oder ob mein Grundgerüst einfach nur totaler Müll ist. Deswegen würd ich mich freuen wenn ihr mir mal eure Meinung dazu sagen könntet. Bevor ich euch allerdings den Link zum Gästebuch und zu den PHP-Dateien gebe, möcht ich noch folgendes loswerden:

  • am Design (CSS) hab ich noch überhaupt nix gemacht. Spielt hier nun auch keine Rolle, geht lediglich ums Funktionelle
  • die Ausgabe der Einträge ist momentan rein sporadisch, da soll dann irgendwann mal ne vernünftige Struktur reingebracht werden *g*
  • Ja, ich weiss, dass Captcha doof ist, aber ging ums Prinzip und wollte mit den image funktionen bisserl rumspielen
  • Ja, ich weiss, dass ne MySQL Datenbank besser wäre als eine CSV-Datei. Von MySQL Befehlen hab ich aber bereits ne Ahnung und wollte ausserdem etwas machen, was überall ohne Installation läuft (sprich einfach per FTP auf den Server kopieren und fertig).

So, Ihr findet das Gästebuch unter "diesem Link".

Die PHP-Dateien (gezippt) findet Ihr "hier".

Bin gespannt auf eure Meinung, Verbesserungsvorschläge oder vernichtenden Kritiken. Dankeschön
tinu

PS: Ein Adminmodus in welchem man Beiträge löschen kann etc. folgt erst wenn das Gerüst vernünftig ist.

  1. Grüße,| Hi Allerseits!

    Ihr kennt mich aus Beiträgen wie "zu doof!", "if (mybrain too klein) {echo "passt kein php hinein";}" oder "Alle Hühner kacken im stehen, ausser die menschlichen... denn die würden so das Klo verfehlen.".

    von Troy McClure inspieriert?

    • am Design (CSS) hab ich noch überhaupt nix gemacht. Spielt hier nun auch keine Rolle, geht lediglich ums Funktionelle
    • die Ausgabe der Einträge ist momentan rein sporadisch, da soll dann irgendwann mal ne vernünftige Struktur reingebracht werden *g*

    gestäbuch einträge können nur auf 2 arten sinvoll (sinnlos auf viele)sortiert werden - chronologisch, oder in lob/geschimpfe gruppen aufgeteilt und ebenfalls chronologisch

    • Ja, ich weiss, dass Captcha doof ist, aber ging ums Prinzip und wollte mit den image funktionen bisserl rumspielen

    O_o

    • Ja, ich weiss, dass ne MySQL Datenbank besser wäre als eine CSV-Datei. Von MySQL Befehlen hab ich aber bereits ne Ahnung und wollte ausserdem etwas machen, was überall ohne Installation läuft (sprich einfach per FTP auf den Server kopieren und fertig).

    an csv habe ich auch schon mal gedacht - aber dann dachte ich an die ausgabe und zwang mich danach an etwas anderes zu denken. jetzt verstehe ich was du mit "struktur" meinst. aber selbst da kann man einiges machen (array_walk darfst du schon jetzt studieren >_< und mit mehrdimensionalen arrays zu arbeiten wird der hit - außer du kommst zu einer eleganteren lösung als die die mir schimmert)

    So, Ihr findet das Gästebuch unter "diesem Link".

    Die PHP-Dateien (gezippt) findet Ihr "hier".

    nicht sehr klug im bezug auf die sicherheit. insertions und hackersuche erwarte ich von hiesigem volk nicht, aber trotzdem.

    Bin gespannt auf eure Meinung, Verbesserungsvorschläge oder vernichtenden Kritiken. Dankeschön
    tinu

    PS: Ein Adminmodus in welchem man Beiträge löschen kann etc. folgt erst wenn das Gerüst vernünftig ist.

    ehm.. und was sollen die gnazen "--------------" ?
    mit magic quotes solltest du bei der ausgabe auch was machen.

    MFG
    bleicher

    --
    __________________________-
    Die versprechen ernsthaft werbefreien hosting?
    1. Hi!

      gestäbuch einträge können nur auf 2 arten sinvoll

      Das ist echt großes Kino! Nur ohne Dolby Surround!

      off:PP

      --
      "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    2. von Troy McClure inspieriert?

      Klar, wer sonst ;)

      »»(array_walk darfst du schon jetzt studieren

      wiedermal was neues. Werd ich machen. Danke

      nicht sehr klug im bezug auf die sicherheit. insertions und hackersuche erwarte ich von hiesigem volk nicht, aber trotzdem.

      Na, hab mir halt eben auch gedacht, dass das hiesige Volk das nicht misbraucht... und wenn doch... da is sonst nix drauf *g*

      ehm.. und was sollen die gnazen "--------------" ?

      Daaas, ist ne gute Frage!!! Hab mich auch grad gefragt. Eigentlich sollte das nur am Ende jedes Eintrags sein (um die Einträge optisch voneinander zu trennen.) Da ging wohl was in die Hose.

      mit magic quotes solltest du bei der ausgabe auch was machen.

      Ohje, die von php hinzugefügten slashes eliminieren und im nachhinein wieder hinzufügen? (so abgekürzt klings bescheuert *g*).. muss ich mich mal bei php.net genauer einlesen

      1. Hi,

        mit magic quotes solltest du bei der ausgabe auch was machen.
        Ohje, die von php hinzugefügten slashes eliminieren und im nachhinein wieder hinzufügen? (so abgekürzt klings bescheuert *g*)..

        nein. Am besten magic_quotes deaktivieren oder wenn das nicht geht, die Maskierung nur entfernen und nicht mehr hinzufügen - Du brauchst sie nur äußerst selten bei der Verarbeitung durch PHP.

        Aber Du machst noch viele Fehler - auch solche, die nichts direkt mit Programmierung zu tun haben und die eigentlich selbst bei der Nutzung auffallen sollten.

        Die Fehlerabfragen sind Murks. Zum einen funktionieren sie nicht, zum anderen, wenn sie funktionierten, würden die bereits erfolgten Eingaben verworfen.

        Du verwendest drei Dateien, wo nur eine nötig und sinnvolll wäre - Stichwort: Affenformular. Stattdessen schickst Du die Besucher auf Weiterleitungen und übergibst deren Eingaben unnötig an die Session.

        Gegen CSV ist eigentlich nichts einzuwenden, aber man sollte die von Tom bereits genannten Tücken umschiffen und sich vor allem Gedanken über entsprechende Maskierung von Funktionszeichen machen: Komma im Text = neues Feld und Newline = neuer Beitrag.

        Der möglicherweise größte Fehler: hast Du error_reporting aktiviert?

        freundliche Grüße
        Ingo

        1. Hi,

          Die Fehlerabfragen sind Murks. Zum einen funktionieren sie nicht, zum anderen, wenn sie funktionierten, würden die bereits erfolgten Eingaben verworfen.

          Ach mist, bevor ich den Müll mit "zurückverweisen" aufs Formular eingefügt hab, hat alles noch geklappt.

          Du verwendest drei Dateien, wo nur eine nötig und sinnvolll wäre - Stichwort: Affenformular. Stattdessen schickst Du die Besucher auf Weiterleitungen und übergibst deren Eingaben unnötig an die Session.

          Das mit der Session hab ich nur gemacht, damit ich erstens den Code übergeben kann und zweitens Das Formular erneut anzeigen und beim jeweiligen Feld wo etwas nicht stimmt eine entsprechende Meldung anzeigen kann. Wie lös ich das denn sonst, ohne auf Sessions zuzugreifen?

          Und wie verarbeitet man Formulareingaben in der selben Datei wie sie eingegeben wurden?! *kopfkratz

          ...und sich vor allem Gedanken über entsprechende Maskierung von Funktionszeichen machen: Komma im Text = neues Feld und Newline = neuer Beitrag.

          Ja, Mist... deswegen auch das Chaos in der Ausgabe und die vielen "----------" ;)

          Der möglicherweise größte Fehler: hast Du error_reporting aktiviert?

          Ich hab an der php.ini garnichts gemacht, da ich dies auf anderen Servern auch nicht beeinflussen könnte. Aber es ist aktiviert, ja... wieso? Für Testzwecke ist das doch vorteilhaft, nicht?

          1. Hallo

            Du verwendest drei Dateien, wo nur eine nötig und sinnvolll wäre - Stichwort: Affenformular.

            [...]

            Und wie verarbeitet man Formulareingaben in der selben Datei wie sie eingegeben wurden?! *kopfkratz

            Stichwort in Wikipedia eingeben: Affenformular, Wikipedia :-)

            Noch was zu Deinen Prüfungen: Diese sind zum Teil grob fehlerhaft. Beispielsweise empfehle ich Dir die Lektüre von Validierung von eMail-Adressen (Selfforumssieb). Schau Dir anschließend Deine Prüfung erneut an ...

            Freundliche Grüße

            Vinzenz

            1. Hi,

              Stichwort in Wikipedia eingeben: Affenformular, Wikipedia :-)

              Ja, das hab ich bereits gelesen. Wirklich weitergeholfen hats mir nicht.

              Noch was zu Deinen Prüfungen: Diese sind zum Teil grob fehlerhaft. Beispielsweise empfehle ich Dir die Lektüre von Validierung von eMail-Adressen (Selfforumssieb). Schau Dir anschließend Deine Prüfung erneut an ...

              Wenn ich das anschau sagt das eigentlich nur aus, dass die Überprüfung von eMail-Adressen sinnlos ist, weils eh keine 100% korrekte Lösung gibt. Ist meiner Meinung aber Korinthenkackerei. Nur weil Sonnencreme nicht 100% vor UV-Strahlen schützt soll ich mir also keine Sonnencreme einschmieren? Meine Prüfung funktioniert schon (abgesehen vom Kommaproblem). Sie schützt zwar nicht vor Pseudo-Mail-Adressen, aber zumindest mal von Bots die irgendwas (keine Mail-Adressen) in die Felder eingeben und absenden (sofern das Kommaproblem dann nichtmehr besteht ;) ).

              Gruss
              tinu

              1. Hallo

                Stichwort in Wikipedia eingeben: Affenformular, Wikipedia :-)

                Ja, das hab ich bereits gelesen. Wirklich weitergeholfen hats mir nicht.

                aber dort steht doch das Grobkonzept mit Beispielcode. Es gibt einen weiterführenden Link zu Von HTML zu PHP: Schreibe Formularverarbeitungen in Normalform. Der Code dort ist zwar nicht mehr empfehlenswert, aber das Prinzip wird Schritt für Schritt erklärt.

                Noch was zu Deinen Prüfungen: Diese sind zum Teil grob fehlerhaft. Beispielsweise empfehle ich Dir die Lektüre von Validierung von eMail-Adressen (Selfforumssieb). Schau Dir anschließend Deine Prüfung erneut an ...

                Wenn ich das anschau sagt das eigentlich nur aus, dass die Überprüfung von eMail-Adressen sinnlos ist, weils eh keine 100% korrekte Lösung gibt. Ist meiner Meinung aber Korinthenkackerei. Nur weil Sonnencreme nicht 100% vor UV-Strahlen schützt soll ich mir also keine Sonnencreme einschmieren?

                Der Vergleich passt nicht. Es geht nicht um den Schutz. Es geht darum, dass Du willkürlich Millionen oder gar Milliarden fälschlicherweise aussperrst. Genauso wie niemand eine https-URL eingeben darf.

                Freundliche Grüße

                Vinzenz

                1. Hi Vinzenz

                  Der Vergleich passt nicht. Es geht nicht um den Schutz. Es geht darum, dass Du willkürlich Millionen oder gar Milliarden fälschlicherweise aussperrst. Genauso wie niemand eine https-URL eingeben darf.

                  Naja, grundsätzlich hast recht, aber ich wollte auch nicht ein weltweit brauchbares GB erschaffen, sondern lediglich ein Mini-GB, welches mir hilft in PHP einzusteigen. Der Aktionsradius wär wohl grad mal der deutschsprachige Raum und lediglich Privatanwender. Deswegen bezweifle ich dass ich TLD mit chinesischen Schriftzeichen (Punycode oder wie das xn zeugs auch immer heisst) miteinplanen muss. Auch kann ich mir nicht vorstellen, dass unter Privatanwendern jemand https:// urls eingeben würde.

                  Aber ja, ich geb das ganze wohl auf. Denn ich schaffs auch mit euren Antworten nicht, das irgendwie zu verbessern.

                  Danke trotzdem
                  tinu

                  1. Hallo tinu,

                    Naja, grundsätzlich hast recht, aber ich wollte auch nicht ein weltweit brauchbares GB erschaffen, sondern lediglich ein Mini-GB, welches mir hilft in PHP einzusteigen. Der Aktionsradius wär wohl grad mal der deutschsprachige Raum und lediglich Privatanwender.

                    ja und. Deutsche mit ihren Umlauten und dem ß sperrst Du auch aus.

                    Aber ja, ich geb das ganze wohl auf. Denn ich schaffs auch mit euren Antworten nicht, das irgendwie zu verbessern.

                    Du wirst doch nicht gleich die Flinte ins Korn werfen. So ein Gästebuch ist genau das richtige Projekt, um einen Einstieg zu schaffen. Mein Vorschlag wäre, dass Du als erstes Dein Gästebuch als Affenformular gestaltest. Die restlichen (durchaus wichtigen Hinweise) kannst Du anschließend umsetzen. Die zweite Version muss doch noch nicht die perfekte Version sein!

                    Ermutigende Grüße

                    Vinzenz

                    1. Du wirst doch nicht gleich die Flinte ins Korn werfen. So ein Gästebuch ist genau das richtige Projekt, um einen Einstieg zu schaffen. Mein Vorschlag wäre, dass Du als erstes Dein Gästebuch als Affenformular gestaltest. Die restlichen (durchaus wichtigen Hinweise) kannst Du anschließend umsetzen. Die zweite Version muss doch noch nicht die perfekte Version sein!

                      Ist ja durchaus nett gemeint, aber ihr habt mir schon unzählige Tipps gegeben und ich war bis anhin nicht wirklich fähig etwas daraus zu machen. Ich mein... wenn ich schon Probleme hab das Beispiel unter http://www.php-faq.de/q/q-stil-normalform.html selbständig zu ergänzen (geschweige denn, dass ich niemals selbst auf die Funktionen gekommen wäre und sie auch nur mit Müh und Not verstehe), dann hats wohl nicht sonderlich viel Sinn wahnsinnigen Effort da reinzustecken. Es liegt mir wohl einfach nicht, auch wenn ich mich noch so wahnsinnig dafür interessier.

                      Nichts desto Trotz... Dankeschön
                      tinu

          2. Hi,

            Du verwendest drei Dateien, wo nur eine nötig und sinnvolll wäre - Stichwort: Affenformular. Stattdessen schickst Du die Besucher auf Weiterleitungen und übergibst deren Eingaben unnötig an die Session.

            Das mit der Session hab ich nur gemacht, damit ich erstens den Code übergeben kann und zweitens Das Formular erneut anzeigen und beim jeweiligen Feld wo etwas nicht stimmt eine entsprechende Meldung anzeigen kann. Wie lös ich das denn sonst, ohne auf Sessions zuzugreifen?

            Und wie verarbeitet man Formulareingaben in der selben Datei wie sie eingegeben wurden?! *kopfkratz

            indem man einfach (siehe "Affenformular") nur eine einzige Datei nutzt. Die bekommt dann die POST-Daten, verarbeitet sie und gibt die entsprechenden Ausgaben.

            Der möglicherweise größte Fehler: hast Du error_reporting aktiviert?

            Ich hab an der php.ini garnichts gemacht, da ich dies auf anderen Servern auch nicht beeinflussen könnte. Aber es ist aktiviert, ja... wieso? Für Testzwecke ist das doch vorteilhaft, nicht?

            Ist es das wirklich? Die meisten Provider deaktivieren das, weil zuviele fehlerhafte Scripts genutzt werden. Das ist im Prinzip auch gut so, aber Du solltest in der Entwicklungsphase in jedem PHP-Script error_reporting(E_ALL) notieren oder, wenn Du unter PHP5 testest:

            if(defined('E_STRICT') && function_exists('date_default_timezone_set')) {  
              error_reporting(E_ALL | E_STRICT);  
              date_default_timezone_set("Europe/Berlin");  
            }
            

            freundliche Grüße
            Ingo

    3. Hello Bleicher,

      gestäbuch einträge können nur auf 2 arten sinvoll (sinnlos auf viele)sortiert werden - chronologisch, oder in lob/geschimpfe gruppen aufgeteilt und ebenfalls chronologisch

      Das finde ich nicht. Es gibt genügend gute Gründe, sie nach unterschiedlichen Kriterien sortierbar zu machen:

      • Chronologisch, rückwärts, vorwärts
      • nach Themenbereichen, sofern vorhanden
      • nach Stadt des Schreibers
      • nach namen des Schreibers
      • beantwortet, unbeantwortet, meiste Antworten zuerst... (wie bei vielen Web-Logs)
      • usw.

      mit magic quotes solltest du bei der ausgabe auch was machen.

      Nee, eher bei der Datenübernahme :-)

      Liebe Grüße aus Syburg bei Dortmund

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
  2. Hello,

    ich habe eben nur malö schnell durchgeschaut und festgestellt, dass Du den Fehler machst, den fast alle PHP-/ und/oder Programmieranfänger machen. Du trennst die Bereiche des Programms nicht voneinander:

    • Datenübernahme
    • Daten Plausibilitätskontrolle
    • Steuerflussauswertung
    • Datenbeschaffung
    • Datenverarbeitung
    • Daten wegschreiben
    • Ausgabe aufbereiten
    • ausgeben

    oder kurz "EVA" für Eingabe, Verarbeitung, Ausgabe.

    Und dieser Abschnitt fiel mir sofort auf:

    $filename = "datafile.csv";
        $file = file($filename);
        $last_line = end($file);
        $new_line = sprintf("%04d",$last_line+1).",".$txt."\n";

    $finsert = fopen($filename , "a+");
        fwrite($finsert , $new_line);
        fclose($finsert);

    Da geht 'was in die Hose, enn mehrere Besucher gleichzeitig zugreifen.
    Außerdem ist die Vermischung von namensbasierten und handlebasierten Dateifunktionen nicht zu empfehlen. Für sicheres Datenhandling solltest Du dich auf die handlebasierten Funktionen beschränken. Alles andere ergibt irgendwann Probleme.

    Schau Dir dazu den Artikel von Christian an:
    http://aktuell.de.selfhtml.org/artikel/programmiertechnik/dateisperren/index.htm

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Du trennst die Bereiche des Programms nicht voneinander:

      • Datenübernahme
      • Daten Plausibilitätskontrolle
      • Steuerflussauswertung
      • Datenbeschaffung
      • Datenverarbeitung
      • Daten wegschreiben
      • Ausgabe aufbereiten
      • ausgeben

      Wie muss ich das genau verstehen? Sollte ich für jeden Bereich eine eigene Datei erstellen und sie an entsprechender Stelle includen (bzw. mit require einfügen)? Oder wie "trennt" man diese Bereiche sonst voneinander?

      oder kurz "EVA" für Eingabe, Verarbeitung, Ausgabe.

      Ich dachte das hätte ich durch die Aufteilung in die drei Dateien gemacht.

      Außerdem ist die Vermischung von namensbasierten und handlebasierten Dateifunktionen nicht zu empfehlen.

      Was sind namensbasierte und handlebasierte Dateifunktionen? oO Sorry, find unter den Stichworten nirgends was.

      Schau Dir dazu den Artikel von Christian an:http://aktuell.de.selfhtml.org/artikel/programmiertechnik/dateisperren/index.htm

      Danke!

      1. Hallo tinu;

        • Datenübernahme
        • Daten Plausibilitätskontrolle
        • Steuerflussauswertung
        • Datenbeschaffung
        • Datenverarbeitung
        • Daten wegschreiben
        • Ausgabe aufbereiten
        • ausgeben

        Ich denke ,der Tom hat da ein bisschen zu theoretisch geantwortet;
        zumal sich die einzelnen Punkte ja auch ueberschneiden.
        Die Bereiche

        • Datenübernahme
        • Datenbeschaffung
        • Datenverarbeitung
        • Daten wegschreiben
          gehoeren natuerlich alle in den Bereich Datenverarbeitung. Also in die
          SQL-Datei oder, in deinem Falle, in den CSV-Handler.

        Folgende dienen dann zur weiteren Aufbearbeitund respektive Kontrolle der
        Daten.

        • Daten Plausibilitätskontrolle
        • Ausgabe aufbereiten
        • ausgeben

        Wobei die letzten Punkte - die ja zudem ineinander uebergehen - durchaus
        in dem Templatehandler landen koennen. Denn die Ausgabe ist ja von dem
        jeweiligen Projekt abhaengig.

        MfG,
        Sympatisant

        --
        "Non dura iubeantur, non prohibeantur inpura."
        1. Hello,

          Die Bereiche

          Eingabe:

          • Datenübernahme

          Verarbeitung:

          • Datenbeschaffung
          • Datenverarbeitung
          • Daten wegschreiben

          Liebe Grüße aus Syburg bei Dortmund

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Salvete,

            Die Bereiche
            Eingabe:

            • Datenübernahme

            Also die DatenEingabe.

            MfG,
            Sympatisant

            --
            "Non dura iubeantur, non prohibeantur inpura."