2016-03-05 99 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 ...) –