Formular action-Attribut mit if-Abfrage

dsancez

Grünschnabel
Hallo,

ich habe eben gesucht aber leider nichts entsprechendes gefunden. Auch unter Google finde ich keine passenden Einträge.

Vielleicht könntet ihr mir helfen.

Ich habe ein Formular in HTML erstellt und möchte nun bei fehlerhafter Eingabe (beispielsweise) der Postleitzahl das Formular an sich selbst schicken lassen (mittels <?php echo "$_SERVER['SELF_PHP']";?>) und falls die Eingabe richtig ist ... an richtig.php weiterleiten.

Funktioniert das mit einer If-Abfrage?
Ich habs bei mir ausprobiert, bekomme es aber irgendwie nicht hin.

Wäre nett, wenn ihr mir helfen könntet.

Vielen Dank
MfG
DSancez
 
Am besten ist es, ein Formular in eine Funktion zu packen:

PHP:
function createUserForm()
{
     ?>
<form action="blub.php" method="post">
 <input type="text" name="plz" value="<?php echo $_POST['plz']?>"/>
 <input type="submit"/>
</form>
     <?php
}

Wenn ein Fehler aufgetreten ist, rufst du die Funktion einfach noch mal auf, dank dem echo $_POST['welches_feld_auch_immer'] werden die Daten wieder in das Formular reingeschrieben.

Du kannst auch gleich eine Klasse für sowas nehmen, z.B. PEAR::HTML_QuickForm2.

Have fun!
 
Wie soll denn was ausgegeben werden wenn noch nichts ausgegeben wurde

PHP:
<?php

function createUserForm()
{
     ?>
<form action="blub.php" method="post">
<input type="text" name="plz" value="
<?php if(isset($_POST['plz']) && !empty($_POST['plz']) ) { echo $_POST['plz'] }?>"/>
 <input type="submit"/>
</form>
     <?php
}
?>

MfG
KD3
 
Hi,

vielen Dank erstmal für die Antworten.
Eure Vorschläge schicken aber die Variablen an die blubb.php

Ich konkretisiere meine Frage noch einmal etwas ;)

Code:
<form action="<?php echo "$_SERVER['SELF_PHP']"; ?>" method="POST">
<input type="text" name="plz" value="
<?php if(isset($_POST['plz']) && !empty($_POST['plz']) ) { echo $_POST['plz'] }?>" />Bitte PLZ eintragen
 <input type="submit"/>
</form>

so hatte ich mir das überlegt und möchte nun also, wenn denn die Daten falsch sind ... den Text "Bitte PLZ eintragen" rot färben. Falls jedoch das Feld nun nicht leer ist ... soll das ganze an richtig.php übermittelt werden (nach Klicken auf submit).

Also dachte ich mir ...
Code:
<form action="<?php 
if(isset($_POST['plz'] && !empty($_POST['plz']))
{
echo "richtig.php" 
}
else
{
echo "$_SERVER['SELF_PHP']";
}" 
method="POST">
<input type="text" name="plz" value="
<?php if(isset($_POST['plz']) && !empty($_POST['plz']) ) { echo $_POST['plz'] }?>" />Bitte PLZ eintragen
 <input type="submit"/>
</form>

Bei mir hat das aber leider nicht get ... geht denn eine if-Abfrage innerhalb des action-Attributes?

Wenn nein, dann wäre ich natürlich sehr an alternativen interessiert :D

Ich will nicht automatisch auf die richtig.php kommen, sobald ich auf submit geklickt habe.
Erst soll überprüft werden, ob das Feld leer ist und falls ja ... an sich selbst eine Fehlermeldung schicken .. nur im Falle, dass das Feld ausgefüllt wurde, soll die Weiterleitung geschehen.

Vielen Dank nochmal
MfG
DSancez
 
Du musst ja schon in einem PHP-Dokument was gesetzt haben um überhaupt eine $_POST-Varibale zu haben :) Wenn du direkt im Action-Attribute schon anfängst mit Kontrollstrukturen zu überprüfen ob was gesetzt ist dann wird sowieso nichts gesetzt sein weil dies der anfang ist und noch nicht auf das Submit-Button draufgeklickt wurde :)

PHP:
<?php

$fehler = "";

if(empty($_POST['plz']) || !isset($_POST['plz']) && isset($_POST['submit']) && !is_array($_POST['plz'])) {

$fehler .= "<span style=\"color: #FF0000\">FEHLER! Bitte überprüfe deine Angaben</span>";

} 

if(!empty($fehler) ) { echo $fehler;  }

?>
<html>
<head>
<title>TITEL</title>
</head>
<body>
<form action="<?php { echo htmlspecialchars($_SERVER['PHP_SELF']); } ?>" method="post">
<input type="text" name="plz" value="
<?php if(isset($_POST['plz']) && !empty($_POST['plz']) ) { echo htmlspecialchars($_POST['plz']) }?>" />Bitte PLZ eintragen
 <input type="submit" name="submit" value="Senden!"/>
</form>
</body>
</html>

Ich denke mal jetzt ist alles geklärt :) Wenn es nicht so sein sollte frag einfach ;)

MfG
KD3
 
Soweit ist alles klar. Vielen Dank erstmal.

Aber wie kann ich denn jetzt, wenn die $_POST['plz'] korrekt (also keinen Fehler verursacht) diese Variable an eine andere Datei übergeben?

Ich habe natürlich nicht nur $_POST['plz'], sondern auch $_POST['ort'], usw. ...

Ich hatte überlegt eine Variable (z.B. $allesok) zu erstellen und diese zählen zu lassen ...

Und wenn dann $allesok== 6 (beispielsweise) dann übergib $_POST['plz'], $_POST['ort'], usw. an richtig.php

Mir ist nur unklar wie .. bzw. ob das überhaupt geht.

Vielen Dank für eure Hilfe
MfG
DSancez
 
Ich denke mal es wird so funktionieren :) Beachte, dass alle Scripts die ich hier schreibe garnicht teste...

PHP:
<?php
ob_start();
session_name('s'); // Setzung des Sessionnamens
session_start(); // Starten einer Session

$s = session_name(); // Liefert den Sessionnamen
$sessid = session_id(); // Sagt alles :D

$fehler = ""; // Fehlerkontroll-Variable :)

if(empty($_POST['plz']) || !isset($_POST['plz']) && isset($_POST['submit']) && !is_array($_POST['plz']) && is_numeric($_POST['plz'])) {

$fehler .= "<span style=\"color: #FF0000\">FEHLER! Du hast vergessen die Postleitzahl einzugeben!</span><br />";

} 

if(empty($_POST['ort']) || !isset($_POST['ort']) && isset($_POST['submit']) && !is_array($_POST['ort']) ) {

$fehler .= "<span style=\"color: #FF0000\">FEHLER! Du hast vergessen ein Ort einzugeben!</span><br />";

} 

if(!empty($fehler) ) { echo $fehler;  }

if(empty($fehler) && isset($_POST['plz']) && !empty($_POST['plz']) && isset($_POST['submit']) && !is_array($_POST['plz']) ) {

$_SESSION['ort'] = htmlspecialchars($_POST['ort']);
$_SESSION['plz'] = htmlspecialchars($_POST['plz']);

if($_SESSION) {

header("Location: richtig.php?$s=$sessid ");

}

}

?>
<html>
<head>
<title>TITEL</title>
</head>
<body>
<form action="<?php { echo htmlspecialchars($_SERVER['PHP_SELF']); } ?>" method="post">
PLZ: <input type="text" name="plz" value="
<?php if(isset($_POST['plz']) && !empty($_POST['plz']) ) { echo htmlspecialchars($_POST['plz']) }?>" /><br />
Ort: <input type="text" name="ort" value="
<?php if(isset($_POST['ort']) && !empty($_POST['ort']) ) { echo htmlspecialchars($_POST['ort']) }?>" /><br />
 <input type="submit" name="submit" value="Senden!"/>
</form>
</body>
</html>
<?php

ob_end_flush();

/*
* Ich gebe keine Garantie das dieses Script einwandfrei funktionieren kann, 
* denn ich habe es nicht getestet weil ich leider keine Zeit dafür habe, 
* sorry.. aber ich denke es sollte gehen
*/

 ?>

MfG
KD3
 
Zurück