textarea: per POST Text eingeben und wieder senden => senden funktioniert nicht

acquire

Mitglied
Hallo,

ich habe ein Formular, welches einem Nutzer eine Frage stellen lässt. Falls bei der Formularüberprüfung ein Fehler bemerkt wird, wird eine Variante des gleichen Formulars gezeigt, bei dem per POST die zuvor eingegebenen Werte eingefügt wurden. Jetzt kann der Benutzer seine Eingabe korrigieren und erneut abschicken.
Dies funktioniert bei den Input-Feldern, aber nicht bei textarea. Dort wird nichts gesendet.

Das erste Formular (funktioniert)
PHP:
<form action="index.php" method="post">
<h2>'.$txt['13'].'</h2>
<div>
    <label for="name">'.$txt['08'].'</label>
    <input type="text" name="name" id="name">
    <label for="email">'.$txt['09'].'</label>
    <input type="text" name="email" id="email">
    <label for="frage">'.$txt['10'].'</label>
    <textarea name="frage" rows="5" cols="50" id="frage"></textarea>
    <span class="text">'.$txt['15'].'</span>
    <input type="hidden" name="action" value="neu" class="n">
    <input type="submit" name="submit" value="'.$txt['11'].'" class="button1">
    <input type="reset" name="submit" value="'.$txt['12'].'" class="button2">
    <div class="ende"></div>
  </div>
</form>

Wenn unter ?action=neu die Fehlerüberprüfung einen Fehler erkennt wird folgende Funktion ausgelöst:

PHP:
function inputerror($error,$nr) { #$nr gibt an, an welcher Formularstelle ein Fehler ist, $error ist der Fehlertext
	switch ($nr) {
	case 1:
	   $css1='style="background-color: ff0; color: ff0000;"';
	   break;
	case 2:
	   $css2='style="background-color: ff0; color: ff0000;';
	   break;
	case 3:
	   $css3='style="background-color: ff0; color: ff0000;';
	   break;
	}
	echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
  </head>
 <body>
<form action="index.php" method="post">
<h2 style="color: ff0000;">'.$error.'</h2>
<div>
    <label for="name">'.$txt['08'].'</label>
    <input '.$css1.' type="text" name="name" id="name" value="'.input($_POST['name']).'">
    <label for="email">'.$txt['09'].'</label>
    <input '.$css2.' type="text" name="email" id="email" value="'.input($_POST['email']).'">
    <label for="frage">'.$txt['10'].'</label>
    <textarea '.$css3.' name="frage" rows="5" cols="50" id="frage">'.$_POST['frage'].'</textarea>
    <span class="text">'.$txt['15'].'</span>
    <input type="hidden" name="action" value="neu" class="n">
    <input type="submit" name="submit" value="'.$txt['11'].'" class="button1">
    <input type="reset" name="submit" value="'.$txt['12'].'" class="button2">
    <div class="ende"></div>
  </div>
</form>
 </body>
</html>';
}

Mein Problem ist jetzt, dass bei diesem Formular !isset( $_POST['frage']) true ist. Aber nur, wenn der Text bei der Fehlerprüfung nach absenden des ersten Formulars nicht richtig ist und verbessert werden muss!


Im Forum bin ich leider über die Suche auf keine passende Lösung gestoßen.
Ich hoffe es weiß jemand Rat oder hat einen hilfreichen Link.

Gruß, acquire
 
Hallo,

sorry verstehe dein Script nicht ganz, poste es doch mal komplett. Warum schreibst du alles doppelt und nicht einfach so z.B.

PHP:
<input '.$css1.' type="text" name="name" id="name" value="'.(isset($_POST['name'])) ? $_POST['name'] : ''.'">
 
Das Hauptscript

PHP:
<?php
ob_start();
require("sqlconfig.php");
require("txt.php");
require("var.php");
include("functions.php");

db_conn($dbName);

// Header auch in function inputerror
$header='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
  <title>'.$title.'</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link href="style.css" type=text/css rel=stylesheet>
  </head>
 <body>';


if ($a=='fehler') {
}
elseif ($a=='neu') {
	if(get_magic_quotes_gpc()) { // Backslashes entfernen, falls PHP Automatik an
	  array_stripslashes($_GET);
	  array_stripslashes($_POST);
	  array_stripslashes($_COOKIE);
	}

	$datum = time();
	$browser = getenv("HTTP_USER_AGENT");
	$ip = getenv("REMOTE_ADDR");

	if(!isset($_POST['name'], $_POST['email'], $_POST['frage'])) { die($txt['e06'].$txt['16']); }

	if(trim($_POST['name']) == "") {
			die(inputerror($txt['e02'],1)); }
	$_POST['email'] = str_replace(" ", "", $_POST['email']); 
	if (trim($_POST['email']) != "") {
		if (checkEmail(trim($_POST['email']))) {}
		else { die(inputerror($txt['e04'],2)); }}
	$_POST['email'] = input($_POST['email']);
	if(trim($_POST['frage']) == "") {
			die(inputerror($txt['e03'],3)); }
	else {
	if(strlen($_POST['frage']) < 10) {
			die(inputerror($txt['e03'],3)); }
	}
	$_POST['name'] = input($_POST['name']);
	$browser = input($browser);
	$ip = input($ip);

	$frage = wordwrap($_POST['frage'],$einstellungen['max_word'],' ',1);
	$frage = input($frage);

		$sql = "INSERT INTO $table VALUES('', '".mysql_real_escape_string($_POST['name'])."', '".mysql_real_escape_string($_POST['email'])."', '".mysql_real_escape_string($frage)."', '', '$datum', '$browser', '$ip')"; //zuvor: addslashes() statt mysql_real_escape_string

		mysql_query($sql) OR die(MysqlError());

		echo $header.'
		<h2 class="antw">'.$txt['14'].'</h2>';
		
	
} /* neu ENDE */
else {
echo $header.'

<a name="neu"></a>
<form action="index.php" method="post">
<h2>'.$txt['13'].'</h2>
<div>
    <label for="name">'.$txt['08'].'</label>
    <input type="text" name="name" id="name">
    <label for="email">'.$txt['09'].'</label>
    <input type="text" name="email" id="email">
    <label for="frage">'.$txt['10'].'</label>
    <textarea name="frage" rows="5" cols="50" id="frage"></textarea>
    <span class="text">'.$txt['15'].'</span>
    <input type="hidden" name="a" value="neueFrage" class="n">
    <input type="submit" name="submit" value="'.$txt['11'].'" class="button1">
    <input type="reset" name="submit" value="'.$txt['12'].'" class="button2">
    <div class="ende"></div>
  </div>
</form>';
}
// HTML-Seitenende - auch in function inputerror!
echo '

 </body>
</html>';

db_close();

?>

Die Funktion, in der das Formular nochmal ist (daher doppelt) aus der functions.php:
PHP:
function inputerror($error,$nr) { #$nr gibt an, an welcher Formularstelle ein Fehler ist, $error ist der Fehlertext
    switch ($nr) {
    case 1:
       $css1='style="background-color: ff0; color: ff0000;"';
       break;
    case 2:
       $css2='style="background-color: ff0; color: ff0000;';
       break;
    case 3:
       $css3='style="background-color: ff0; color: ff0000;';
       break;
    }
    echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
  </head>
 <body>
<form action="index.php" method="post">
<h2 style="color: ff0000;">'.$error.'</h2>
<div>
    <label for="name">'.$txt['08'].'</label>
    <input '.$css1.' type="text" name="name" id="name" value="'.input($_POST['name']).'">
    <label for="email">'.$txt['09'].'</label>
    <input '.$css2.' type="text" name="email" id="email" value="'.input($_POST['email']).'">
    <label for="frage">'.$txt['10'].'</label>
    <textarea '.$css3.' name="frage" rows="5" cols="50" id="frage">'.$_POST['frage'].'</textarea>
    <span class="text">'.$txt['15'].'</span>
    <input type="hidden" name="action" value="neu" class="n">
    <input type="submit" name="submit" value="'.$txt['11'].'" class="button1">
    <input type="reset" name="submit" value="'.$txt['12'].'" class="button2">
    <div class="ende"></div>
  </div>
</form>
 </body>
</html>';
}
 
Zurück