它没有在db中插入正确的值?

时间:2013-01-11 08:50:56

标签: php jquery ajax mysqli

我想将一个sessionid和一组学生插入数据库。

可以在下面的代码行中找到sessionid:

<td><input type='hidden' id='currentId' name='Idcurrent' readonly='readonly' value='4' /> </td>

一组学生将显示在选择框中,如下所示:

<select id="studentadd" name="addtextarea">
<option value='1'>u08743 - Joe Cann</option>
<option value='4'>u03043 - Jill Sanderson</option>
<option value='7'>u08343 - Craig Moon</option>
</select>

现在我使用ajax来获取sessionId值和学生的值,并将它们发布到一个单独的php页面中,其中使用下面的代码进行插入:

 function submitform() {    

    $.ajax({
        type: "POST",
        url: "updatestudentsession.php",
data: { 
    Idcurrent:  $('#currentid').val(),
    addtextarea:$('#studentadd').val()
        },
        dataType:'json',  //get response as json
        success: function(result){
                    if(result.errorflag){

      $("#targetdiv").html('success');  

    }else{
       //you got success message

            $("#targetdiv").html('error');

    $('#targetdiv').show();
        }
    }
  });        
}

以下是单独的php文件updatestudentsession.php,其中假设执行插入:

$studentid = array();
$studentid[] = (isset($_POST['addtextarea'])) ? $_POST['addtextarea'] : '';  
$sessionid = (isset($_POST['Idcurrent'])) ? $_POST['Idcurrent'] : '';   

$insertsql = "
INSERT INTO Student_Session
(SessionId, StudentId)
VALUES
(?, ?)
";
if (!$insert = $mysqli->prepare($insertsql)) {
// Handle errors with prepare operation here
}                                       

foreach($studentid as $id)
{    

$insert->bind_param("ii", $sessionid, $id);

$insert->execute();

if ($insert->errno) {
// Handle query error here
}

}

$insert->close();

现在我遇到的问题是根本没有插入正确的数据。它会在0SessionId字段中插入值StudentId。下面是插入后表格的样子:

SessionId   StudentId
4           1
4           4
4           7

相反,它看起来如下:

SessionId   StudentId
0           0

我的问题是什么导致它无法检索并将正确的数据插入数据库?

2 个答案:

答案 0 :(得分:2)

假设问题的一部分在这里:

Idcurrent:  $('#currentid').val(),

当您尝试获取ID为currentId的元素时,HTML代码ID为currentid。 id选择器区分大小写。因此,您只需将任何内容传递给PHP,因为jquery无法找到元素。

不确定$studentid有什么问题,但我认为没有理由在那里使用数组,因为你总是只传递一个值,所以尝试改变你的php代码,如下所示:

$studentid = (isset($_POST['addtextarea'])) ? $_POST['addtextarea'] : array();  
$sessionid = (isset($_POST['Idcurrent'])) ? $_POST['Idcurrent'] : '';   
//var_dump($studentid);
//var_dump($sessionid);
//var_dump($_POST); - this is additionally to see whole $_POST variable.
$insertsql = "
INSERT INTO Student_Session
(SessionId, StudentId)
VALUES
(?, ?)
";
if (!$insert = $mysqli->prepare($insertsql)) {
// Handle errors with prepare operation here
}                                       


foreach($studentid as $id)
{    
   $insert->bind_param("ii", $sessionid, $id);
   $insert->execute();
   if ($insert->errno) {
      // Handle query error here
   }
} 

$insert->close();

另外,请在开头注释var_dump行。他们将打印变量的值,这样您就可以看到实际设置的内容。 (因为它是ajax,您需要打开开发人员工具并查看网络选项卡上的结果中返回的内容)

<强> UPD:

根据最新评论,似乎$_POST['addtextarea']是一个数组。因为代码被修改以处理它。请注意该值是如何得出的:

$studentid = (isset($_POST['addtextarea'])) ? $_POST['addtextarea'] : array();  

旧代码,即:

$studentid = array();
$studentid[] = (isset($_POST['addtextarea'])) ? $_POST['addtextarea'] : '';  

导致两级数组。所以$ studentid是一个包含一个元素的数组,也是一个数组。这就是为什么旧循环不起作用的原因。 $ id是一个数组。它被转换为0

答案 1 :(得分:0)

我认为数据存在问题:

data: { 
    Idcurrent:  $('#currentid').val(),
    addtextarea:$('#studentadd').val()
        },

尝试:

data: { 
    "Idcurrent":  $('#currentid').val(),
    "addtextarea":$('#studentadd').val()
        },

请注意不要双引号“In Current”