php - 它没有在数据库中插入正确的值?

标签 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();

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

SessionId   StudentId
4           1
4           4
4           7

它看起来像下面这样:

SessionId   StudentId
0           0

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

最佳答案

假设部分问题在这里:

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,您需要打开开发人员工具并在网络选项卡上查看结果返回的内容)

更新:

根据最新的评论,$_POST['addtextarea'] 似乎是一个数组。因为修改了代码来处理这个问题。请注意如何获取该值:

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

旧代码,即:

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

结果为二级数组。所以 $studentid 是一个数组,其中包含一个也是数组的元素。这就是为什么 old for each 循环不起作用的原因。 $id 是一个数组。并转换为0

关于php - 它没有在数据库中插入正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14274563/

相关文章:

php - Json 错误 : Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value. }

javascript - 在单页网站上设置联系表单/脚本

php - 带有下拉选择的表单,从 2 个连接的 mysql 表收集数据并将它们保存到 1 个表中

javascript - 从 jquery textarea 中按 UP 键向上移动

javascript - 在 Chrome 中禁用 'Use Password for' 自动完成

php - AJAX 调用不工作,即使 PHP 和 JS 文件自己工作

php - LAMP 服务器 - 一个命令?

javascript - jQuery 淡入一个<li>?

javascript - 寻找从自动完成键发送用户指定值的表单示例

javascript - 如何获取数据表列的值?