Ankündigung

Einklappen
Keine Ankündigung bisher.

Eingabeformular mit Textarea in Textdatenbank ordentlich ablegen - Lösung!

Einklappen

Neue Werbung 2019

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

  • Eingabeformular mit Textarea in Textdatenbank ordentlich ablegen - Lösung!

    Bevor ich mich an die großen Dinge stürze, schlage ich mich erst mit allem möglichen Kleinkram rum - nach der Frage:"Was wäre wenn?".

    Wer irgendwas verbesserungswürdig sieht - dafür bin ich hier - zum Lernen.

    Man nehme also zunächst ein schlichtes html-Eingabeformular:

    Code:
    <form action="textareatest4.php" method="post">
    <input type="text" name="vorname">
    <input type="text" name="nachname">
    <textarea name="bemerkungen" rows="3" cols="20" wrap="physical">Bemerkungen</textarea>
    <input type="submit" value="Eintragen"></form>
    Den Rest hab ich des Platzes wegen weggelassen - kennt ja wohl jeder.

    Wie die php-Datei heisst, an die übergeben wird, ist freilich nicht weiter wichtig - hier heisst sie eben textareatest4.php - als Inhalt hat sie folgendes:

    PHP-Code:
    <?php
    $vorname 
    $_POST["vorname"];
    $nachname $_POST["nachname"];
    $textarea $_POST["bemerkungen"];
    $textarea str_replace("\r\n""<br>""$textarea");
    $textareadatei fopen("textareatest2.txt""a");
    flock ($textareadateiLOCK_EX);
    $eintrag=("$vorname|$textarea|$nachname\r\n");
    fwrite ($textareadatei$eintrag);
    flock ($textareadateiLOCK_UN);
    fclose ($textareadatei); 
    ?>
    Alle Feldnamen aus dem Eingabeformular tauchen wieder auf - zunächst bearbeitet werden, muss aber lediglich "$textarea" - es werden alle aus dem Eingabefeld übergebenen Zeilenumbrüche gegen den html-tauglichen Zeilenumbruch ausgetauscht - das Ergebnis davon wird als "$textarea" zurückgegeben und dann nach erfolgter Bearbeitung mit den Einträgen aus den anderen Eingabefeldern zu "$eintrag" zusammengefügt.

    Wer die Verwendung des immer gleichen Variablennamens für sinnfrei einstuft - es sollte hierdurch lediglich der Datenfluss der Textfeldeingaben etwas besser nachverfolgt werden können.

    Wozu das alles?

    Ohne diesen Zwischenschritt hätte man bei Ablage in einer Textdatenbank wohl solch einen Eintrag vorgefunden:

    Udo|dumm,

    faul,

    und obendrein:

    auch noch:

    -gefräßig|Dirk
    Da stecken reichlich Zeilenumbrüche drin, die bei der weiteren Verarbeitung stören - diese regelmäßig unmöglich machen würden.

    Nach dieser Anpassung liegt jetzt aber in der Textdatenbank ein solcher Eintrag vor:


    Udo|dumm,<br><br>faul<br><br>und obendrein:<br><br>auch noch:<br><br>-gefräßig|Dirk
    Nur ein Zeilenumbruch für jeden Eintrag, und die Trennzeichen - hier "|" - an denen man später bei der Ausgabe mittels explode alles wieder aufteilen und ausgeben lassen kann - die Ausgabe sollte dann aber genauso erfolgen, wie sie im Texteingabefeld als Eingabe erfolgte.

    Keine Ahnung, wozu man das verwenden könnte - automatisch generierte Geburtstagsgrüße an alle Kunden, die man hat - Serienbriefe - Serienmails - egal - nach dem Leitsatz:"Du bekommst, was Du siehst." kann man sich spätere Nachformatierung sparen.


  • #2
    Hi,

    sieht ja soweit schon mal ganz in Ordnung aus. Aber warum verwendest du für so etwas keine Datenbank? Was passiert bei dir, wenn ich als Name so etwas wie "FEL|X" eingebe? Wird HTML gefiltert? In der Ausgabe ist das ja dann nur noch erschwert möglich (da du mit <br/> ja schon HTML eingefügt hast).

    Kommentar


    • #3
      Was passiert bei dir, wenn ich als Name so etwas wie "FEL|X" eingebe?
      Danke, werde ich noch dran arbeiten - dachte daran, die Eingabefelder vor dem Absenden des Formulars auf Störfaktoren zu durchsuchen - muss man ja meist, ob ausgefüllt, ob nicht, ob wirklich Ziffern, wo eine Telefonnummer sein soll.

      Kommentar


      • #4
        Was du dir da basteln willst ist ein "neues" eigenes Dateiformat. Ich würde davon abraten, da du jeden noch so tollen Fall der eintreten könnte darauf validieren müsstes. Nutz bspw. eine einzige XML die die daten speichert:
        PHP-Code:
        <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
        <bemerkungen>
         <bemerkung>
          <autor>Horst Mustermann</autor>
          <eintrag>dies ist ein toller eintrag !</eintrag>
         </bemerkung>
         <bemerkung>
          <autor>Chris Mustermann</autor>
          <eintrag>dies ist ein toller eintrag !</eintrag>
         </bemerkung>
         <bemerkung>
          <autor>Martin Mustermann</autor>
          <eintrag>dies ist ein toller eintrag !</eintrag>
         </bemerkung>
         <bemerkung>
          <autor>Heinz Mustermann</autor>
          <eintrag>dies ist ein toller eintrag !</eintrag>
         </bemerkung>
        </bemerkungen>
        wichtig ist in jedemfall das du encoding types deinem browser aufzwingst, damit du immer daten im selben encoding vorliegen hast und keine probleme mit dem darstellen von sonderzeichen hast ( ä ü ö und sowas ). Dein Formtag sollte also auch einen encoding="UTF-8" Tag zur verwendung haben, oder welche "Norm" du auch immer nutzen willst ( ISO-xxxx-xx-xxx , google mal nach encoding types ).

        Prinzipiell ist es absolut egal wohin du speicherst, sendest oder was auch immer, das encoding sollte eindeutig identifizert werden können, da es sonst zu darstellungsfehlern kommen kann wenn ein browser der by default ISO-xxxx-xx-xxxx encoded ein utf-8 document bekommt das keine meta-angaben über das encoding noch irgendwelche web-server-header über das encoding empfangen hat.

        Du kannst natürlich statt in einer XML auch in einer SQLite oder MySQL-Datenbank speichern. In plain-text "Dingern" die auf nichts achten in ihrem Format zu speichern, halte ich aber für die schlechteste Idee.
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #5
          Spätestens wenn Du die Daten zurück in Felder schreiben willst - bspw. zum Editieren ein durchaus üblicher Anwendungsfall - fällt Dir das Textformat auf die Füße: Du musst dann alles wieder zurückwandeln. Das Problem was oben für die Pipes beschrieben wurde, gilt dann auch für die <br />. Original eingegebene <br /> können nicht durch nachträglich umgesetzte unterschieden werden. Auch für andere Eingabefelder musst Du übrigens alles prüfen. Ein normales Input-Feld garantiert nicht, dass nicht trotzdem Zeilenumbrüche oder HTML-Code eingegeben wird.

          Generell sind Textdatein nicht sehr zu Datenhaltung geeignet, weil Du immer Zeichenüberschneidung zwischen strukturellen Sonderzeichen (Umbrüche, Pipes) und Nutzdaten hast. Ist bei XML übrigens auch so, dort gibt es allerdings Spezifikationen für diese Sonderfälle (vgl. CDATA/PCDATA, Entities..)
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Ohje, php selber lernen ist scheinbar tierisch gefährlich - gibt ja irgendwo keine Übungsaufgaben, die man mit den bisher erlernten Anweisungen zu lösen hat - dann wüsste man irgendwie, wo die Grenzen des Machbaren liegen.

            Falls also mal einer was vorhat, an einer php-Lernseite zu verbessern: hätte da den Vorschlag, ein paar Übungsaufgaben zum selber knacken einzubauen - freilich bezahlt einem das wieder keiner - ja, und wie man das dann überprüfen will, ob es ordentlich gelöst wurde, ohne dass man das immer selbst begutachten muss - das wäre dann wohl schon ein Job für einen echten php-Guru.

            Aber, wegen Übungsaufgaben - vielleicht geht da was hier im Forum zu machen - einer, der eine Aufgabe stellt - drei Tage Zeit, damit jeder, der möchte, seine Lösung vorschlägt - und abschließend wird nur mitgeteilt - richtig oder falsch - ja, und dann schnell gelöscht, damit sich hier keiner fleißig gratis an der Arbeit anderer bedienen kann.

            Kommentar


            • #7
              Zitat von UdoDirk Beitrag anzeigen
              Ohje, php selber lernen ist scheinbar tierisch gefährlich - gibt ja irgendwo keine Übungsaufgaben, die man mit den bisher erlernten Anweisungen zu lösen hat - dann wüsste man irgendwie, wo die Grenzen des Machbaren liegen.

              Falls also mal einer was vorhat, an einer php-Lernseite zu verbessern: hätte da den Vorschlag, ein paar Übungsaufgaben zum selber knacken einzubauen - freilich bezahlt einem das wieder keiner - ja, und wie man das dann überprüfen will, ob es ordentlich gelöst wurde, ohne dass man das immer selbst begutachten muss - das wäre dann wohl schon ein Job für einen echten php-Guru.

              Aber, wegen Übungsaufgaben - vielleicht geht da was hier im Forum zu machen - einer, der eine Aufgabe stellt - drei Tage Zeit, damit jeder, der möchte, seine Lösung vorschlägt - und abschließend wird nur mitgeteilt - richtig oder falsch - ja, und dann schnell gelöscht, damit sich hier keiner fleißig gratis an der Arbeit anderer bedienen kann.
              Warum denn explizit keine Opensource an denen andere beispiele finden ? Was ich löschen würde wären die "Nee so nich"

              Ich mein mit den Lösungsansätzen & Beispielcodes machen wir hier doch nix anderes..
              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

              Kommentar

              Lädt...
              X