2014-10-01 29 views
-1

我正在製作一個包含四個字段(用戶名,電子郵件,密碼,密碼重複)的註冊表單的網站。我想運行驗證實驗,因此,當有人提交表單時,我希望電子郵件字段中的值能夠發送到我自己的電子郵件地址,以便我們在上線時能夠注意到他。爲了實現這一點,我使用電子郵件說明在窗體和mailer.php頁面中創建了一個html/bootstrap頁面。下面是註冊表單:如何使用php發送表單給自己的電子郵件?

<div class="bs-example"> 
<div class="col-md-4 col-md-offset-4"> 
<form action="mailer.php" id="interest-form" method="POST"> 
    <div class="form-group"> 
     <input type="username" class="form-control" id="inputUsername" placeholder="Username"> 
    </div> 
    <div class="form-group"> 
     <input type="email" class="form-control" id="inputEmail" placeholder="Email"> 
    </div> 
    <div class="form-group"> 
     <input type="password" class="form-control" id="inputPassword" placeholder="Password"> 
    </div> 
    <div class="form-group"> 
     <input type="password" class="form-control" id="inputPassword" placeholder="Repeat password"> 
    </div> 
    <div class="checkbox"> 
     <label><input type="checkbox">Remember me</label> 
    </div> 
      <button class='btn btn-signup btn-signup-sm btn-interest' id="interested" type="submit" name="remove_levels" value="delete">Sign up</button> 
</form> 
</div> 
</div> 

,這裏是一些JavaScript我用它來做一個確認框彈出窗口,詢問用戶是否希望得到通知我們何時推出,並留下他的郵件:

<script type="text/javascript"> 
$(document).ready(function(){ 
$('.btn').on('click', function(e){ 
e.preventDefault();   // this line is key to preventing page reload 
          // when user clicks submit button inside form 
    bootbox.confirm("Work on the game is still in progress. Submit the form and you will receive an email as soon as we launch.", function(result) { 
    ("Confirm result: "+result); 
       if (result > 0){ 
        $('#interest-form').submit(); 
       }; 
    }); 
}); 
}); 

當人是點擊該郵件,他被引導到mailer.php頁面看起來像這樣:

<?php 

function check_input($data, $problem='') 
{ 
    return $data; 
} 

function show_success($message) 
{ 
    print_r($message); 
} 

function show_error($myError) 
{ 
    print_r("error:".$myError); 
} 

if (!isset($_POST["submit"])) { 

    $myemail = "[email protected]"; 

    $username = check_input($_POST['inputName'], "Username"); 
    $email = check_input($_POST['inputEmail'], "Email"); 

    $subject = "Someone has sent you a message\r\n"; 

    $message = "Someone has sent you a message using your contac form: \r\n Username:".$username."\r\nEmail:".$email."\r\n"; 

    mail($myemail, $subject, $message); 

    show_success($message); 
    exit(); 
} 
?> 

現在註冊表格和bootbox確認工作,但問題的關鍵在於寄來把電子郵件地址發送到我的電子郵箱當我點擊註冊按鈕後,我把頁面放在服務器上,我得到一個405:方法不允許錯誤:

代碼:MethodNotAllowed 消息:指定的方法不允許針對此資源。 的ResourceType:OBJECT 方法:POST 的requestId:0565E2E8DB90C71B 主機ID:cWkoCKGeVwAWRH/X3brKzv1tTnNuQxylIPm8kd9Fid8U0vWulYB2bJz/IgoqyRvNor

或當我點擊鏈接,通過我的本地瀏覽器我看到一個包含確切的PHP代碼我寫了一個白色的頁面。所以我想知道以下內容:

  • 我的mailer.php代碼是否正確寫入,或者我犯了一些愚蠢的錯誤?

  • 我通過Amazon S3託管網站。這可能是與服務器有關的問題嗎?在這之前,我需要做些別的事嗎?

我希望這裏的某個人能夠識別問題,因爲我真的被卡住了。

由於提前,

斯泰恩

編輯:

我根據建議由奧萊這樣做,但我仍然得到同樣的錯誤消息改變了代碼。現在我的代碼如下所示:

<div class="bs-example"> 
<div class="col-md-4 col-md-offset-4"> 
<form action="mailer.php" id="interest-form" method="POST"> 
    <div class="form-group"> 
        <input type="text" class="form-control" name="inputUsername" value="" placeholder="Username" /> 
    </div> 
    <div class="form-group"> 
        <input type="text" class="form-control" name="inputEmail" value="" placeholder="Email" /> 
    </div> 
    <div class="form-group"> 
        <input type="password" class="form-control" name="inputPassword" value="" placeholder="Password" />  
    </div> 
    <div class="form-group"> 
        <input type="password" class="form-control" name="inputPassword" value="" placeholder="Password" /> 
    </div> 
    <div class="checkbox"> 
     <label><input type="checkbox">Remember me</label> 
    </div> 
      <button class='btn btn-signup btn-signup-sm' id="interested">Sign up</button> 
</form> 
</div> 
</div> 

這裏是由OLE建議代碼:

<?php 
if($_SERVER['REQUEST_METHOD'] == "POST"){ 

    $myemail = "[email protected]"; 

    $username = $_POST['inputName']; 
    $email = $_POST['inputEmail']; 

    $subject = "Someone has sent you a message\r\n"; 

    $message = "Someone has sent you a message using your contac form: \r\n Username:".$username."\r\nEmail:".$email."\r\n"; 

    if(mail($myemail, $subject, $message)){ 
     echo "Mail is sent"; 
    } 
    else { 
     echo "An error occured"; 
    } 

    exit(); 
} 
?> 

我仍然無法擺脫那個煩人的錯誤信息,希望有人能幫助我發現我的錯誤。

+0

得到這個什麼您收到的錯誤 – 2014-10-01 07:50:55

+0

您的表單似乎沒有任何名爲'submit'的輸入? – 2014-10-01 07:51:31

+0

@RowlandShaw提交部分在javascript代碼中:$('#interest-form')。submit(); – Stijn 2014-10-01 07:55:05

回答

2

這裏有幾個關於你的代碼的問題。

問題1: 所有的輸入元素缺少名稱屬性。這是張貼場對$_POST陣列的價值,即:

<input type="text" name="thisistext" value="test" /> 

將創建一個$_POST排列如下:$_POST['thisistext'] = "test"; 所以第一關,你將不得不把名字對您的輸入。這基本上是你迄今爲止使用id屬性的原因。

問題2: 儘管這不是一個直接的問題,但您的PHP代碼包含一些不必要的函數,無論如何返回成功。首先。更改if(!isset($_POST['submit']))並刪除使用check_input(),除非您打算擴展功能以實際執行某些操作。 我還想建議你改用這樣的:因爲從發佈數據

$username = $_POST['inputUsername']; 

<?php 
    if($_SERVER['REQUEST_METHOD'] == "POST"){ 

     $myemail = "[email protected]"; 

     $username = $_POST['inputName']; 
     $email = $_POST['inputEmail']; 

     $subject = "Someone has sent you a message\r\n"; 

     $message = "Someone has sent you a message using your contac form: \r\n Username:".$username."\r\nEmail:".$email."\r\n"; 

     if(mail($myemail, $subject, $message)){ 
      echo "Mail is sent"; 
     } 
     else { 
      echo "An error occured"; 
     } 

     exit(); 
    } 
?> 
+0

謝謝你清理代碼Ole!我從教程中獲得了以前的PHP代碼,但是這看起來更加乾淨,現在我可以更好地理解代碼的作用。但是新的代碼仍然存在錯誤消息(請參閱編輯)。任何線索現在可能是什麼問題?也許我不會通過javascript代碼正確傳遞帖子值? – Stijn 2014-10-01 10:01:37

0

在您的文件mailer.php更改此:

$username = $_POST['inputName']; 

本表單在inputUsername下,而不在inputName下。 例如,如果你在你的形式,例如

<input type="text" class="form-control" name="example" value="" placeholder="Username" /> 

,以獲得在該領域的形式發佈的數據有一個領域,你需要這個PHP代碼

$example = $_POST['example']; 
相關問題