2012-06-25 90 views
0

我想知道是否有人能夠幫助我。用Ajax向MySQL提交表格

有段時間我一直在尋找一篇教程/文章,向我展示如何設置表單並使用AJAX將用戶輸入提交給mySQL數據庫。

儘管這並沒有告訴我如何將數據發送到數據庫,但this文章爲我提供了一個很好的起點,它也給了我關於在線消息的'外觀和感覺',我希望納入我的表格。

我現在已經開始修改示例腳本,但是我很難將數據提交到我的數據庫。

在形式,我改變了這一節:

$.ajax({ 
      url: contactForm.attr('action') + "?ajax=true", 
      type: contactForm.attr('method'), 
      data: contactForm.serialize(), 
      success: submitFinished 
     }); 

    } 

$.ajax({ 
     url: contactForm.attr('savecontact.php') + "?ajax=true", 
     type: contactForm.attr('post'), 
     data: contactForm.serialize(), 
     success: submitFinished 
    }); 
    } 

,並在PHP腳本,我已經改變了這個到現在閱讀:

<?php 

// Read the form values 
$success = false; 
$senderName = isset($_POST['senderName']); 
$senderEmail = isset($_POST['senderEmail']); 
$message = isset($_POST['message']); 


if ($senderName && $senderEmail && $message) { 

    $query = "INSERT INTO `contact` (senderName, senderEmail, message) VALUES ('$senderName', '$senderEmail', '$message')"; 
mysql_query($query) or die(mysql_error()); 
}   
// Return an appropriate response to the browser 
if (isset($_GET["ajax"])) { 
    echo $success ? "success" : "error"; 
} else { 
?> 
<html> 
    <head> 
    <title>Thanks!</title> 
    </head> 
    <body> 
    <?php if ($success) echo "<p>Thanks for sending your message! We'll get back to you shortly.</p>" ?> 
    <?php if (!$success) echo "<p>There was a problem sending your message. Please try again.</p>" ?> 
    <p>Click your browser's Back button to return to the page.</p> 
    </body> 
</html> 
<?php 
} 
?> 

我遇到的問題是在發送表單時,屏幕上顯示sending消息,並繼續卡住這個消息和非數據發送到我的數據庫,我必須承認我真的不知道爲什麼。

我明白,由於我缺乏經驗,可能會有一種更簡單的方法來達到我想要的效果,我可能會過於簡單地看待這個問題,但我只是想知道是否有人可以看看這個並讓我知道我要去哪裏錯了。

許多的感謝和親切的問候

+0

表單上沒有'savecontact.php'這樣的屬性。你應該回滾你的JavaScript代碼。 –

+0

嗨@Truth,謝謝你。我做了更改,正如我在下面的帖子中突出顯示的那樣。親切的問候 – IRHM

+0

您需要發佈更多的php - 即變量$ senderName,$ senderEmail和$ message的設置在哪裏? – bcmcfc

回答

1

變化:

contactForm.attr('savecontact.php') 

要:

contactForm.attr('action') 

而且

type: contactForm.attr('post'), 

type: contactForm.attr('method'), 

由於attr用於讀取標籤屬性。在這種情況下,您的表單標記的action屬性。

根據您的表單的method屬性,你將不得不使用$_POST$_GET陣列獲得通過AJAX提交的值,或者您也可能希望使用$_REQUEST(不推薦,雖然方式)

+0

嗨@Blaster,謝謝你花時間幫助我。正如我在原來的文章中所說的那樣,我對此比較陌生,所以我的經驗顯然導致了這些最初的錯誤。我已經做出了您所建議的更改,雖然屏幕不再停留在「發送」消息上,但現在我收到了「有問題......」消息,但不幸的是,數據尚未傳輸到我的數據庫,請你告訴我,你有什麼想法,我哪裏會出錯?親切的問候 – IRHM

0

除了衝擊波的回答,你的PHP代碼也需要一些固定:

$senderName = isset($_POST['senderName']); 
$senderEmail = isset($_POST['senderEmail']); 
$message = isset($_POST['message']); 

在這裏,我們這些變量設定的POST變量是否被設置,而不是實際值的布爾值。

$senderName = mysql_real_escape_string($_POST['senderName']); 
$senderEmail = mysql_real_escape_string($_POST['senderEmail']); 
$message = mysql_real_escape_string($_POST['message']); 

這應該能夠正常工作,但容易受到SQL注入的影響。 mysql_*函數已被棄用,建議學習PDO或MySQLi並準備好語句。請參閱PHP手冊中的this page以獲取更多信息。

+0

您好@bcmcfc,非常感謝您的幫助。數據現在保存到我的數據庫中,這非常棒。但是,即使發生這種情況,我在收到「出現問題」之前會暫時收到「正在發送」消息。這意味着表單不會從屏幕上消失。我已經做了一些測試,問題在於上面那些被改變的行。即,只要此'$ senderName = isset($ _POST ['senderName'])? preg_replace(「/ [^ \。\ - \'a-zA-Z0-9] /」,「」,$ _POST ['senderName']):「」;'更改了功能無法正常工作。有什麼想法嗎?親切的問候 – IRHM