tafkat: Fehlermeldung im gleichen Formular

Servus, hallo...

Ich hab da mal ein kleines Problem wie ich glaube.
Leider weiss ich als gelegentlicher php Programmierer und Anfänger nichtmal genau, wonach ich suchen sollte.
Daher die Frage:

Ich hab ein kleines php Kontaktformular geschrieben das über ein 'include' in eine index.php geladen wird.

<table align="left">
 <form action="<?php $self ?>" method="post">
  <tr><td align="left">Name:</td><td align="left"><input type="text" name="name" size="28" maxlength="40"></td></tr>
  <tr><td align="left">eMail:</td><td align="left"><input type="text" name="mail" size="28" maxlength="80"></td></tr>
  <tr><td align="left" valign="top">Nachricht:</td><td align="left"><textarea rows="10" name="msg" cols="40"></textarea></td></tr>
  <tr><td colspan="2" align="center"><input type="submit" value="Senden"></td></tr>
 </form>
</table>

Also das Formular funktioniert einwandfrei und auch das Senden der Nachricht.
Mein anliegen ist, das ich gerne die Fehlermeldungen wie "Kein Name", "Keine eMail" und "Keine Nachricht" _IM_ Formular selber eingebunden haben möchte.

d.h.
<table align="left">
 <form action="<?php $self ?>" method="post">
  <tr><td align="left">Name:</td><td align="left"><input type="text" name="name" size="28" maxlength="40"></td></tr>
  <tr><td>&nbsp;</td><td>### Hier Fehlermeldung "Kein Name" ###</td></tr>
usw.

Quasi so, das die Meldung unter dem jeweiligen 'input' erscheint.
Hab mich derweilen schon durch die Foren und Tutorials gekämpft aber nicht das finden können, wonach ich gesucht hab.

Ich hoffe ich konnte mein Problem fachgerecht erklären und bedanke mich für jede art der Hilfe !!

tafkat

  1. Grüezi!

    Ganz einfach:

    <?php
    if (empty($_POST['name']) {
      echo '<tr><td>&nbsp;</td><td>### Hier Fehlermeldung "Kein Name" ###</td></tr>';
    }
    ?>

    Viel Spaß damit

    Nico

    1. Upps, hab ne Klammer vergessen:
      if (empty($_POST['name']))
                              ^

      1. Schonmal Danke dafür !!!!!!

        Nur, das mir die Fehlermeldung ja breits im Stand angezeigt werden.
        Das ganze müsst ich ja so einbauen, das diese erst erscheinen, wenn auch "Senden" geklickt wird.

        Wie würde ich das hinbekommen ?

        <table align="left" class="smalltext">
         <form action="<?php $self ?>" method="post">
          <tr><td align="left">Name:</td><td align="left"><input type="text" name="name" size="28" maxlength="40"></td></tr>
          <?php if (empty($_POST['name'])) { echo '<tr><td>&nbsp;</td><td>Kein Name angegeben</td></tr>'; } ?>
          <tr><td align="left">eMail:</td><td align="left"><input type="text" name="mail" size="28" maxlength="80"></td></tr>
          <?php if (empty($_POST['mail'])) { echo '<tr><td>&nbsp;</td><td>Keine eMail angegeben</td></tr>'; } ?>
          <tr><td align="left" valign="top">Nachricht:</td><td align="left"><textarea rows="10" name="msg" cols="40"></textarea></td></tr>
          <?php if (empty($_POST['msg'])) { echo '<tr><td>&nbsp;</td><td>Keine Nachricht eingegeben</td></tr>'; } ?>
          <tr><td colspan="2" align="center"><input type="submit" value="Senden"></td></tr>
         </form>
        </table>

        1. Wie würde ich das hinbekommen ?

            
          <?php  
           $Fehlerfrei = True;  
           echo (' <form action="'.$self.'" method="post">'."\n");  
           echo (' <table align="left" class="smalltext">'."\n");  
           echo ('  <tr>'."\n");  
           echo ('   <td align="left">'."\n");  
           echo ('    Name:'."\n");  
           echo ('   </td>'."\n");  
           echo ('   <td align="left">'."\n");  
           echo ('    <input type="text" name="name" size="28" maxlength="40" value="'.$_POST['name'].'" />'."\n"); //Falls der Name schon mal eingetragen wurde wird er nun wieder eingefügt.  
           echo ('   </td>'."\n");  
           echo ('  </tr>'."\n");  
           if (((isset($_POST['name'])) && (empty($_POST['name']))) { //"Wenn das Formular gesendet wurde aber das Feld name leer ist"  
            $Fehlerfrei = False;  
            echo '   <tr>'."\n");  
            echo ('   <td>&nbsp;</td>'."\n");  
            echo ('   <td>'."\n");  
            echo ('    Kein Name angegeben'."\n");  
            echo ('   </td>'."\n");  
            echo ('  </tr>';  
           }  
           echo ('  <tr>'."\n");  
           echo ('   <td align="left">'."\n");  
           echo ('    eMail:'."\n");  
           echo ('   </td>'."\n");  
           echo ('   <td align="left">'."\n");  
           echo ('    <input type="text" name="mail" size="28" maxlength="80" value="'.$_POST['mail'].'" />'."\n");  
           echo ('   </td>'."\n");  
           echo ('  </tr>'."\n");  
           if (((isset($_POST['mail'])) && (empty($_POST['mail']))) {//"Wenn das Formular gesendet wurde aber das Feld mail leer ist"  
            $Fehlerfrei = False;  
            echo '   <tr>'."\n");  
            echo ('   <td>&nbsp;</td>'."\n");  
            echo ('   <td>'."\n");  
            echo ('    Keine eMail angegeben'."\n");  
            echo ('   </td>'."\n");  
            echo ('  </tr>';  
           }  
           echo ('  <tr>'."\n");  
           echo ('   <td align="left" valign="top">'."\n");  
           echo ('    Nachricht:'."\n");  
           echo ('   </td>'."\n");  
           echo ('   <td align="left">'."\n");  
           echo ('    <textarea rows="10" name="msg" cols="40">'."\n");  
           echo (      $_POST['msg']."\n");  
           echo ('    </textarea>'."\n");  
           echo ('   </td>'."\n");  
           echo ('  </tr>'."\n");  
           if ((isset($_POST['msg'])) && (empty($_POST['msg']))) {//"Wenn das Formular gesendet wurde aber das Feld msg leer ist"  
            $Fehlerfrei = False;  
            echo '   <tr>'."\n");  
            echo ('   <td>&nbsp;</td>'."\n");  
            echo ('   <td>'."\n");  
            echo ('    Keine Nachricht eingegeben'."\n");  
            echo ('   </td>'."\n");  
            echo ('  </tr>'."\n");  
           }  
           echo ('  <tr>'."\n");  
           echo ('   <td colspan="2" align="center">'."\n");  
           //Optional:  
           //if ($Fehlerfrei) { echo ('Formular wurde versendet'); }  
           //else {  
           echo ('    <input type="submit" value="Senden" />'."\n");  
           //}  
           echo ('   </td>'."\n");  
           echo ('  </tr>'."\n");  
           echo (' </table>'."\n");  
           echo ('</form>'."\n");  
           if ($Fehlerfrei) {  
            /*  
             Formularverarbeitung,  
             Also speichern in Datenbank  
             oder verschicken als Mail oder  
             was auch immer  
             Am Ende natürlich die Antwort  
             "Daten erfolgreich gesendet"  
            */  
           }  
          ?>  
          
          

          Ab einer unbestimmten Anzahl von <?php (...) ?> wird es meiner Meinung nach unübersichtlich, daher sind hier nur noch zwei d'rin. Falls du Verständnisfragen hast (du sagtest du benutzt PHP nur gelegendlich), dann frag ruhig :-)
          Ob das Formular gesendet wurde kannst du alternativ auch prüfen, indem du dem submit einen namen gibst und dieses auf isset() prüfst.

          1. auch ich vergesse Klammern... in diesem Fall drei Mal an jeweils folgender Stelle:

            <?php
              $Fehlerfrei = False;
              echo ('   <tr>'."\n");
              //   ^

            1. Fehler behoben.

              Doch so richtig begreifen tu ich das nicht.
              Bin sicher nicht Faul und Probier auch viel rum aber irgendwas läuft bei mir immer falsch.

              Bereits beim aufruf der kontakt.php wird die Mail gesendet.
              Wobei Mail nicht der richtige ausdruck ist, das ich einen Privaten Webserver ohne SMTP zugriff hab und die Nachricht in einer TXt File geschrieben wird.

              Weiss jetzt gerade nicht, wie das Handling mit $Fehlerfrei funktioniert im zusammenhang mit dem Senden:

                
              <?php  
               $Fehlerfrei = True;  
               echo (' <form action="'.$self.'" method="post">'."\n");  
               echo (' <table align="left" class="smalltext" border="1">'."\n");  
               echo ('  <tr>'."\n");  
               echo ('   <td align="left">'."\n");  
               echo ('    Name:'."\n");  
               echo ('   </td>'."\n");  
               echo ('   <td align="left">'."\n");  
               echo ('    <input type="text" name="name" size="28" maxlength="40" value="'.$_POST['name'].'" />'."\n");  
               echo ('   </td>'."\n");  
               echo ('  </tr>'."\n");  
               if ((isset($_POST['name'])) && (empty($_POST['name']))) {  
                $Fehlerfrei = False;  
                echo ('   <tr>'."\n");  
                echo ('   <td>&nbsp;</td>'."\n");  
                echo ('   <td>'."\n");  
                echo ('    Kein Name angegeben!'."\n");  
                echo ('   </td>'."\n");  
                echo ('  </tr>');  
               }  
               echo ('  <tr>'."\n");  
               echo ('   <td align="left">'."\n");  
               echo ('    eMail:'."\n");  
               echo ('   </td>'."\n");  
               echo ('   <td align="left">'."\n");  
               echo ('    <input type="text" name="mail" size="28" maxlength="80" value="'.$_POST['mail'].'" />'."\n");  
               echo ('   </td>'."\n");  
               echo ('  </tr>'."\n");  
               if ((isset($_POST['mail'])) && (empty($_POST['mail']))) {  
                $Fehlerfrei = False;  
                echo ('   <tr>'."\n");  
                echo ('   <td>&nbsp;</td>'."\n");  
                echo ('   <td>'."\n");  
                echo ('    Keine eMail angegeben!'."\n");  
                echo ('   </td>'."\n");  
                echo ('  </tr>');  
               }  
               echo ('  <tr>'."\n");  
               echo ('   <td align="left" valign="top">'."\n");  
               echo ('    Nachricht:'."\n");  
               echo ('   </td>'."\n");  
               echo ('   <td align="left">'."\n");  
               echo ('<textarea rows="10" cols="40" name="msg">');  
               echo (      $_POST['msg']."\n");  
               echo ('</textarea>'."\n");  
               echo ('   </td>'."\n");  
               echo ('  </tr>'."\n");  
               if ((isset($_POST['msg'])) && (empty($_POST['msg']))) {  
                $Fehlerfrei = False;  
                echo ('   <tr>'."\n");  
                echo ('   <td>&nbsp;</td>'."\n");  
                echo ('   <td>'."\n");  
                echo ('    Keine Nachricht eingegeben!'."\n");  
                echo ('   </td>'."\n");  
                echo ('  </tr>'."\n");  
               }  
               echo ('  <tr>'."\n");  
               echo ('   <td colspan="2" align="center">'."\n");  
               if ($Fehlerfrei) {  
                echo ('Formular wurde versendet');  
                 $name = $_POST["name"];  
                 $mail = $_POST["mail"];  
                 $msg = $_POST["msg"];  
                 $datum = date("d.m.Y");  
                 $zeit = date("G:i");  
                 $ip = $_SERVER["REMOTE_ADDR"];  
                 $browser = $_SERVER["HTTP_USER_AGENT"];  
                 $host = gethostbyaddr($ip);  
                 $text = "Datum: $datum - $zeit \r\nName: $name \r\neMail: $mail \r\nIP: $ip \r\nHost: $host \r\nBrowser: $browser \r\n\r\nNachricht: $msg \r\n\r\n";  
                 $data = date("d.m.Y");  
                 $folder = "messages/";  
                 $dateiname = "$folder$data.txt";  
                 $fp = fopen ($dateiname , "a+");  
                
                 fwrite ($fp , $text);  
                 fclose ($fp);  
               }  
               else {  
               echo ('    <input type="submit" value="Senden"/>'."\n");  
               }  
               echo ('   </td>'."\n");  
               echo ('  </tr>'."\n");  
               echo (' </table>'."\n");  
               echo ('</form>'."\n");  
               if ($Fehlerfrei) {  
                
               }  
              ?>  
              
              
          2. Ah, okay... Cool.
            Danke !!!

            Hab mir sowas schon gedacht, das so machen zu müssen.
            Bloss hatte ich immer ein Problem damit, das die Fehlermeldungen bereits beim aufrufen des Formulars bestanden, weil ich das $fehlerfrei = false; nicht eingebaut hatte bzw. nicht wusste wie es geht.

            Nundenn, hab den Code mal Kopiert ind steh gerade vor nem Rätsel:

              
            <?php  
             $Fehlerfrei = True;  
             echo (' <form action="'.$self.'" method="post">'."\n");  
             echo (' <table align="left" class="smalltext">'."\n");  
             echo ('  <tr>'."\n");  
             echo ('   <td align="left">'."\n");  
             echo ('    Name:'."\n");  
             echo ('   </td>'."\n");  
             echo ('   <td align="left">'."\n");  
             echo ('    <input type="text" name="name" size="28" maxlength="40" value="'.$_POST['name'].'" />'."\n");  
             echo ('   </td>'."\n");  
             echo ('  </tr>'."\n");  
              // Ab hier wirft er eine Meldung aus  
             if (((isset($_POST['name'])) && (empty($_POST['name']))) {  
              $Fehlerfrei = False;  
              echo ('   <tr>'."\n");  
              echo ('   <td>&nbsp;</td>'."\n");  
              echo ('   <td>'."\n");  
              echo ('    Kein Name angegeben'."\n");  
              echo ('   </td>'."\n");  
              echo ('  </tr>');  
             }  
              // Ende  
             echo ('  <tr>'."\n");  
             echo ('   <td align="left">'."\n");  
            
            

            Parse error: parse error, unexpected '{' in F:\web\kontakt.php on line 13

            Ich hab mnir das nu bestimmt 20 min angeguckt aber konnte da kein Fehler in der Zeile finden.
            Hab dann einfach mal diese IF abfrage herausgelöscht und gleiche Meldung kam ebenfalls bei der nächsten abfrage.
            *kratz*

            Ich mein, ich hab über Jahre MSL Programmiert (falls das ein begriff ist)
            [mIRC Chat Client]
            Da galt die Regel, für jede geöffnete Klammer { muss auch wieder eine geschlossen werden }
            Deswegen versteh ich gerade nicht was da Falsch ist.

            Danke für die Hilfe Kraki

            1. hi,

              if (((isset($_POST['name'])) && (empty($_POST['name']))) {
                $Fehlerfrei = False;

              Parse error: parse error, unexpected '{' in F:\web\kontakt.php on line 13

              Ich hab mnir das nu bestimmt 20 min angeguckt aber konnte da kein Fehler in der Zeile finden.

              Dann solltest du statt stumpf zu glotzen vielleicht mal die Klammern zählen.

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Dann solltest du statt stumpf zu glotzen vielleicht mal die Klammern zählen.

                Wie wahr ^^ (ich kam die letzten Tage nicht zum Antworten)

                if (((isset($_POST['name'])) && (empty($_POST['name']))) {
                0  123     4              32    3     4              321
                Fehlt also eine Klammer zu, bzw. ist eine zuviel, du kannst die erste löschen.

  2. echo $begrüßung;

    Mein anliegen ist, das ich gerne die Fehlermeldungen wie "Kein Name", "Keine eMail" und "Keine Nachricht" _IM_ Formular selber eingebunden haben möchte.
    Leider weiss ich als gelegentlicher php Programmierer und Anfänger nichtmal genau, wonach ich suchen sollte.

    Das was du suchst hört auf den Namen Affenformular.

    echo "$verabschiedung $name";