2016-03-05 102 views
0

我有一個表格內的表,一旦單擊按鈕一個函數被調用,確認用戶輸入的內容(檢查以確保所有字段都有信息)。通過if語句進行處理並且沒有錯誤出現後,我想將用戶信息寫入mysql。如何從腳本調用ajax插入用戶輸入到mysql

我寫了ajax文件(見下文),我認爲我的錯誤是我如何調用ajax文件。我是編程新手,所以請和我一起裸照。沒有什麼是獲取寫入到數據庫表,我不知道我做錯了

<?php 
include_once("config.php"); 
$con = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
$date = $_POST['tDate'];  
$species = $_POST['tSpecies']; 
$sqrNum = $_POST['tSqrNum']; 
$lat = $_POST['tLat']; 
$lng = $_POST['tLng']; 
$cond = $_POST['tCond']; 
$num = $_POST['tNum']; 
$hab = $_POST['tHab']; 
$behav = $_POST['tBahav']; 
$reg = $_POST['tReg']; 

mysqli_query($con, "INSERT INTO species_reported (date, species, square_num, lat, long, condition, numbers_obs, habitat, behavior, region) 
    VALUES ('{$date}', '{$species}', '{$sqrNum}', '{$lat}', '{$lng}', '{$cond}', '{$hab}', '{$behav}', '{$reg}')"); 

?> 

,並從腳本

else{ 
    //$(document).ready(function(){ 
    $.ajax({ 
     type: "POST", 
     url:"ajax_write.php", 
     data:"date=" + tDate +"&Species="+ tSpecies +"&SqrNum="+ tSqrNum +"&lat=" + tLat + "&lng=" + tLng + "&cond=" + tCond +"&num=" + tNum + "&hab=" + tHab + "&behav=" + tBahav + "&reg=" + tReg, 
     dataType: "dataString", 
     cache: "true", 
     success: function(msg,string,jqXHR){ 
      $("#results").html(msg+string+jqXHR); 
     } 
    }); 
} 

}

編輯內...我檢查我的PHP日誌和看到未定義的索引:tSpecies(以及所有其他Post ['thisHere']。如果這有助於解決問題。我的理解是我可以發送數據,因爲我有和ajax會分配內容到PHP文件中的變量(即從jscript ..「date =」tDate)將被髮送到xj ax文件並將tDate的值(從javascript)分配給php變量$ date。

+0

哇,看來你發佈你什麼都知道,整個你的項目!對於你問的其他人來說,這種態度並不好。請編輯你的問題,只保留有意義的信息,不清楚你問什麼,問題在哪裏。 – Farside

回答

0

您在$_POST中使用的索引必須與$.ajaxdata:參數中的參數名稱匹配。您在參數中有date=,Species=等,但您嘗試訪問$_POST['tDate']$_POST['tSpecies']等。您需要更改其中一個以匹配另一個。

此外,我建議您使用一個對象而不是字符串作爲data:參數。如果這些值包含特殊字符,則這些值需要進行URL編碼,而您並未這​​麼做。如果你使用一個對象,jQuery負責格式化併爲你編碼。因此,它應該是:

data: { tDate: tDate, tSpecies: tSpecies, tSqrNum: tSqrNum, ... }, 

BTW,EcmaScript6提供了一個速記對象其屬性名是相同的含有它們的值的變量:

data: { tdate, tSpecies, tSqrNum, ... }, 
+0

非常感謝Barmar,這似乎解決了PHP錯誤,但用戶輸入仍未寫入數據庫表。我更新了我的jscript,如下所示:tDate tDate tSpecies tSpecies tSqrNum tSqrNum tLat tLat tLng tLng tCond tCond tNum tNum tHab tHab tBehav tBehav tReg tReg},並更新我的PHP爲$ lng = $ _POST ['tLng'];所以如果我明白這一點,我發送tDate(jscript中的value var tDate)到php文件中,其中$ date將被設置爲發送的tDate的值;所以如果tDate有數據,那應該被複制並插入到mysql中? –

+0

是的,它應該。也許你的查詢出錯了。在'mysqli_query'這一行的末尾添加'或die(mysqli_error($ con)'),我還建議你使用一個帶有'mysqli_stmt_bind_param'的準備好的語句,而不是把變量放到查詢中。 – Barmar

+0

所以我在一個插入行中我從phpadmin複製到ajax文件中,當從javascript調用時,它會在數據庫中創建記錄。感謝您所有的幫助barmar,它是我需要解決這個問題的最後一塊難題。 (INT,DATE ...) –