2016-09-17 11 views
-4

Ich möchte eine E-Mail mit Eingabedaten von meiner HTML-Seite senden. Ich benutze nächste PHP-Skript:PHP-Code zeigt leere Seite

<?php 
if((isset($_POST['budget']))&&(isset($_POST['type']))) { 
    $email_to = "[email protected]"; 
    $email_subject = "Design"; 

    function died($error) { 
     // your error code can go here 
     echo "We are very sorry, but there were error(s) found with the form you submitted. "; 
     echo "These errors appear below.<br /><br />"; 
     echo $error."<br /><br />"; 
     echo "Please go back and fix these errors.<br /><br />"; 
     die(); 
    } 


    // validation expected data exists 
    if(!isset($_POST['budget']) || 
     !isset($_POST['type'])) { 
     died('We are sorry, but there appears to be a problem with the form you submitted.');  
    } 

    $email = $_POST['email']; // required 
    $budget = $_POST['budget']; // required 
    $type = $_POST['type']; // required 
    $comments = $_POST['comments']; // not required 
    $error_message = ""; 
    $email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 
    $string_exp = "/^[A-Za-z .'-]+$/"; 

    if(strlen($error_message) > 0) { 
    died($error_message); 
    } 

    $email_message = "Form details below.\n\n"; 

    function clean_string($string) { 
     $bad = array("content-type","bcc:","to:","cc:","href"); 
     return str_replace($bad,"",$string); 
    } 

    $email_message .= "Email: ".clean_string($email)."\n"; 
    $email_message .= "Budget: ".clean_string($budget)."\n"; 
    $email_message .= "Type: ".clean_string($type)."\n"; 
    $email_message .= "Comments: ".clean_string($comments)."\n"; 

// create email headers 
$headers = 'From: '.$email."\r\n". 
'Reply-To: '.$email."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
mail($email_to, $email_subject, $email_message, $headers); 
?> 

<!-- THERE MY PHP CODE, I REMOVED IT ESPECIALLY FOR STACKOVERFLOW, BUT IT EXIST --> 

<?php 
} 
?> 

Aber es funktioniert nicht. Wenn ich auf "Senden" klicke, wird eine leere Seite angezeigt. Ich kann nicht verstehen, was das Problem ist.

Auch habe ich versucht nächste Skript und es funktionierte perfekt:

<?php 
    $to = "[email protected]"; 
    $subject = "This is subject"; 

    $message = "<b>This is HTML message.</b>"; 
    $message .= "<h1>This is headline.</h1>"; 

    $header = "From:[email protected] \r\n"; 
    $header .= "Cc:[email protected] \r\n"; 
    $header .= "MIME-Version: 1.0\r\n"; 
    $header .= "Content-type: text/html\r\n"; 

    $retval = mail ($to,$subject,$message,$header); 

    if($retval == true) { 
     echo "Message sent successfully..."; 
    }else { 
     echo "Message could not be sent..."; 
    } 
    ?> 
+0

Eine leere Seite ist normalerweise ein interner Serverfehler. Was enthält das Fehlerprotokoll Ihres Webservers? – TZHX

+0

Sie müssen expliziter mit der Post sein. Bereiten Sie einen Fall vor. Was hast du probiert? Wenn Sie auch hier etwas finden und das Problem nicht beheben kann. Wenn Sie zum Beispiel einen Fehler auf der Konsole haben, müssen Sie ihn anzeigen. Wenn Sie mehr Informationen geben, ist es ein bisschen besser. –

+0

Nichts. Ich habe dieses Skript auf einem anderen Hosting versucht und es hat perfekt funktioniert. –

Antwort

0

Es gibt nichts zeigt, ist, weil es nichts zu zeigen. Die einzige Stelle im Skript, an der etwas angezeigt werden soll, ist, wenn auf die Seite ohne die richtigen Post-Variablen zugegriffen wird (in diesem Fall wird der Inhalt der Methode died() angezeigt). Ganz unten in diesem Skript gibt es einen HTML-Kommentar mit <!-- HTML CODE HERE --> und da ist nichts.

+0

Ich habe HTML-Code, der angezeigt wird, ich habe es nur für stackoverflow entfernt und es mit einem Kommentar hinterlassen –

+0

Überprüfen Sie dann Ihre Fehlerprotokolle, oder aktivieren Sie die Protokollierung direkt für dieses Skript. Was sagen Sie? –

+0

Ich kann sie nicht überprüfen. Es ist verbotene Funktion auf meinem Host. –

0

Eine absolut leere Seite (d. H. Sogar keine Ausgabe, wenn Sie die Quelle der Seite im Browser anzeigen) bedeutet normalerweise, dass ein PHP-Fehler aufgetreten ist und die Fehlerberichterstattung deaktiviert ist. In diesem Fall sollten Sie in die Protokolldateien des Servers schauen, wenn Sie das können. (Es ist möglicherweise nicht auf einigen gehosteten Plattformen verfügbar.)

Häufige Fehler für solch einen "weißen Bildschirm des Todes" sind Syntaxfehler im PHP-Skript, aber Ihre scheint in Ordnung zu sein. Einige Host-Provider deaktivieren jedoch einige Funktionen wie die mail()-Funktion, um Skripts zu vermeiden, die Spam-E-Mails senden. In diesem Fall könnte die Funktion mail() einen internen Fehler verursachen, der die Skriptausführung zu diesem Zeitpunkt stoppt. Da dies vor dem Punkt liegt, an dem HTML-Code in Ihrem Skript gedruckt wird, könnte dies die Ursache des Fehlers sein.

+0

Vielen Dank! Mein Gastgeber verbietet es, die Protokolldateien des Servers zu sehen. Und, wie Sie in meinem aktualisierten Beitrag sehen können - ich kann E-Mail mit einem anderen Skript senden. Ich habe gerade eine Nachricht vom Support erhalten, sie sagten mir, dass der Fehler in diesem Stück Code -