PHP - Formularfeld-Eintrag merken

  • Hallo, ich bin Neuling bei der PHP-Programmierung und arbeite zur Zeit das Tutorial

    "https://www.php-kurs.com" , das ich prima finde, durch.

    Aktuell bin ich bei der Formular-Auswertung unter:

    https://www.php-kurs.com/formularauswertung-mit-php.htm

    Das Script habe ich soweit verstanden, allerdings habe ich Probleme an folgendem Punkt:

    Wenn nicht alle Felder ausgefüllt wurden kommt eine Fehlermeldung, soweit ok.

    Wenn nur ein Feld ausgefüllt wurde, kann ich nicht bereits eingetragene Daten wieder eintragen.


    Hier mein Test-Script:


    <?php // Script-Anfang, muss immer in erste Zeile stehen!


    // Dateiname in Variable speichern

    $PHP_SELF = $_SERVER['PHP_SELF'];


    // wenn Feld Vorname leer ist

    if ( empty ($_GET['vorname']) == TRUE


    // oder

    or


    // wenn Feld Nachname leer ist

    empty ($_GET['nachname']) == TRUE )


    // dann ...

    {

    if ( $_GET['kontrolle'] == 1 )

    { echo "<p><b>Leere Felder z&WCF_AMPERSANDählen nicht,

    gehen Sie nicht &WCF_AMPERSANDüber Los, ziehen Sie keine ...</b></p>"; }


    echo '

    <!-- Script ruft sich selbst auf mit festem Dateinamen -->

    <!-- <form action="affenformular.php" method="get"> -->


    <!-- Script ruft sich selbst auf, auch wenn Name geaendert wurde -->

    <form action="'. $PHP_SELF .'" method="get" >


    <p>

    <input type="hidden" name="kontrolle" value="1">

    </p>


    <p>Ihr Vorname:

    <input type="text" name="vorname" size="50">

    </p>


    <p>Ihr Nachname:

    <input type="text" name="nachname" size="50">

    </p>


    <!-- bereits eingetragene Text erneut anzeigen -->

    if (!empty ($_GET['nachname']) == TRUE )

    {

    echo ($_GET['nachname']);

    }


    <p>Absendebutton:

    <input type="submit" value="absenden">

    </p>


    </form>

    ';


    }

    // ansonsten

    else

    {

    // beliebige Aktion, z. B. E-Mail senden, DB-Eintrag


    // Anzeige des eingetragenen Vornamen

    echo "eingetragener Vorname: " . $_GET['vorname'];


    // Zeilenumbruch

    echo "<br>";


    // Anzeige des eingetragenen Nachnamens

    echo "eingetragener Nachname: " . $_GET['nachname'];

    }

    ?>


    Leider kommt im Browser folgende Fehlermeldung:

    Parse error: syntax error, unexpected 'nachname' (T_STRING), expecting ',' or ';'


    wenn ich folgenden Bereich entferne, funktioniert das Script ohne Daten merken:

    <!-- bereits eingetragene Text erneut anzeigen -->

    if (!empty ($_GET['nachname']) == TRUE )

    {

    echo ($_GET['nachname']);

    }


    Wenn jemand eine Idee hätte, wäre super!

  • Hast du im Script hinter dem ersten TRUE eine Klammer ?


    edit: vergiss es, hab falsch gelesen.


    edit 2:

    Sicher, dass das


    Code
    if (!empty ($_GET['nachname']) == TRUE )
    {
    echo ($_GET['nachname']);
    }

    dahin gehört, wo es steht? Es steht mitten in der Ausgabe.

  • Zitat

    Parse error: syntax error, unexpected 'nachname' (T_STRING), expecting ',' or ';'

    Du hast php Code innerhalb eines Strings geschrieben, logischerweise erkennt PHP diesen nicht als Code.

    In Zeile 70 musst du die If Bedingung aus den Anführungszeichen entfernen.

    Ansonsten gibt es durch HTML5 besser Methoden, dafür zu sorgen, dass die Felder nicht leer abgeschickt werden. Ich verstehe das Skript nicht sonderlich.


    Hier mal ein paar Tipps, wie es besser geht:


    Du musst nach einem echo nicht alles in einen String packen. Du kannst auch das PHP schließen (?>) und dann normalen HTML Code schreiben. Danach öffnest Du wieder PHP (<?php). Das macht deinen Code übersichtlicher und man erkennt Fehler schneller.


    die empty() Funktion ist zwar ein wichtiger Bestandteil von PHP, allerdings kannst Du deine <input> Fleder durch das Attribut 'required' erweitern. Dadurch wird dein Formular gar nicht erst abgeschickt, wenn das Feld leer ist.


    Wenn Du Anführungszeichen innerhalb eines Strings setzen willst, musst Du vor diesen ein '\' setzen.


    PHP
    <?php echo "Hier kommen Anführungszeichen: \'Hallo!\'"; ?>


    Und hier dein echo in besser:


  • Hallo und willkommen im Forum,


    ich habe deinen Code jetzt einmal getestet und mir ist folgendes aufgefallen.

    Code
    if ( $_GET['kontrolle'] == 1 ){
        echo "<p><b>Leere Felder z&WCF_AMPERSANDählen nicht, gehen Sie nicht &WCF_AMPERSANDüber Los, ziehen Sie keine ...</b></p>";
    }

    Das funktioniert bei mir nicht.


    Das funktioniert nicht, da du PHP mit HTML ausgeben möchtest, ohne das ganze zu trennen. Funktionieren würde das so:

    Sprich du trennst das beides.


    Wenn ich das ganze jetzt zusammen packe, erhalte ich folgenden Code (der bei mir auch funktioniert, halt nur ohne Fehlermeldung).

    Und ich verstehe nicht, was du mit deiner Frage meinst: Wenn nur ein Feld ausgefüllt wurde, kann ich nicht bereits eingetragene Daten wieder eintragen.


    Gruss

    Zipity :)

  • Hier mal eine korrigierte Version mit Kommentaren

  • Hallo und vielen Dank für die Hilfe!

    Ich habe gelernt, das ich PHP von html besser trennen muss.


    Zipity:

    Wollte damit sagen, wenn nur ein Feld ausgefüllt wurde und die Seite erneut aufgerufen wurde, zeigte es nicht den bereits eingetragenen Wert des anderen Feldes erneut an. Hoffe ich konnte es jetzt besser erklären.


    m.scatello:

    Danke für dein Scriptvorschlag. Deinem Einverständnis vorausgesetzt hab ich das kopiert und mal getestet (Kl. Hinweisfenster öffnet sich).


    Das ich Formulare besser mit POST und nicht mit GET abschicken soll, habe ich auch gelernt. Nochmals danke an alle für eure Hilfe!

Jetzt mitmachen!

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