只需点击插入数据按钮,注意一个警告框。这是一个关联数组。这些是我想传递给我的php文件的值。
在php文件中,我得到一个Post值,其中包含我从ajax数据传递的所有数据。我使用json_decode解码它。现在,数据被提取为stdClass类型的php数组。我现在使用预准备语句通过for循环语句插入所有php数组。
使用Xdebug,箭头在php文件的for循环内停止。之后,没有任何内容插入到我的数据库中。我还注意到在xdebug上评估php上的'count($ value)时,它返回1而不是3.并且在XDEBUG中评估$ value [0] - > fname也会返回错误。
sample.js
$('#ajax').click(function() {
var values = $('#mytable tbody tr').map(function() {
return {
fname : $('td:eq(0)',this).text(),
lname : $('td:eq(1)',this).text(),
point : parseInt($('td:eq(2)',this).text())
}
});
var valuesDebug = "";
for (var i = 0; i < values.length; i++)
{
valuesDebug += " " + values[i]["fname"] + " " + values[i]["lname"] + " " + values[i]["point"] + "\n";
}
alert(valuesDebug);
var valueStringed = JSON.stringify(values);
$.ajax({
"type":"POST",
"url":"insertData.php",
"data":{value : valueStringed},
"success":function(data){
alert('Done inserting the current table values');
}
});
});
insertData.php
<?php
if (isset($_POST['value']))
{
$value = json_decode(stripslashes($_POST['value']));
}
$mysqli = new mysqli("localhost","root","password","test");
if($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
$stmt = $mysqli->prepare("INSERT INTO team VALUES (NULL,?, ?, ?)"); //NULL is auto increment primary key id
$stmt->bind_param('ssi', $fname, $lname, $point);
if (count($value) > 0)
{
for( $i = 0 ;$i < count($value);$i++){
$fname = $value[$i]->fname;
$lname = $value[$i]->lname;
$point = $value[$i]->point;
$stmt->execute();
}
}
$stmt->close();
$mysqli->close();
?>
答案 0 :(得分:0)
一眼就能看到:
$stmt->bind_param('ssi', $fname, $lname, $point);
你的for循环作为定义它们在循环中,如果你按照上面那样做 - 变量是未定义的。
所以试试:
$stmt = $mysqli->prepare("INSERT INTO team VALUES (NULL,?, ?, ?)");
if (count($value) > 0)
{
for( $i = 0 ;$i < count($value);$i++){
$fname = $value[$i]->fname;
$lname = $value[$i]->lname;
$point = $value[$i]->point;
$stmt->bind_param('ssi', $fname, $lname, $point);
$stmt->execute();
}
}
答案 1 :(得分:0)
此代码现在有效。
请参阅我原来的javascript代码。 在这部分似乎我添加了一个数组valuesDebug并通过push方法从values数组中复制了内容。我不知道这究竟是为什么有效。有没有办法缩短它?
BTW第一行是我的表的行单元格内容被转换为values数组。
var values = $('#mytable tbody tr').map(function() {
return {
fname : $('td:eq(0)',this).text(),
lname : $('td:eq(1)',this).text(),
point : parseInt($('td:eq(2)',this).text())
}
});
var valuesDebug = [];
for (var i = 0; i < values.length; i++)
{
valuesDebug.push({fname: values[i]["fname"],lname: values[i]["lname"],point: values[i]["point"]});
}
var valueStringed = JSON.stringify(valuesDebug);
// passes valueStringed into ajax ...