PHP-Kurs Affenformular Notiz wird in das Namenfeld übernommen

  • Ich möchte PHP lernen und arbeite gerade den PHP-Kurs durch. (DVD und e-Book). Beim Affenformular wird u.a. Notiz in das Feld Vorname und Nachname übertragen. Auch wie auf der Webseite und im e-Book beschrieben mit "empty" und "!isset" lässt sich diese Meldung im Feld Vorname und Nachname nicht unterdrücken. Gibt es noch andere Möglichkeiten diese Meldung zu unterdrücken? Wo ist mein Fehler? Das komplette Scrip zum Affenformular ist 1zu1 von der DVD übernommen. Unter nur der Ausschnitt von den Zeilen und wie es sich im Browser darstellt. Ich habe auch gelesen, dass diese Meldungen wenn sie Online gestellt sind von Nuter nicht gesehen werden und ein leeres Formular zum ausfüllen sieht. Ist das richtig? Wer kann mir helfen.


    43 <p>Vorname:<br />
    44 <input type="text" name="vorname" value="<?php echo $_GET['vorname']; ?>" size="120" maxlength="150"/>
    45 </p>
    46
    47 <p>Nachname:<br />
    48 <input type="text" name="nachname" id="nachname" value="<?php echo $_GET['nachname']; ?>" size="120" maxlength="150"/>
    49 </p>



    Vorname:
    Notice: Undefined index: vorname in E:\xampp-portable\htdocs\formular1.php on line 44
    " maxlength="150" size="120" name="vorname">


    Nachname:
    Notice: Undefined index: nachname in E:\xampp-portable\htdocs\formular1.php on line 48
    " maxlength="150" size="120" name="nachname">

  • Hi,
    1) Den eigenen Code lesbar im Forum präsentieren, wäre schön, wenn du das in Zukunft beherzigen würdest


    2) Ein sog. "undefined index" sagt dir, dass es diese Variable noch gar nicht gibt. Deshalb funktionieren auch empty() und isset() nicht; wie willst du was prüfen, was es gar nicht gibt?
    Die einfachste Lösung des Problems ist, ganz am Anfang des Skripts einfach die zwei Variablen zu erstellen:

    PHP
    <?php
    $vorname = "";
    $nachname = "";
    
    
    
    
    /*
     * Rest vom Code
     */


    Dann muss aber auch das Vorhandensein eines Eintrages anders geprüft werden, was bei solchen Formularfeldern zukünfitg sowieso empfehlenswert ist:


  • 2) Ein sog. "undefined index" sagt dir, dass es diese Variable noch gar nicht gibt. Deshalb funktionieren auch empty() und isset() nicht; wie willst du was prüfen, was es gar nicht gibt?


    Sorry, aber das stimmt so nicht. Mit isset() überprüft man ja gerade das Vorhandensein einer Variablen.


    Das Formular könnte so aussehen:

    HTML
    <p>Vorname:<br />
        <input type="text" name="vorname" value="<?php if (isset($_GET['vorname']) && !empty($_GET['vorname'])) { echo $_GET['vorname']; } ?>" size="120" maxlength="150"/>
    </p>
    
    
    
    
    <p>Nachname:<br />
        <input type="text" name="nachname" id="nachname" value="<?php if (isset($_GET['nachname']) && !empty($_GET['nachname'])) { echo $_GET['nachname']; } ?>" size="120" maxlength="150"/>
    </p>


    Das Umkopieren in Variablen ist hier auch unnötig.

  • Das Umkopieren in Variablen ist hier auch unnötig.


    Kann man sich streiten.
    Aber was liest sich besser: Deine Variante, oder


    Btw: ich empfehle kein empty(). Besser: strlen()
    Warum? Name "0" wäre leer, also empty(0) === true.
    siehe: [erledigt]POST-Variablen nie empty?


    Wichtig:
    Benutzereingaben (GET, POST, Datenbankeinträte, Dateiinhalte ect ect) maskiert ausgeben um XSS (cross site scripting) zu vermeiden.
    Wie? htmlspecialchars()
    Am Bsp.:

    PHP
    <p>Vorname:<br />
        <input type="text" name="vorname" value="<?php echo htmlspecialchars($vorname); ?>" size="120" maxlength="150"/>
    </p>
    
    
    
    
    <p>Nachname:<br />
        <input type="text" name="nachname" id="nachname" value="<?php echo htmlspecialchars($nachname); ?> ?>" size="120" maxlength="150"/>
    </p>

  • Aber was liest sich besser: Deine Variante, oder


    Das ist Ansichtssache. Eigentlich kopiert man die Variablen nur um, wenn man die Variablen ändert, sprich zur weiteren Verwendung zum Beispiel für einen Datenbankeintrag oder ähnliches. Hier wäre die Behandlung anders als zum Beispiel zur HTML Ausgabe, wo man die Variablen mit htmlspecialchars() ausgibt.

  • Das ist Ansichtssache. Eigentlich kopiert man die Variablen nur um, wenn man die Variablen ändert, sprich zur weiteren Verwendung zum Beispiel für einen Datenbankeintrag oder ähnliches.


    Und was passiert hier?


    Code
    [...] echo $_GET['nachname']; } ?>" size="120" maxlength="150"/> [...]


    Ich sehe eine Ausgabe. Außerdem geht es dabei um 2 Punkte:


    1. Lesbarkeit, cotttons Variante lässt sich deutlich leichter lesen, in größeren Projekten wirst du verzweifeln wenn du nach Wochen eine Datei ändern möchtest in der du deine Usereingaben nicht zwischenspeicherst.


    2. Logik, wir halten CSS konsequent aus HTML heraus und verzichten auf inline Scripts, PHP Operationen, abgesehen von der Ausgabe, gehören nicht zwischen HTML Quellcode, das ist Sache des sauberen Codings; andere Programmiersprachen lassen das auch nicht zu. Darum ist ja auch jeder PHP-Neuling verwirrt wenn er sich JavaScript anguckt.


  • 1. Lesbarkeit [...]


    Würde ich so nicht stehen lassen. Gerade das reine Umkopieren verschleiert die Herkunft der Variablen bei späterer Verwendung im Code. Gib mal ein Beispiel was Du meinst mit verzweifeln?



    2. Logik [...]


    Was hat das jetzt mit dem Umkopieren von POST Variablen zu tun?

  • Was hat das jetzt mit dem Umkopieren von POST Variablen zu tun?


    Hallo,


    Basiii spielt wohl oben darauf an das du die Logik und die Verarbeitung der Daten direkt im Formular vornimmst was eigentlich
    bad practice ist. IM HTMl sollen nur reine Ausgaben und keine Programmstrukturen vorkommen.


    Schau dir hierzu mal das EVA-Prinzip(Standardverfahren) an,
    gegen dies sowas wie oben klar verstößt. :)


    mfg Nita

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!