Formulareingaben checken ohne JavaScript-geht das?

Herbert02

Grünschnabel
Hallo Leute,

ich möchte in ein PHP-Script (script01.php) ein Formular einbauen, das per POST-Methode Daten an ein zweites Script (script02.php) übergibt. Der Code schaut ungefähr so aus:

<form action = "script02.php method = "post">
<input type = "text" name = "name01">
<input type = "text" name = "name02>
<input type = "text" name = "senden" value = "Senden">
</form>

Die Eingabewerte sollen nach Möglichkeit noch im script01 geprüft werden, d.h. bevor das script02.php aufgerufen wird. D.h. der Aufruf von script02.php sollte erst dann erfolgen, wenn die Eingabefelder gecheckt wurden und OK sind. Geprüft werden soll, ob die Felder überhaupt ausgefüllt wurden und die Eingabewerte in einem bestimmten Wertebereich liegen.

Bisher habe ich nur Lösungen gesehen, die auf JavaScript zurückgreifen.
Ich möchte dieses Problem jedoch nach Möglichkeit nur mit PHP, d.h. ohne JavaScript lösen.

Meine Frage: Geht das überhaupt? Kennt jemand eine Lösungsmöglichkeit dieses Problems ohne JavaScript?

Vielen Dank und viele Grüße
Herbert
 
Das geht nicht ohne Reload mit PHP, da PHP serverseitig arbeitet und von den Aktionen auf dem Client nichts mitbekommt.
Eine Lösungsmöglichkeit wäre, das Formular auf dieselbe Seite leiten zu lassen.
Dort prüfst Du zunächst, ob das Formular überhaupt abgeschickt wurde (isset($_POST['nameDesAbsendenButtons'])) und dann die Felder und Wertebereiche. Stimmen diese, verarbeitest Du sie. Stimmen sie nicht oder wurde das Formular noch gar nicht abgeschickt, gibst du das Formular (mit den bereits gesendeten falschen Werten) aus und kannst auch noch einen Fehler-Hinweis dazu tun.

Gruß hpvw
 
Hallo hpvw,
sorry (wahrscheinlich stehe ich auf dem Schlauch), aber was meinst Du mit, "das Formular auf dieselbe Seite leiten zu lassen"? Ist damit der Selbstaufruf (<form action="<?php echo $PHP_SELF ?>"...</form> gemeint?

Der von Dir geschilderte Ablauf ist mir leider noch nicht ganz klar. Könntest Du das bitte noch etwas näher erläutern?

Danke im Voraus
Herbert
 
Ich glaube, er meint das so.
PHP:
if(isset($_POST['submit']))
{
if($_POST['bsp_text'] !== "" AND $_POST...)// ALLE Felder überprüfen
{
//Inhalte der Eingabefelder verarbeiten
}
else
{
//Formular ausgeben mit den vorhandenen Werten, also bei jedem Eingabefeld als value $_POST['NAME_DES_FELDES'] angeben
}
}
else
{
//Formular normal ausgeben
}

Hab das hoffentlich richtig verstanden-

Ja mit "auf dieselbe Seite leiten" ist action="<?echo $PHP_SELF; ?>" gedacht.

Hoffentlich habe ich da jetzt keinen Schrott verzapft, bei dem was ich hier geschrieben habe :D!

mb fanste
 
Vielleicht hilft ein Beispiel, damit sparst Du Dir mehrfache Änderungen am Formular, da es nur einmal im Code auftaucht:
PHP:
<?php
$errors=array();

//Prüfen ob das Formular abgesendet wurde
if (isset($_POST['absenden'])) {

    //Validitätsprüfungen:
    
    //Ist Name angegeben?
    if (strlen(trim(stripslashes($_POST['name'])))==0) {
        $errors[] = 'Kein Name angegeben.';
    }
    
    //Ist E-Mail angegeben? Wenn Ja, ist es denn auch eine E-Mail?
    if (strlen(trim(stripslashes($_POST['email'])))==0) {
        $errors[] = 'Keine E-Mail angegeben.';
    } else if (!preg_match("/^[a-zA-Z0-9_\.\-]+"
            ."@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",
            stripslashes( $_POST['email']))) {
        $errors[] = 'Die angegebene Adresse scheint keine'
                .'E-Mail-Adresse zu sein.';
    }
    
    //Wenn keine Fehler erkannt wurden,
    //kann in die Datenbank eingetragen
    //oder die Formulardaten sonstwie verarbeitet werden
    if (count($errors)==0) {
        echo "Hier die Formulardaten verarbeiten.";
    }
}

//Wenn es Fehler gab oder das Formular noch nicht gesendet wurde
//muss es angezeigt werden:
if (count($errors)>0 || !isset($_POST['absenden'])) {
    //Ausgabe der Fehlermeldungen:
    foreach ($errors as $error) {
        echo '<p class="error">'.$error.'</p>'."\n";
    }
    //Ausgabe des Formulars
    echo '<form action="'.basename($_SERVER["PHP_SELF"])
        .'" method="post">'."\n";
    echo '<p>Name:<br /><input type="text" name="name" value="'
        //Ausgabe des Values, wenn es denn
        //schonmal abgeschickt wurde:
        .(isset($_POST['name'])?stripslashes($_POST['name']):'')
        .'" /></p>'."\n";
    echo '<p>E-Mail:<br /><input type="text" name="email" value="'
        //Ausgabe des Values, wenn es denn
        //schonmal abgeschickt wurde:
        .(isset($_POST['email'])?stripslashes($_POST['email']):'')
        .'" /></p>'."\n";
    //Der Sendenbutton mit entsprechendem Namen:
    echo '<p><input type="submit" name="absenden" '
        .'value="Und los!" /></p>'."\n";
    echo '</form>';
}
?>
 
Wenn wir schon dabei sind:
Kann mir jemand erklären, warum bei mir PHP_SELF nicht funktioniert?
Hab es schon in allen möglichen schreibweisen, die ich hier im Forum gefunden habe, versucht, doch es klappt nicht. Kommt immer eine leere Seite nach dem Aufruf.
 
Was gibt er denn aus, wenn Du echo $_SERVER["PHP_SELF"]; in Deiner Datei stehen hast?
Auf meinem Windows-Test-Server mit PHP 5 hat er auch den Pfad mit angegeben, was zur direkten Verwendung in einem relativen Formularziel äußerst schädlich ist. Daher habe ich den String mit [phpf]basename[/phpf] auf den Dateinamen reduziert.

Gruß hpvw
 
Leere Seite?
Das muss nicht falsch sein. Wenn kein Fehler existiert und keine HTML-Ausgabe bei erfolgreichem submit stattfindet, dann gibts auch keinen Code, den der Browser darstellen könnte.
Mach mal nach dem INSERT oder mail(), oder was auch immer du hast, ein
PHP:
echo('erfolgreich');
 
Da hat Ceraph wohl recht, sonst würde ja ein 404-Fehler kommen und keine leere Seite.

Gruß hpvw
 
Hallo hpvw und fanste,

ich habe den Code in mein script eingebaut und das Formular arbeitet genau so, wie ich mir das vorgestellt habe (ohne JavaScript).

Vielen Dank für Eure Hilfe

Herbert
 
Zurück