2016-04-25 8 views
0

Ich versuche, ein zweiseitiges Formular zu erstellen - die erste Seite ist optional. Es ist eine Aufforderung, um loszulegen. Es funktionierte perfekt, bis ich anfing PHPMailer hinzuzufügen. Wenn ich nun auf das erste, optionale Formular auf der ersten Seite klicke, reicht es über den Mailer und all seine Validierungen/Fehler dann Emails korrekt ein, wenn ich den Fehler if-Anweisungen auskommentiere.Zwei Seitenformular-Einträge auf der ersten Seite

Hier ist die erste Form, die optional ist. Es sollte Sie auf die Schätzseite mit den Werten bringen, die bereits im Formular gespeichert sind, damit Sie es nicht noch einmal machen müssen.

<form class="form-horizontal first-form" action="estimate.php"    method="post"> 
        <div class="form-group"> 
        <label for="inputMoveDate" class="col-xs-4 text-left">Move Date</label> 
        <div class="col-xs-8"> 
         <input type="text" name="date" class="form-control" id="datepicker"> 
        </div><!--col-xs-7--> 
        </div><!--form-group--> 
        <div class="form-group"> 
        <label for="pickUpZip" class="col-xs-4">Pick Up Zip</label> 
        <div class="col-xs-8"> 
         <input type="text" name="pickUpZip" class="form-control" id="pickUpZip" placeholder=""> 
        </div><!--col-xs-7--> 
        </div><!--form-group--> 
        <div class="form-group"> 
        <label for="dropOffZip" class="col-xs-4">Drop Off Zip</label> 
        <div class="col-xs-8"> 
         <input type="text" name="dropOffZip" class="form-control" id="dropOffZip" placeholder=""> 
        </div><!--col-xs-7--> 
        </div><!--form-group--> 
        <div class="form-group"> 
        <div class="col-xs-12"> 
         <button type="submit" class="btn btn-default center-block">Continue</button> 
        </div><!--col-sm-offset-2--> 
        </div><!--form-group--> 
       </form> 

Estimate.php zweite Seite. Das PHP am Anfang des Dokuments.

session_start(); 

if ($_SERVER["REQUEST_METHOD"]=="POST") { 
    $date = $_POST['date']; 
    $pickUpZip = $_POST['pickUpZip']; 
    $dropOffZip = $_POST['dropOffZip']; 
    $dwellingType = $_POST['dwellingType']; 
    $salutation = $_POST['salutation']; 
    $firstName = trim(filter_input(INPUT_POST, "first-name", FILTER_SANITIZE_STRING)); 
    $lastName = trim(filter_input(INPUT_POST, "last-name", FILTER_SANITIZE_STRING)); 
    $email = trim(filter_input(INPUT_POST, "email", FILTER_SANITIZE_SPECIAL_CHARS)); 
    $phone = $_POST['phone']; 
    $pickUpAddress = $_POST['pickUpAddress']; 
    $pickUpCity = $_POST['pickUpCity']; 
    $pickUpState = $_POST['pickUpState']; 
    $comments = $_POST['comments']; 

    $emailBody ="From: $salutation $firstName $lastName\n 
     Phone Number: $phone\n 
     E-Mail: $email\n 
     Message:\n $comments 
     \n \n 
     Move Date: $date\n 
     Pick Up Address: $pickUpAddress\n 
     Pick Up City: $pickUpCity\n 
     Pick Up State: $pickUpState\n 
     Pick Up Zip: $pickUpZip\n 
     \n 
     Drop Off Zip: $dropOffZip\n 
     Dwelling Type: $dwellingType\n"; 

    if($firstName == "" || $email == "" || $lastName == "") { 
     echo "Please fill in the required forms: first name, last name, and email."; 
     exit; 
    } 
    if ($_POST["address"] != "") { 
     echo "Bad form input"; 
     exit; 
    } 

    require('phpmailer/class.phpmailer.php'); 

    $mail = new PHPMailer; 

    if (!$mail->ValidateAddress($email)) { 
     echo 'Invalid email. Try again.'; 
     exit; 
    } 

    $mail->setFrom($email, $firstName); 
    $mail->addAddress('[email protected]', 'name here'); 

    $mail->isHTML(false); 

    $mail->Subject = 'Estimate Request Inquiry From ' . $firstName; 
    $mail->Body = $emailBody; 

    if(!$mail->send()) { 
     echo 'Message could not be sent.'; 
     echo 'Mailer Error: ' . $mail->ErrorInfo; 
     exit; 
    } 

    header("location:estimate.php?status=thanks"); 
} 

Hier ist der Anfang und das Ende des Formulars HTML, die Highlights.

  <?PHP 
      if (isset($_GET["status"]) && $_GET["status"] == "thanks") { 
       echo "Thank you for your estimate request. We will return your inquiry soon! 
      </div>"; 
      } else { 
         ?> 
    <form class="form-horizontal first-form" action="estimate.php" method="post" style="margin: 0 45px;"> 

  <label for="date" class="col-xs-4 text-left">Move Date</label> 
           <div class="col-xs-8"> 
            <input type="text" class="form-control" id="datepicker" name="date" value="<?php echo $_POST["date"]; ?>"> 
           </div><!--col-xs-7--> 
           </div><!--form-group--> 
           <div class="form-group"> 
       <label for="pickUpZip" class="col-xs-4">Pick Up Zip</label> 
           <div class="col-xs-8"> 
            <input type="text" name="pickUpZip" class="form-control" id="pickUpZip" value="<?php echo $_POST["pickUpZip"]; ?>"> 
           </div><!--col-xs-7--> 
           </div><!--form-group--> 

           <div class="form-group"> 
           <label for="dropOffZip" class="col-xs-4">Drop Off Zip</label> 
           <div class="col-xs-8"> 
            <input type="text" name="dropOffZip" class="form-control" id="dropOffZip" value="<?php echo $_POST["dropOffZip"]; ?>"> 
           </div><!--col-xs-7--> 
           </div><!--form-group--> 

           <div class="col-xs-12"> 
            <button type="submit" id="submit" name="submit" class="btn btn-default center-block">Submit</button> 
           </div><!--col-sm-offset-2--> 
           </div><!--form-group--> 
          </form> 
          <?PHP 
           } 
          ?> 
+0

Sie überprüfen nur 'if ($ _SERVER [" REQUEST_METHOD "] ==" POST ") {' auf Ihrer zweiten Seite, und Sie veröffentlichen von Ihrer ersten Seite, so glaubt es, dass Sie die endgültige Einreichung machen, gibt es mehrere Möglichkeiten, dies zu lösen, wäre es, ein verstecktes Feld auf dem ersten Formular hinzuzufügen und dann zu überprüfen, ob es auf der zweiten Seite nicht existiert, bevor Sie Ihren Validierungscode ausführen. – cmorrissey

+0

Das macht für mich Sinn. Ich versuche, es mit einer if-Anweisung funktionieren zu lassen, "wenn dieses versteckte Element leer bleibt, dann mach das alles. Grundsätzlich alles umhüllen diese If-Anweisung, während nicht leer, geben Sie einen Fehler und beenden. Es funktioniert nicht so weit. Irgendwelche Vorschläge ? –

Antwort

0

Diese Linie versucht, die E-Mail jedes Mal zu senden:

if(!$mail->send()) { 

und Ihre Fehlermeldungen Echo werden, ob und wann es funktioniert nicht. Sie sollten den gesamten Block in eine if-Anweisung verschachteln, die überprüft, ob das Formular von Seite 2 übergeben wurde. Sie können der Übergabeschaltfläche einen anderen Wert zuweisen und das überprüfen (z. B. "submit1", "submit2").

+0

Was für eine Art von if-Anweisung? Tut mir leid, ich bin ein echter Anfänger. Die erste Form ist völlig optional und nicht notwendig, so dass ich mit der Weitergabe dieser Werte zu kämpfen habe, wenn sie da sind, aber wenn nicht, warte auf die Einreichung des zweiten Formulars. –

Verwandte Themen