Zur Navigation

Bei Fehlermeldung sollen Eingaben in Formular erhalten bleiben

1 andehrl

ich habe auf dieser seite allerdings noch folgendes problem. wenn ein nutzer durch seine eingaben bei der registrierung eine fehlermeldung erzeugt muss er immer wieder das gesamte formular von vorne ausfüllen. das kann ihm bei einem schon vorhandenen nutzernamen, einer doppelten email oder einer falscheingabe des captchacode passieren und ist natürlich nicht besonders benutzerfreundlich, weil ggfs nervend. als nutzer ist mir das schnell zu viel und ich gehe halt wieder.
kann ich das so umgestalten das die eingegebenen daten abgesehen von den fehlerhaften eingaben in den feldern erhalten bleiben oder könnte ich die prüfung der feldeingaben schon beim verlassen des feldes starten?

hier ist noch mal der code:

session_start();
$error = '';
if (isset($_SESSION['captcha_spam']) && $_POST["sicherheitscode"] == $_SESSION['']) {
    $error = '';
} else {
     if (isset($_SESSION['captcha_spam']) && $_POST["sicherheitscode"] != $_SESSION['captcha_spam']) {
    $error = 'Der Sicherheitscode ist falsch';
} else {

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {

mysql_select_db($database_Registrierung, $Registrierung);
$result = mysql_query("SELECT nutzername FROM login WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
if (mysql_num_rows($result) > 0) {
    $error = 'Dieser Nutzername ist bereits vergeben. Bitte versuchen Sie es mit einem anderen Namen.';
} else {
    $result = mysql_query("SELECT mail FROM login WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error = 'Diese Emailadresse ist bereits vergeben. Bitte versuchen Sie es mit einer anderen E-Mail.';
    }
	}
	}
	echo mysql_error();
}
echo mysql_error();


if ($error == "") {
    $insertSQL = sprintf("INSERT INTO login (vornachname, nutzername, passwort, mail, handy) VALUES (%s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['vornachname'], "text"),
                       GetSQLValueString($_POST['nutzername'], "text"),
                       GetSQLValueString($_POST['passwort'], "text"),
                       GetSQLValueString($_POST['mail'], "text"),
                       GetSQLValueString($_POST['handy'], "text"));
  
  $Result1 = mysql_query($insertSQL, $Registrierung) or die(mysql_error());

  $insertGoTo = "8cSieSindEingeloggt.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
}

11.12.2010 17:16

2 Jörg Kruse

Du kannst Formularfelder vorbelegen.

Die Vorbelegungs-Variable kannst du z.B. so definieren, dass sie den übermittelten Wert enthält, falls vorhanden, und ansonsten leer ist:

if (isset($_POST['irgendwas'])) {
    $irgendwas = htmlspecialchars($_POST['irgendwas']);
} else {
    $irgendwas = '';
}

Weiter unten kannst du sie dann zur Vorbelegung verwenden:

<input type="text" name="irgendwas" value="<?php echo $irgendwas ?>" />

11.12.2010 21:27 | geändert: 11.12.2010 21:29

4 andehrl

Zitat von Jörg
Du kannst Formularfelder vorbelegen.

Die Vorbelegungs-Variable kannst du z.B. so definieren, dass sie den übermittelten Wert enthält, falls vorhanden, und ansonsten leer ist:

if (isset($_POST['irgendwas'])) {
    $irgendwas = htmlspecialchars($_POST['irgendwas']);
} else {
    $irgendwas = '';
}

Weiter unten kannst du sie dann zur Vorbelegung verwenden:

<input type="text" name="irgendwas" value="<?php echo $irgendwas ?>" />

ich habe auf diese art die textfelder vorbelegt. funktioniert auch sehr gut. weiter unten im formular gibt es noch verschiedene menu-felder wie zb dieses hier:

<select name="treibstoff" id="treibstoff">
              <option>Benzin</option>
              <option>Diesel</option>
              <option selected="selected">-</option>
            </select>

wie muss ich hier vorgehen um das feld vorzubelegen?

12.12.2010 19:15

5 Jörg Kruse

Vorausgewählt wird ein option Feld mit dem Attribut selected="selected".

Einen Vergleich mit dem übermittelten POST-Wert könntest du in einer foreach Schleife machen, in welcher du das select Element aufbaust; bei Übereinstimmung der Werte fügst du das selected Attribut mit ein.

<?php

$treibstoffe = array('-', 'Benzin', 'Diesel');

?>
<select name="treibstoff" id="treibstoff">
<?php

foreach ($treibstoffe as $treibstoff) {
    echo '<option';
    if ($treibstoff == $_POST['treibstoff']) {
        echo ' selected="selected"';
    }
    echo '>' . $treibstoff . '</option>' . "\n";
}

?>
</select>

12.12.2010 21:02

6 andehrl

Zitat von Jörg
Vorausgewählt wird ein option Feld mit dem Attribut selected="selected".

Einen Vergleich mit dem übermittelten POST-Wert könntest du in einer foreach Schleife machen, in welcher du das select Element aufbaust; bei Übereinstimmung der Werte fügst du das selected Attribut mit ein.

<?php

$treibstoffe = array('-', 'Benzin', 'Diesel');

?>
<select name="treibstoff" id="treibstoff">
<?php

foreach ($treibstoffe as $treibstoff) {
    echo '<option';
    if ($treibstoff == $_POST['treibstoff']) {
        echo ' selected="selected"';
    }
    echo '>' . $treibstoff . '</option>' . "\n";
}

?>
</select>

auf diese weise wird beim aufrufen der seite im menu kein inhalt angezeigt. wenn ich die listenwerte beibehalte bleibt der eingegebene wert bei einer fehlermeldung erhalten. möchte ich aber dann vieleicht doch etwas anderes aus dem menu wählen sind sämtliche werte doppelt angezeigt:

<select name="treibstoff" id="treibstoff">
              <option selected="selected">-</option>
              <option>Benzin</option>
              <option>Diesel</option>
<?php

foreach ($treibstoffe as $treibstoff) {
    echo '<option';
    if ($treibstoff == $_POST['treibstoff']) {
        echo ' selected="selected"';
    }
    echo '>' . $treibstoff . '</option>' . "\n";
}

?>

            </select>

12.12.2010 22:14 | geändert: 12.12.2010 22:14

7 Jörg Kruse

Zitat von andehrl
Zitat von Jörg
Vorausgewählt wird ein option Feld mit dem Attribut selected="selected".

Einen Vergleich mit dem übermittelten POST-Wert könntest du in einer foreach Schleife machen, in welcher du das select Element aufbaust; bei Übereinstimmung der Werte fügst du das selected Attribut mit ein.

<?php

$treibstoffe = array('-', 'Benzin', 'Diesel');

?>
<select name="treibstoff" id="treibstoff">
<?php

foreach ($treibstoffe as $treibstoff) {
    echo '<option';
    if ($treibstoff == $_POST['treibstoff']) {
        echo ' selected="selected"';
    }
    echo '>' . $treibstoff . '</option>' . "\n";
}

?>
</select>

auf diese weise wird beim aufrufen der seite im menu kein inhalt angezeigt.

Dann hast du den Code falsch eingepasst - wenn ich den in einer HTML-Seite einpasse, werden mir die im Array $treibstoffe definierten Elemente als Optionen angezeigt.

wenn ich die listenwerte beibehalte bleibt der eingegebene wert bei einer fehlermeldung erhalten. möchte ich aber dann vieleicht doch etwas anderes aus dem menu wählen sind sämtliche werte doppelt angezeigt:

<select name="treibstoff" id="treibstoff">
              <option selected="selected">-</option>
              <option>Benzin</option>
              <option>Diesel</option>
<?php

foreach ($treibstoffe as $treibstoff) {
    echo '<option';
    if ($treibstoff == $_POST['treibstoff']) {
        echo ' selected="selected"';
    }
    echo '>' . $treibstoff . '</option>' . "\n";
}

?>

            </select>

Ja, das ist auch kein Wunder, dass da etwas doppelt angezeigt wird - die drei fertigen <option> Felder musst du natürlich rausschmeißen. Außerdem fehlt hier die Definition des Arrays $treibstoffe

13.12.2010 09:59

8 andehrl

Dann hast du den Code falsch eingepasst - wenn ich den in einer HTML-Seite einpasse, werden mir die im Array $treibstoffe definierten Elemente als Optionen angezeigt.

jap, ich hab den code falsch eingepasst. nach wiederholtem versuch ist alles so wie es sein soll.
vielen, vielen dank :-)


13.12.2010 15:16

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]