2013-11-15 168 views
0

我想使用jquery將值提交給數據庫。我對ajax很陌生,但我需要用ajax來做。使用ajax提交表單

這是我做了什麼,到目前爲止我的PHP代碼

function insertSeries() 
{ 
    $options = array(
     'user' => $_POST['user'], 
     'email' => $_POST['email'], 
     'summary' => $_POST['summary'], 
     'due_date' => $_POST['due_date'], 
     'problem_type' => $_POST['problem_type'], 
     'status' => $_POST['status'] 
    ); 

    $sql = "insert into ticket_summary('user','email','summary','due_date','problem_type','status') Values (?,?,?,?,?,?)"; 
    $result = mysql_query($sql, $options) or die('Could not insert data'); 


} 

我的HTML代碼是

<?php 
    include 'eric_api.php'; 
    ?> 

    <!DOCTYPE html> 

    <html> 
<head> 
    <title></title> 
    <script src="js/jquery.js"></script> 
    <script src="js/api_calls.js"></script> 
    <link rel="stylesheet" href="css/normalizer.css" /> 
    <link rel="stylesheet" href="css/style.css" /> 
</head> 

<body> 
    <div class="wrapper"> 
     <h1>Ticketing System</h1> 
     <div> 
      <div id="ticket_form_wrapper"> 
       <form id="insert_ticket" method="post" action=""> 
        <p> 
         <label for="user">User</label> 
         <br /> 
         <input type="user" id="user" class="post_fields" /> 
        </p> 
        <p> 
         <label for="email">Email</label> 
         <br /> 
         <input type="email" id="email" class="post_fields" /> 
        </p> 
        <p> 
         <label for="summary">Summary</label> 
         <br /> 
         <input type="summary" id="summary" class="post_fields" /> 
        </p> 
        <p> 
         <label for="due_date">Due Date</label> 
         <br /> 
         <input type="due_date" id="due_date" class="post_fields" /> 
        </p> 
        <p> 
         <label for="problem_type">Problem Type</label> 
         <br /> 
         <input type="problem_type" id="problem_type" class="post_fields" /> 
        </p> 
        <p> 
         <label for="status">Status</label> 
         <br /> 
         <input type="status" id="status" class="post_fields" /> 
        </p> 
        <p> 
         <input type="submit" id="submit" value="Submit" /> 
         <input type="button" onclick="window.location='index.php'" value="Go to List"/> 
         <div class="form_result"> </div> 
        </p> 
       </form> 
      </div> 

     </div> 
</body> 
    </html> 

,這裏是使用jQuery我的AJAX

$('#insert_ticket').submit(function(e){ 
    var postData = $(this).serialize(); 
    alert(postData); 

    $.ajax({ 
     type: 'POST', 
     url: 'http://localhost/api/eric_api.php?q=insertseries', 
     data: postData, 
     success: function(response){ 
      $('#insert_ticket').find('.form_result').html(response); 
     }, 
     error: function(){ 
      alert('error'); 
     } 
    }); 
    e.preventDefault(); 
}); 

我不不知道我做錯了什麼。任何幫助將不勝感激

+2

哪裏有問題?哪裏控制檯錯誤? – AuthorProxy

+0

它在做什麼?我想你可能需要添加'global $ _POST;'到你的函數'insertSeries()'因爲範圍。或者將它傳遞給函數。 –

+1

@ user623952'$ _POST'是一個超全球化的,它到處可用 – Izkata

回答

1

而不是干擾表單的提交事件,而是干擾點擊事件。要對現有設置進行最小限度的更改,只需將點擊處理程序添加到表單提交按鈕即可。處理程序中的第一件事情是調用e.preventDefault()。您必須顯式選擇處理程序中的表單才能序列化數據。然後,將您現有的ajax調用移入該處理程序,並且它應該正常工作。另外,確保你實際上在你的PHP代碼的某個地方調用了insertSeries()。

乾杯

+0

只是想知道,就我的知識b/c而言,我經常這樣做,做你的建議有什麼好處嗎? –

+0

干擾表單中的提交事件可能會在某些瀏覽器中變得毛茸茸的。 XMLHttp請求和表單只是非常切線相關,所以將一個耦合到另一個創建一個實際上不存在的關係。通過將代碼放置在點擊處理程序中,您還可以選擇在將來從表單移開。說道路兩個月後,獲取信息的新媒介就變得可用了。而不是寫一個新的函數,舊的函數可以作爲不同的處理程序重用。 – Zhube

+0

我不知道。我一直在以另一種方式看待它......就看起來很自然和「相關」而言。不過,我會在下次我寫東西的時候這樣做。讓瀏覽器開心總是首選。 –

0

請回復一些評論,所以我們可以幫助弄清楚是什麼問題。這就是你的函數如何使用正確的mysqli語法。

注意:你正在使插入字符串像它將用於mysqli但您的參數綁定更類似於pdo。我不確定你想要使用哪一個,所以我選擇了mysqli。我個人更喜歡PDO,不過...所以我可以用這個來重新寫這個,如果你想的話。 Link to the PDO Prepare Function that also shows some binding.

// this is your database connection for mysqli 
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world'); 

function insertSeries($mysqli) 
{ 
    $options = array(
     'user' => $_POST['user'], 
     'email' => $_POST['email'], 
     'summary' => $_POST['summary'], 
     'due_date' => $_POST['due_date'], 
     'problem_type' => $_POST['problem_type'], 
     'status' => $_POST['status'] 
    ); 

    $sql = "insert into ticket_summary('user','email','summary','due_date','problem_type','status') 
            Values (?,  ?,  ?,   ?,   ?,  ?)"; 


    if ($stmt = $mysqli->prepare($sql)) 
    { 
     $stmt->bind_param("ssssss", $options['user'], $options['email'], 
            $options['summary'], $options['due_date'], 
            $options['problem_type'], $options['status']); 

     $success = $stmt->execute(); 

     if ($success) { print "query worked"; } 
       else { print "query failed"; } 
    } 
} 
+0

好吧,讓我試試看看,這對我的工作感謝您的快速回復 –

+0

@EricEvans - 請你回覆一些評論?你的代碼甚至在哪裏失敗?我重寫了函數b/c,我可以看到明顯的錯誤,但它也可能是您的ajax的問題​​。你有什麼錯誤嗎?什麼代碼正在達到?你有沒有得到任何輸出? –

+0

ajax的作品,因爲它確實達到我的PHP代碼,但它說,我的SQL有問題,我的索引是未定義的。你能告訴我可以在哪裏看到像這樣的mysqli連接。你創建了一個對象,但我正在尋找PHP網站,並且找不到這樣做。請給我一個參考。 –