Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Formular: Es werden nicht alle Felder übertragen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Formular: Es werden nicht alle Felder übertragen

    Hi Leute,

    habe ein kleines Problem mit einem Formular, leider wird nur das Feld email übertragen, sonst nichts... habe wohl irgendwo bei der mail funktion einen fehler eingebau. Muss dazu sagen, habe kaum Kenntnisse in php, habe den Mailer nach einem Tutorial gebaut.

    PHP-Code:
     <?php
      
    // Wenn das Formular abgeschickt wurde, füre den Inhalt der Klammern aus aus.
        
    if(isset($_POST['ueberpruefung'])) 
      { 
      
    // allesok wird auf 1 gesetzt, bekommt also einen Wert. Später wird damit abgefragt, ob Name und Email ausgefüllt wurden.
      
    $allesok 1
      
     
    // Hier wird geprüft ob Name leer ist. Ist dies der Fall, wird allesok auf 0 gesetzt (Kein Wert mehr) und ein Fehlertext erstellt, der im Formular ausgegeben wird.
     
    if(empty($_POST['name'])){
      
    $allesok 0
      
    $error[name] = "Bitte einen Namen eingeben!";} 
      
       if(empty(
    $_POST['kommentar'])){
      
    $allesok 0
      
    $error[kommentar] = "Bitte eine Nachricht eingeben!";} 
      
     
    //Hier wird geprüft ob Email leer ist. Ist dies der Fall, wird allesok auf 0 gesetzt (Kein Wert mehr) und ein Fehlertext erstellt, der im Formular ausgegeben wird.
      
    if(empty($_POST['email'])){
      
    $allesok 0
      
    $error[email] = "Bitte eine Email eingeben!";} 
       
      
    // Hier wird die IF-Bedingung von ganz oben geschlossen.
      
    }
      
     
    // Hier wird geprüft ob allesok einen Wert hat. (1) Ist dies der Fall, können die Variablen $_POST['name'] und $_POST['email'] weiter verarbeitet werden.
      
    if($allesok){ 
      
      
    // Überprüfte Eingaben aus dem Formular ausgeben. An dieser Stelle kann auch mit Mysql gearbeitet werden oder so etwas...
      
     
    echo "Ihre Mitteilung wurde erfolgreich versendet."
      echo 
    "<br>";
     echo 
    "Name: ".$_POST['name'];
      echo 
    "<br>";
      echo 
    "Email: ".$_POST['email'];
      echo 
    "<br>";
        echo 
    "Nachricht: ".$_POST['kommentar'];
          echo 
    "<br>";
      
      
    // Hier wird die IF-Bedingung von oben geschlossen
    mail('@.de',"Nachricht von ".$_POST['name'],$_POST['email'],"Nachricht:"$_POST['kommentar']);
      }
        
      
    // Ist der Wert 1 nicht vorhanden, zeige das Formular.
      
    else
      {
      
    ?>
      
      <form name="Tutorial" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
     
     <?php echo $error['name'];?><br>
      Name:<br>
      <input name="name" type="text" size="25" value="<?php echo $_POST['name'];?>"> <br>
     
     <?php echo $error['email'];?><br>
        Email:<br>
      <input name="email" type="text" size="25" value="<?php echo $_POST['email'];?>"> <br>
     

     <?php echo $error['kommentar'];?><br>
        Ihre Nachricht:<br>
         <textarea name="kommentar" rows="5" cols="40"><?php echo $_POST['kommentar'];?></textarea>  
      <br>
      
     <input type="hidden" name="ueberpruefung" value="1"> 
      <input type="submit" name="Tutorial" value="Absenden">
      </form>
      
      <?php
     
    // Der Else-Zweig wird geschlossen
      
    }
      
    ?>
    vielleicht kann mir ja wer helfen.
    grüße js


  • #2
    $error[kommentar]
    Zeichenketten gehören immer in Anführungszeichen, auch als Index eines Feldes. Oder ist kommentar eine Konstante ( define('kommentar', 1) ) ?
    $allesok ist redundante Information zu empty($error);
    Bitte Kommentare noch einmal überprüfen (und im Zweifelsfall entfernen) und gründlich einrücken.
    echo "Ihre Mitteilung wurde erfolgreich versendet.";
    Das lässt Du ausgeben, bevor überhaupt der Versuch gemacht wurde, die Nachricht abzuschicken.
    mail('@.de',"Nachricht von ".$_POST['name'],$_POST['email'],"Nachricht:", $_POST['kommentar']);
    Statt @.de steht da hoffentlich was sinnvolles. Und schau Dir die Parameter nochmal genau an. Insbesondere ab Nachricht:

    Kommentar


    • #3
      danke für deine Antwort, email hab ich natürlich eine eingetragen
      naja die fehlermeldungen funktionieren... hier mal das live-beispiel dazu

      BVV Ivkovic - Individuelle Systemlösungen

      der fehler an sich is, das lediglich die email adresse tatsächlich ankommt, kommentar wird einfach ignoriert

      wenn die email ankommt sieht das sop aus:

      Betreff: Nachricht von "eingetragener Name"
      Inhalt eMail: "eingetragene emailadresse"

      mehr leider nich

      Kommentar


      • #4
        "Nachricht:", $_POST['kommentar']
        Das passt nicht.

        Kommentar


        • #5
          Zitat von David Beitrag anzeigen
          Das passt nicht.
          lösche ich das Kommata raus kommt beim Aufruf der Seite ein Fehler
          Parse error: syntax error, unexpected T_VARIABLE in /mnt/web3/53/81/51260781/htdocs/form/versenden.php on line 31
          hier nochmal der besser strukturierte PHP-Code
          PHP-Code:
           <?php
           
              
          if(isset($_POST['ueberpruefung']))
               { 
                    
          $allesok 1


                   if(empty(
          $_POST['name'])){
                      
          $allesok 0
                      
          $error[name] = "Bitte einen Namen eingeben!";} 
            
                    if(empty(
          $_POST['kommentar'])){
                       
          $allesok 0
                      
          $error[kommentar] = "Bitte eine Nachricht eingeben!";} 
                  if(empty(
          $_POST['email'])){
                       
          $allesok 0
                        
          $error[email] = "Bitte eine Email eingeben!";} 
                 }
            
            
            if(
          $allesok){ 
              echo 
          "Ihre Mitteilung wurde erfolgreich versendet."
                echo 
          "<br>";
               echo 
          "Name: ".$_POST['name'];
                echo 
          "<br>";
                echo 
          "Email: ".$_POST['email'];
                echo 
          "<br>";
              echo 
          "Nachricht: ".$_POST['kommentar'];
              echo 
          "<br>";
            
              
          mail('jan@img-media.de',"Nachricht von ".$_POST['name'],$_POST['email'],"Nachricht:" $_POST['kommentar']);
              }
              
              
            else
            {
            
          ?>
            
            <form name="versenden" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
           
              <?php echo $error['name'];?><br>
              Name:<br>
                
              <input name="name" type="text" size="25" value="<?php echo $_POST['name'];?>"> <br>
               
              <?php echo $error['email'];?><br>
              Email:<br>
                
              <input name="email" type="text" size="25" value="<?php echo $_POST['email'];?>"> <br>
               
              <?php echo $error['kommentar'];?><br>
              Ihre Nachricht:<br>
                  
              <textarea name="kommentar" rows="5" cols="40"><?php echo $_POST['kommentar'];?></textarea>  
              <br>
                
              <input type="hidden" name="ueberpruefung" value="1"> 
              <input type="submit" name="Tutorial" value="Absenden">
           
           </form>
            
            <?php
            
          }
            
          ?>

          Kommentar


          • #6
            Einfach weglassen ist ja auch Quatsch. Mit dem Komma trennst Du den nächsten Parameter ab.
            bool mail ( string $to , string $subject , string $message [, string $additional_headers
            Und damit wird $_POST['kommentar'] zum Parameter additional_headers. Du willst die Zeichenketten miteinader verbinden. Hast Du im Skript auch schon getan. Zum Beispiel hier
            echo "Name: ".$_POST['name'];
            p.s.: Der Code ist immer noch nicht einheitlich eingerückt. $allesok ist immer noch redundant. $error[name] hat immer noch keine Anführungszeichen.

            Kommentar


            • #7
              ok also:

              $allesok=1 und
              $error['name'] und

              PHP-Code:
              mail('emailadresse',"Nachricht von ".$_POST['name'],$_POST['name'] .$_POST['email'] .$_POST['kommentar'] ); 
              hier hab ich noch das kleine problem das alles durchweg geschrieben wird, ohne abstand oder zeilenumbruch...

              würde gerne nach name und email jeweils eine neue Zeile anfangen

              Kommentar


              • #8
                PHP-Code:
                $text $_POST['name']."\r\n".$_POST['email'] . "\r\n" $_POST['kommentar'];
                mail('emailadresse'"Nachricht von ".$_POST['name'], $text); 
                und $allesok ist immer noch redundant

                Kommentar


                • #9
                  ok das mit dem versenden funktioniert, und ich hab sogar verstanden warum

                  redundant bedeutet das es sich stets wiedehrolt? oder wo genau ist grade der "fehler" und warum wirkt er sich nicht (sichtbar) aus?

                  Kommentar


                  • #10
                    redundant meint in diesem Fall "überflüssig".
                    Immer wenn Du etwas in $error einträgst, änderst Du auch $allesok. Du musst nur abtesten, ob $error vorhanden/nicht leer ist. Dann kannst Du $allesok ersatzlos streichen.

                    Kommentar


                    • #11
                      ok verstanden, aber ich lass das jetzt so habe quasi keine php-kenntnisse sonst zerschieß ich den Code nur...

                      aber hab noch ne andere kleine frage

                      Code:
                      if($allesok){ 
                          echo "Ihre Mitteilung wurde erfolgreich versendet."; 
                            echo "<br>";
                          echo "<br>";
                           echo "Name: ".$_POST['name'];
                            echo "<br>";
                            echo "Email: ".$_POST['email'];
                            echo "<br>";
                          echo "Nachricht: ".$_POST['kommentar'];
                          echo "<br>";
                      wie kann ich denn die rot markierten Wörter dick machen? normale HTML tags werden wohl kaum gehn ;(

                      Kommentar


                      • #12
                        Doch, Du hast doch die HTML Ausgabe für den Browser markiert. Klar gehen da HTML Tags.

                        Kommentar


                        • #13
                          Wenn du die Forumsregeln gelesen hättest, dann hättest
                          PHP-Code:
                          error_reporting(E_ALL); 
                          an den Anfang geschrieben und eine ganze Reihe Fehlermeldungen erhalten, über nicht definierte Variablen und falsche Indizes (in $error).
                          Und statt einer Unmenge von Kommentaren (ich finde Kommentare enorm wichtig, aber wenn es zuviel sind, verursachen sie nur Verwirrung) würde eine vernünftige Formatierung viel mehr bringen. Also z.B schliessende Klammern genau unter der öffnenden oder unter dem Anfang des zur öffnenden Klammer gehörenden Codes. Hier einfach mal, wie dein Code auch aussehen könnte (Fehler nur teilweise korrigiert):
                          PHP-Code:
                          <?php
                          if(isset($_POST['ueberpruefung'])) { 
                              
                          $allesok true
                              if(empty(
                          $_POST['name'])){
                                  
                          $allesok false
                                  
                          $error['name'] = "Bitte einen Namen eingeben!";
                              } 
                              if(empty(
                          $_POST['kommentar'])){
                                  
                          $allesok false
                                  
                          $error['kommentar'] = "Bitte eine Nachricht eingeben!";
                              } 
                              if(empty(
                          $_POST['email'])){
                                  
                          $allesok false
                                  
                          $error['email'] = "Bitte eine Email eingeben!";
                              } 
                             
                          }
                          if(
                          $allesok){ 
                            
                              echo 
                          "Ihre Mitteilung wurde erfolgreich versendet.<br />"
                              echo 
                          "Name: " $_POST['name'] . "<br />";
                              echo 
                          "Email: " $_POST['email'] . "<br />";
                              echo 
                          "Nachricht: " $_POST['kommentar'] . "<br />";
                              
                          mail('@.de'"Nachricht von " $_POST['name'] . $_POST['email'], "Nachricht:" $_POST['kommentar']);
                          }
                          else{
                              echo 
                          "    
                                  <form name='Tutorial' method='post' action='" 
                          $_SERVER['PHP_SELF'] . "'>" .
                                   
                          $error['name'] . "<br />Name:<br />
                                  <input name='name' type='text' size='25' value='" 
                          $_POST['name'] . "' /><br />" 
                                  
                          $error['email'] . "<br />Email:<br />
                                  <input name='email' type='text' size='25' value='" 
                          $_POST['email'] . "' /><br />" .
                                   
                          $error['kommentar'] . "<br />Ihre Nachricht:<br />
                                  <textarea name='kommentar' rows='5' cols='40'>" 
                          $_POST['kommentar'] . "</textarea><br />
                                  <input type='hidden' name='ueberpruefung' value='1' /> 
                                  <input type='submit' name='Tutorial' value='Absenden' />
                                  </form>\n"
                          ;
                          }
                          ?>
                          Gruss
                          L

                          Kommentar


                          • #14
                            logisch, ivch verwende ja auch Zeilenumbrüche

                            super dank dir nochmals

                            Kommentar


                            • #15
                              Zitat von David Beitrag anzeigen
                              Doch, Du hast doch die HTML Ausgabe für den Browser markiert. Klar gehen da HTML Tags.
                              wollte eben den Fehlertext einfärben, leider klappt das nicht

                              PHP-Code:
                              <?php
                              if(isset($_POST['ueberpruefung'])) { 
                                  
                              $allesok true
                                  if(empty(
                              $_POST['name'])){
                                      
                              $allesok false
                                      
                              $error['name'] = "Bitte einen Namen eingeben!";
                                  } 
                                  if(empty(
                              $_POST['kommentar'])){
                                      
                              $allesok false
                                      
                              $error['kommentar'] = "<span class="farbe">Bitte eine Nachricht eingeben!</span>";
                                  } 
                                  if(empty(
                              $_POST['email'])){
                                      
                              $allesok false
                                      
                              $error['email'] = "Bitte eine Email eingeben!";
                                  } 
                                 
                              }
                              normale <b> gingen ja, warum das nicht?

                              Kommentar

                              Lädt...
                              X