tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
839
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von acquire
    acquire acquire ist offline Mitglied Silber
    Registriert seit
    Nov 2003
    Beiträge
    93
    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-Code:
    <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-Code:
    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
     
    Gebildet ist, wer weiß, wo er findet, was er nicht weiß. - Georg Simmel

  2. #2
    kalle123456 Tutorials.de Gastzugang
    Hallo,

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

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

  3. #3
    Avatar von acquire
    acquire acquire ist offline Mitglied Silber
    Registriert seit
    Nov 2003
    Beiträge
    93
    Das Hauptscript

    PHP-Code:
    <?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-Code:
    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>'
    ;

     
    Gebildet ist, wer weiß, wo er findet, was er nicht weiß. - Georg Simmel

Ähnliche Themen

  1. POST per Header senden
    Von einfach nur crack im Forum PHP
    Antworten: 38
    Letzter Beitrag: 03.06.09, 22:29
  2. Button zum senden funktioniert nicht
    Von counteract im Forum HTML & XHTML
    Antworten: 4
    Letzter Beitrag: 05.08.07, 10:59
  3. Outlook 2000 - Senden/Empfangen funktioniert nicht mehr
    Von ziriander im Forum Microsoft Windows
    Antworten: 2
    Letzter Beitrag: 18.07.07, 00:19
  4. Senden (GMX-Mail, Onlineformulare, Bildupload) funktioniert nicht. Hilfe!!
    Von sebastian73 im Forum Internet, DSL & Flatrate
    Antworten: 0
    Letzter Beitrag: 30.05.06, 19:36
  5. Antworten: 8
    Letzter Beitrag: 23.10.03, 13:14