2017-10-06 2 views
0

Ich versuche, ein HTML-Kontaktformular auf meiner Website einzurichten, die PHP verwendet, um die in das Formular eingegebenen Informationen an meine E-Mail-Adresse zu senden.Ich kann meine PHP-Datei nicht mit xampp posten

Leider bekomme ich immer einen Fehler, der sagt Cannot POST /form.php und ich kann nicht herausfinden, warum.

Ich schaute durch ähnliche Fragen, die hier auf StackExchange und die Nummer eins Ursache schien, dass die PHP-Datei nicht im selben Ordner wie die Datei index.html war. Beide Dateien befinden sich jedoch in demselben Ordner. newwebsite/index.html und newwebsite/form.php.

Also, warum konnte das passieren?

Hier ist meine index.html Form:

<form method='post' action='form.php'> 
       <label>Name: </label> 
       <input type='text' name='vistorName' id='form-name' placeholder="Type your name.." required> 
       <br> 
       <label>Email: </label> 
       <input type='email' name='vistorEmail' id='form-email' placeholder="Type your email.." required> 
       <br> 
       <label>Msg: </label> 
       <textarea type='text' name='vistorMsg' id='form-msg' placeholder="Type your message here..." required></textarea> 
       <br> 
       <input type='submit' action="submit" value='Submit' id='submit-button' required><br> 
      </form> 

Und hier ist meine form.php Datei:

<?php 
    //Pulling values that were entered into the form. 
$name = $_POST['visitorName']; 
$email = $_POST['visitorEmail']; 
$message = $POST['visitorMsg']; 

//Structure of email that I will receive with the form info 
$email_from = "[email protected]"; 
$email_subject = 'New Contact Form Message'; 
$email_body = "You have received a new message from $name. \n". 
       "Here is the message: \n $message". 

//Sending to my email address and using the mail function 
    $to = "[email protected]"; 
$headers = "From: $email_from \r\n"; 
$headers .= "Reply-To: $email \r\n"; 
mail($to,$email_subject,$email_body,$headers); 

//Validating the form 
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; 
    } 

} 

if(IsInjected($email)) 
{ 
    echo "Bad email value!"; 
    exit; 
} 





?> 

//HTML confirmation that message was sent. 
    <html lang='en'> 
    <h1>Your email has been sent. Thank-you!</h1> 



    </html> 
+1

Warum haben Sie ein Aktionsattribut für den Übermittlungsschaltflächentyp? Woher kommt der Fehler, den du sagst? – Akintunde007

+0

Hier ist ein Tippfehler. $ message = $ POST ['visitorMsg'] – Akintunde007

+0

Du rufst nicht 'isInjected' an, bevor du die E-Mail sendest, also nutzlos. Wenn Sie nicht versuchen, Header zu injizieren, müssen Sie einen Schritt zurück machen. –

Antwort

0

Mit einigen Modifikationen, Ihr Code auf meinem Server gearbeitet.

Per Akintunde Kommentar, Ihre Form hat Fehler in den Feldnamen:

<html> 
<form method='post' action='form.php'> 
       <label>Name: </label> 
       <input type='text' name='visitorName' id='form-name' placeholder="Type your name.." required> 
      <br> 
      <label>Email: </label> 
      <input type='email' name='visitorEmail' id='form-email' placeholder="Type your email.." required> 
      <br> 
      <label>Msg: </label> 
      <textarea type='text' name='visitorMsg' id='form-msg' placeholder="Type your message here..." required></textarea> 
      <br> 
      <input type='submit' action="submit" value='Submit' id='submit-button' required><br> 
     </form> 

Ihr "form.php" überprüft die E-Mail-Adresse nach dem Versuch, die E-Mail zu senden. Außerdem werden HTML-Kommentare anders als PHP-Kommentare identifiziert. Ich habe diese zwei Änderungen vorgenommen.

<?php 
//Pulling values that were entered into the form. 
$name = $_POST['visitorName']; 
$email = $_POST['visitorEmail']; 
$message = $POST['visitorMsg']; 

if(IsInjected($email)) 
{ 
echo "Bad email value!"; 
exit; 
} 


//Structure of email that I will receive with the form info 
$email_from = "[email protected]"; 
$email_subject = 'New Contact Form Message'; 
$email_body = "You have received a new message from $name. \n". 
      "Here is the message: \n $message". 

//Sending to my email address and using the mail function 
$to = "[email protected]"; 
$headers = "From: $email_from \r\n"; 
$headers .= "Reply-To: $email \r\n"; 
mail($to,$email_subject,$email_body,$headers); 

//Validating the form 
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; 
} 

} 



?> 
    <html lang='en'> 

<!-- HTML confirmation that message was sent. --> 
    <h1>Your email has been sent. Thank-you!</h1> 

    </html> 
+0

Okay, ich habe getan, was Sie vorgeschlagen haben, und nur den bearbeiteten Code kopiert und eingefügt, aber es gibt mir immer noch den gleichen Fehler. Ich habe $ message = $ POST ['visitorMsg'] korrigiert und $ message = $ _POST ['visitorMsg] gemacht. Ich sollte das name-Attribut verwenden, um die Werte richtig zu bekommen? Nicht die HTML-ID, oder bin ich verwirrt? Edit: Auch, wenn ich die Konsole auf der Can not POST/form.php Seite nach dem Schlagen zu öffnen, bekomme ich diesen Fehler: Fehler beim Laden der Ressource: Der Server antwortete mit einem Status von 404 (nicht gefunden). Wenn das irgendwas hilft. – Zac

+0

Können Sie sehen, ob der Fehler vom Browser oder von Ihrem Server verursacht wird? – UML

+0

Edit: Sorry, ich denke es ist der Browser, nicht der Server. Als ich es aktualisiert habe und es erneut versucht habe, ist der Fehler in Apache/Xampp verschwunden, aber es gibt immer noch einen Fehler in der Konsole in Chrome, der besagt, dass der Server mit 404 (nicht gefunden) geantwortet hat. – Zac

Verwandte Themen