2017-06-22 4 views
0

Ich habe ein Formular, das eine E-Mail mit einer Bestellnummer sendet Ich möchte den Benutzer auf eine Dankeseite übertragen und eine Nachricht anzeigen "" Mail gesendet Vielen Dank Vorname wir kontaktieren Sie kurz Ihre Bestellnummer:“send_email.php dies die E-Mail sendet und überträgt den Benutzer auf die Seite Sie danken: Erstens habe ich einige Fehler zu überprüfen, ob es keine Fehler gibt ich die E-Mail-php - Header ('Ort') mit Nachricht

<?php 

function isInjected($str) { 
    $injections = array('(\n+)', 
    '(\r+)', 
    '(\t+)', 
    '(%0A+)', 
    '(%0D+)', 
    '(%08+)', 
    '(%09+)' 
    ); 
    $inject = join('|', $injections); 
    $inject = "/$inject/i"; 
    if(preg_match($inject,$str)) { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 
$nameErr = $lastNameErr = $emailErr = $ironingErr = $descriptionErr = $RoomErr = NULL; 
$first_name = $last_name = $email = $ironing = $description = $Rooms =""; 

if(isset($_POST['submit'])){ 
    $from = $_POST['email']; // this is the sender's Email address 
    $first_name = $_POST['first_name']; 
    $last_name = $_POST['last_name']; 
    $ironing = $_POST['ironing']; 
    $Rooms = $_POST['Rooms']; 
    $Hours = $_POST['Hours']; 
    $Description = $_POST['description']; 
    // If email injection is detected, redirect to the error page. 
    if (isInjected($from)) { 
    header("Location: $error_page"); 
} 

    if (empty($_POST["first_name"])) { 
      $nameErr = "Name is required"; 
     } else { 
      $name = test_input($_POST["first_name"]); 
      // check if name only contains letters and whitespace 
     if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
      $nameErr = "Only letters and white space allowed"; 
       } 
      } 
     if (empty($_POST["email"])) { 
      $emailErr = "Email is required"; 
       } else { 
        $email = test_input($_POST["email"]); 
        // check if e-mail address is well-formed 
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
         $emailErr = "Invalid email format"; 
        } 
       } 
     if (empty($_POST["description"])) { 
      $descriptionErr = "Description is required"; 
        } else { 
        $description = test_input($_POST["description"]); 
        } 
     if (empty($_POST["Rooms"])) { 
       $RoomErr = "Room number is Required"; 
        } else { 
        $Rooms = test_input($_POST["Rooms"]); 
        } 
        if (empty($_POST["Hours"])) { 
       $HourErr = "Room number is Required"; 
        } else { 
        $Hours = test_input($_POST["Rooms"]); 
        } 
        if ($_POST["Hours"] < 3) { 
       $RoomErr = "Mininum number of Hours : 3"; 
        } else { 
        $Rooms = test_input($_POST["Rooms"]); 
        } 

     if (empty($_POST["ironing"])) { 
      $ironingErr = "Ironing is Required"; 
      } else{ 
        $ironing = test_input($_POST["ironing"]); 
      } 
    if (isset($nameErr) || isset($lastNameErr) || isset($emailErr) || 
    isset($ironingErr) || isset($descriptionErr) || isset($RoomErr)) { 

    // You have an error 
} else { 
    $today = date("Ymd"); 
    $rand = strtoupper(substr(uniqid(sha1(time())),0,4)); 
    $unique = $today . $rand; 
    $to = "someemail.com"; // this is your Email address 
    $subject = "Order Sumbittion: " . $unique; 
    $subject2 = "Copy of your form submission"; 
    $message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['description']. "\n\n" . "Number of Rooms: ". $_POST['Rooms'] . "\n\n" ."Number of Hours : ".$_POST['Hours'] . "\n\n" ."Ironing: " . $_POST['ironing']; 
    $message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['description']. "\n\n" . "Number of Rooms: " . $_POST['Rooms']. "\n\n" . "Number of Hours : " . $_POST['Hours'] . "\n\n" ."Ironing: ". $_POST['ironing'] ."\n\n"."Your Odred Number = ". $unique . "\n\n". "Thank you for your Order our Team will be in contact with you shortly."."\n\n". "Check Our facebook page at facebook.com/GlossyCleaningService" ; 
    $headers = "From:" . $from; 
    $headers2 = "From:" . $to; 
    mail($to,$subject,$message,$headers); 
    mail($from,$subject2,$message2,$headers2); 

    // sends a copy of the message to the sender 
    header("Location:thank_you.php?first_name={$first_name}"); 
    exit; 
} 

} 


?> 

auf meinem thank_you senden .php Seite Ich habe das folgende PHP-Skript

<?php 
    include ('send_mail.php'); 
if(isset($_GET['first_name'])) { 
echo "Mail Sent. Thank you " . $_GET['first_name'] . ", we will contact you shortly."; 
} 
?> 

Die Nachricht, die ich auf meinem bekommen Webseite ist

„Hinweis: undefinierte Variable: einzigartig in /storage/ssd1/717/1954717/public_html/thank_you.php on line 126 Mail. Vielen Dank, wir werden Sie in Kürze kontaktieren, Ihre Bestellnummer:. "

Die Webseite doesnt Druck der Vorname oder der Bestellnummer es scheint, wie es es nicht finden können

UPDATE:. Ich änderte meine Code Kevin Nelson Antwort ich nicht einen Fehler erhalten oder die Nachricht einfach leer

Check das Problem hier:.. mysite

+0

Versuchen Sie die Auftrags-ID in der Sitzung zu speichern? Mit Kopfzeile ('Ort ...'); Sie leiten den Benutzer um, und die Variable ist verloren –

+1

Es gibt keine Variable '$ first_name' in der Datei' send_mail.php', es sei denn, Sie haben uns nicht alles gezeigt. – TripleDeal

+0

Wenn Sie keine Session verwenden und die Order ID nicht versteckt werden soll, können Sie sie über die URL in einem GET var: 'header ('Ort: thank_you.php? Unique ='. $ Unique);' – Kaddath

Antwort

3

Ihr Problem besteht darin, dass Sie umleiten, ohne die Parameter in der URL zu senden. Wenn Sie diese Daten verfügbar haben möchten, müssen Sie in Ihrer Weiterleitung header("Location:thank_you.php?first_name=X") usw. durchführen. z.B.

$first_name = /** WHAT??? You don't have this in your code so I can't verify it exists **/ 

$today = date("Ymd"); 
$rand = strtoupper(substr(uniqid(sha1(time())),0,4)); 
$unique = $today . $rand; 
$_SESSION['unique'] = $unique; 
mail($to,$subject,$message,$headers); 
mail($from,$subject2,$message2,$headers2); 
// sends a copy of the message to the sender 
header("Location:thank_you.php?first_name={$first_name}&unique={$unique}"); 
exit; 

Um dies zu auf der nächsten Seite zuzugreifen, würden Sie tun:

<?php 
if(isset($_GET['first_name']) && isset($_GET['unique'])) { 
    echo "Mail Sent. Thank you " . $_GET['first_name' . ", we will contact you shortly.". ", Your Order Number:". $_GET['unique']; 
} 

Andernfalls könnte es nur einfacher sein, die thank_you.php Seite aufzunehmen, die dann within scope Zugriff auf alle Variablen haben:

$first_name = /** WHAT??? You don't have this in your code so I can't verify it exists **/ 

$today = date("Ymd"); 
$rand = strtoupper(substr(uniqid(sha1(time())),0,4)); 
$unique = $today . $rand; 
mail($to,$subject,$message,$headers); 
mail($from,$subject2,$message2,$headers2); 
// include the other file 
include('thank_you.php'); 
exit; 

In diesem Fall würde thank_you.php sein:

Dieses

UPDATE pro Ihre Probleme ... wenn Sie Probleme haben, versuchen Sie:

php1.php

<?php 

    header("Location: php2.php?first_name=Joe"); 
    exit; 

php2.php

<?php 

    echo $_GET['first_name']; 

Wenn das nicht der Fall ist funktionieren, Sie haben Probleme mit Ihrer PHP-Umgebung, die nicht wie meine funktioniert. Wenn es funktioniert, ist das Problem mit Ihrem Code.

+0

Wird dies den Benutzer immer noch auf die Seite thank_you.php umleiten? –

+0

Nein, dies wird die 'thank_you.php' Seite auf der ausführenden Seite anzeigen ... es ist" statt "einer Weiterleitung. Wenn Sie "umleiten" möchten, damit sich die URL des Benutzers ändert, sollten Sie das vorgeschlagene "? First_name = X" verwenden. –

+0

Ich sehe, ich versuchte? First_name = $ first_name und ich bekomme diesen Fehler jetzt 'Hinweis: Undefinierter Index: Vorname in /storage/ssd1/717/1954717/public_html/thank_you.php in Zeile 126' Zeile 126 =' Echo "Mail gesendet . Vielen Dank " . $ Vorname. ", wir werden uns in Kürze bei Ihnen melden."; ' –

1

HTTP staatenlos das bedeutet, dass eine Seite weiß nichts über eine andere Seite als Ergebnis, irgendwelche Variablen Sie Wenn Sie auf die erste Seite gehen, sind sie schon lange vorbei. Wenn Sie möchten, dass die Aktion zwei verschiedene Seiten umfasst, müssen Sie die Werte möglicherweise in einer Datenbank oder einem session oder auf der URL über GET-Parameter beibehalten.

0

versuchen dieses

<?php 
$today = date("Y:m:d"); 
$rand = strtoupper(substr(uniqid(sha1(time())),0,4)); 
$unique = $today . $rand; 
header("location:header1.php?unique=$unique"); 
?> 

thank_you.php

<?php 
    echo $_REQUEST['unique']; 
?> 
+0

Warum sollte das OP "dieses versuchen"? Eine ** gute Antwort ** wird immer eine Erklärung haben, was getan wurde und warum es so gemacht wurde, nicht nur für das OP, sondern auch für zukünftige Besucher von SO. –

+0

danke @bub ich werde dafür versuchen. – Bhargav

0

Die Funktion header() einen HTTP-Header an einen Client sendet. Sie können Sitzungsstatus verwenden, um die Daten auf die nächste Seite zu übertragen Es ist wichtig zu beachten, dass header() aufgerufen werden muss, bevor eine tatsächliche Ausgabe gesendet wird (In PHP 4 und höher können Sie das Problem durch Pufferung beheben)

versuchen sie stattdessen tun:

$today = date("Ymd"); 
    $rand = strtoupper(substr(uniqid(sha1(time())),0,4)); 
    $unique = $today . $rand; 
    $_SESSION['unique'] = $unique; 
    mail($to,$subject,$message,$headers); 
    mail($from,$subject2,$message2,$headers2); 
    // sends a copy of the message to the sender 
    header('Location:thank_you.php'); 
    exit; 

Dies Ihr Problem zu lösen, ist es nicht Ihren Variablennamen setzt so stattdessen versuchen, es in der Sitzung setzen und dann Header-Funktion übergeben. Für jetzt setze ich $ unique Variable in Sitzung, Sie können es auf was auch immer Sie wollen setzen und kann es auf thankyou.php Seite durch Extrahieren der Sitzung verwenden.

+2

Er hat kein Problem der Header nach Inhalt gesendet wird ... sein Problem ist, dass thank_you.php nicht weiß, was die Variablen auf der vorherigen Seite waren. –

+0

Ja, damit er die Werte in der Sitzung festlegen kann, damit sie sie in der Seite thankyou.php wiederverwenden kann. Für die Demo habe ich $ unique Variable –

+0

hinzugefügt Sie verwenden Sitzung für Dinge, die im Zustand über viele Anfragen verwaltet werden müssen, nicht eine Weiterleitung ... so ist dies eine schlechte Praxis. Ändern Sie jedoch Ihren ersten Satz, um etwas über "Sie können Sitzungsstatus verwenden, um die Daten auf die nächste Seite zu übertragen", so dass wir wissen, dass das Ihre Lösung für das eigentliche Problem ist. Die Kommentare über den header() sollten als Randnotiz an den unteren Rand des Posts verwiesen werden, da der Code des OP eindeutig eine Kopfzeile sendet, bevor der Inhalt ausgeht und das nicht zutrifft ... also habe ich Sie fast markiert. –

0

Ich habe es funktioniert mit $ _SESSIONS. hat am besten für mich funktioniert, danke für all deine Antworten. Hier ist, was ich getan habe, habe ich

$_SESSION['first_name'] = $first_name; 
$_SESSION['unique'] = $unique; 

Um den Code

$today = date("Ymd"); 
    $rand = strtoupper(substr(uniqid(sha1(time())),0,4)); 
    $unique = $today . $rand; 
    $to = "[email protected]"; // this is your Email address 
    $subject = "Order Sumbittion: " . $unique; 
    $subject2 = "Copy of your form submission"; 
    $_SESSION['first_name'] = $first_name; 
    $_SESSION['unique'] = $unique; 
    $message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['description']. "\n\n" . "Number of Rooms: ". $_POST['Rooms'] . "\n\n" ."Number of Hours : ".$_POST['Hours'] . "\n\n" ."Ironing: " . $_POST['ironing']; 
    $message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['description']. "\n\n" . "Number of Rooms: " . $_POST['Rooms']. "\n\n" . "Number of Hours : " . $_POST['Hours'] . "\n\n" ."Ironing: ". $_POST['ironing'] ."\n\n"."Your Odred Number = ". $unique . "\n\n". "Thank you for your Order our Team will be in contact with you shortly."."\n\n". "Check Our facebook page at facebook.com/GlossyCleaningService" ; 
    $headers = "From:" . $from; 
    $headers2 = "From:" . $to; 
    mail($to,$subject,$message,$headers); 
    mail($from,$subject2,$message2,$headers2); 

    // sends a copy of the message to the sender 
    //echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly.". ", Your Order Number:". $unique; 
    header("Location: thank_you.php"); 
    exit; 

Dann in meiner thank_you.php Seite ich habe.

<h1 class="display-3">Thank You <?php echo $_SESSION['first_name'];?></h1> 
    <p class="lead"><strong>Your order Number :<?php echo $_SESSION['unique'];?></strong> <br> 
    Thank You for your order Our Team Will get back to you Shortly.</p> 
    <hr> 
    <p>