Formulardaten auch nach reload anzeigen

StupidBoy

Mitglied Gold
Hallo,
wieder mal sitze ich an einem kleinen Mailscript und habe ein Problem und weder die Boardsuche noch Google konnten mir bsiher helfen :(
Ich möchte, dass wenn ein User seine Daten nicht korrekt in das Formualr eingetragen hat und die Pflichtfeldkontrolle zuschlägt, dass die korrekten Daten nach dem reaload weiterhin eingetragen sind und nicht eingegeben werden müssen.
Das hab ich bis jetzt so gelöst, dass ich den Formularfeldern den die entsprechende Variable als Wert zugewiesen hab.
Das klappt soweit auch, nur bei der Textarea für die Nachricht an sich funktioniert es nicht.
Weiß jemand vielleicht wie ich das Problem umgehen kann?

Grüße

PHP:
	if ( isset( $_REQUEST["do"] ) && $_REQUEST["do"] == "check" )
	{
	  // Form was sent
	  $error_msg	=	"";
	    //Control form
        #Control name
        if ( !isset( $_REQUEST["name"] ) || $_REQUEST["name"] == "" )
		{
		  $error_msg	=	"<strong>Fehler:</strong> Bitte geben Sie Ihren Namen an.<br>";
		}
		#Control mail
	    if ( !ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $_REQUEST["email"]))
        {
		  $error_msg	.=	"<strong>Fehler:</strong> Bitte geben sie eine valide E-Mailadresse ein.<br />";
        }
        #Control message
		if ( !isset( $_REQUEST["msg"]) || $_REQUEST["msg"] == "" ) 
		{
	      $error_msg	.=	"<strong>Fehler:</strong> Bitte geben sie ihre Nachricht ein.<br />";
		}

Auszug aus dem Formular:
PHP:
<!--- Form Start -->
	<form action="<?php echo $_REQUEST["PHP_SELF"]; ?>" method="post" name="FormName">
[...]
<label>IhreNachricht<font color="#FF0000">*</font>: </label><textarea cols="40" rows="12" name="msg" value="<? echo $_REQUEST["msg"]; ?>" ></textarea>
 
<textarea> hat besitzt nicht das Attribut value="", es müsste so aussehen:
PHP:
<textarea cols="40" rows="12" name="msg"><? echo $_REQUEST["msg"]; ?></textarea>
 
Hallo!

Und was bitte soll
PHP:
<form action="<?php echo $_REQUEST["PHP_SELF"]; ?>" method="post" name="FormName">
ergeben?

Du meinst doch sicherlich eher
PHP:
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" name="FormName">
Gruss Dr Dau
 
Du solltest aus lieber auf die Werte des $_POST-Arrays zurückgreifen statt auf die des $_REQUEST-Arrays. Und auch das Ersetzen der HTML-Schlüsselzeichen durch Zeichenreferenzen (siehe htmlspecialchars()-Funktion) ist bei Formularen sinnvoll.
 
Dr Dau hat gesagt.:
Hallo!

Und was bitte soll
PHP:
<form action="<?php echo $_REQUEST["PHP_SELF"]; ?>" method="post" name="FormName">
ergeben?

Du meinst doch sicherlich eher
PHP:
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" name="FormName">
Gruss Dr Dau
Wieso nicht $_REQUEST["PHP_SELF"]?
Das funktioniert bei mir ohne Probleme, wo liegt der Vorteil wenn ich $_SERVER["PHP_SELF"] verwende? :confused:
Gumbo hat gesagt.:
Und auch das Ersetzen der HTML-Schlüsselzeichen durch Zeichenreferenzen (siehe htmlspecialchars()-Funktion) ist bei Formularen sinnvoll.
Meinst du ich soll alle Fehlermeldungen so aussehen lassen:
PHP:
$error_msg = htmlspecialchars("<strong>Fehler:</strong> ...blabla...<br>");
?
Gumbo hat gesagt.:
Du solltest aus lieber auf die Werte des $_POST-Arrays zurückgreifen statt auf die des $_REQUEST-Arrays.
Warum? Was hätte das für Vorteile?

Freue mich über Antworten damit ich wieder ein bisschen was lernen kann :)

Grüße
 
Ich bin mir da nicht so sicher dass $_REQUEST['PHP_SELF'] bei Dir funktioniert.
Es sei denn Du übermittelst PHP_SELF per $_GET, $_POST oder $_COOKIE.
Andernfalls wirst Du einen Hinweis bekommen, wenn Du mal mit error_reporting(E_ALL) arbeiten würdest.

Da es bei Dir im Formular als action steht gehe ich nicht davon aus dass Du PHP_SELF per $_GET, $_POST oder $_COOKIE übermittelst, sondern nehme eher an dass Du erreichen willst dass dort der Dateiname von dem Script erscheint.
Wenn dem so ist, solltest Du Dir mal den Quelltext ansehen den Dir der Browser beim aufrufen des Scripts liefert..... da wird sicherlich action leer sein.
Da action leer ist, weiss das Formular nicht wohin die Daten geschickt werden sollen und schickt sie somit an das gleiche Script.
 
Ich muss dir jetzt nicht ganz folgen können oder?
Ich kann nur sagen, dass bisher alles ankommt was abgeschickt wird ;-)
[...]sondern nehme eher an dass Du erreichen willst dass dort der Dateiname von dem Script erscheint.
Kann es sein, dass wir von grundsätzlich verschiedenen Dingen ausgehen? :confused:
Sinn des $_REQUEST["PHP_SELF"] ist es doch, die Seite einmal erneut aufzurufen um die Pflichtfeldkontrolle durchzuführen.
Endet diese mit einem positiven Ergebnis wird die Mail versand und der User zur nächsten Seite weitergeleitet.

Grüße

Hier mal der Code:
PHP:
<?php
	session_start();
	
	if ( isset( $_REQUEST["do"] ) && $_REQUEST["do"] == "check" )
	{
	  // Form was sent
	  $error_msg	=	"";
	    //Control form
        #Control name
        if ( !isset( $_REQUEST["name"] ) || $_REQUEST["name"] == "" )
		{
		  $error_msg	=	"<strong>Fehler:</strong> Bitte geben Sie Ihren Namen an.<br>";
		}
		#Control mail
	    if ( !ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $_REQUEST["email"]))
        {
		  $error_msg	.=	"<strong>Fehler:</strong> Bitte geben sie eine valide E-Mailadresse ein.<br />";
        }
        #Control message
		if ( !isset( $_REQUEST["msg"]) || $_REQUEST["msg"] == "" ) 
		{
	      $error_msg	.=	"<strong>Fehler:</strong> Bitte geben sie ihre Nachricht ein.<br />";
		}
			if ( $error_msg == "")
			{
			  //Define sessions
			  $_SESSION["name"]		=	$_REQUEST["name"];
			  [...]
		 	  $_SESSION["msg"]		=	$_REQUEST["msg"];
			  
			  //Define variables for mail
			  $to		=		$_SESSION["email"] . ', ';
			  $to		.=		"info@sl-pc-hilfe.de";
			  
			  $subject	=		"Anfrage an sl-pc-hilfe.de";
			  
			  $message	=		"Vielen Dank[...]";
			  
			  $headers  = 'MIME-Version: 1.0' . "\r\n";
			  $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
			  $headers .= 'From: sl-pc-hilfe.de <info@sl-pc-hilfe.de>' . "\r\n";
			  //Send mail
			  mail($to, $subject, $message, $headers);
			  
			  //Goto next page
			  header('Location:kontakt2.php');
			  exit();
			}	  
    }
    include('header.tpl');
?>
<!--- Form Start -->
	<form action="<?php echo $_REQUEST["PHP_SELF"]; ?>" method="post" name="FormName">
[...das Formular...]
		<tr><td><input type="hidden" name="do" value="check"></td></tr>
		<td><input type="submit" name="submitButtonName" value="Absenden" /></td>
		</table>
	</form>
	<!--- Form End-->
	<?php
		include('footer.tpl');
	?>
 
StupidBoy hat gesagt.:
Sinn des $_REQUEST["PHP_SELF"] ist es doch, die Seite einmal erneut aufzurufen um die Pflichtfeldkontrolle durchzuführen.
Und genau dafür wurde $_SERVER['PHP_SELF'] "erfunden". ;)

Und wie ich gesagt habe, action="" ist leer..... daher schickt das Script die Daten an sich selbst.
Da das Ziel in action nicht definiert ist, könnte es evtl. zu Problemen führen (muss aber nicht).
Wie gesagt, schaue dir den Quelltext vom Browser an.....
Ergebnis:
HTML:
<form action="" method="post" name="FormName">
Würdest Du $_SERVER['PHP_SELF'] benutzen, würde der Pfad und Dateiname vom selbigem Script im action stehen..... mit abschicken des Formulars ruft sich das Script also selbst wieder auf (um die Pflichtfelder zu prüfen).

Ausserdem wird $_REQUEST['PHP_SELF'] bemängelt:
error_reporting(E_ALL) hat gesagt.:
Notice: Undefined index: PHP_SELF in ........
Warum wohl?! ;)
 
Zurück