【问题标题】:it is not inserting correct values in db?它没有在数据库中插入正确的值?
【发布时间】:2012-12-25 19:44:39
【问题描述】:

我想在数据库中插入一个 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

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

【问题讨论】:

  • 请缩小到有问题的部分,不要发布html + js + php ....
  • 进行研发并仅指定您发现错误的部分。
  • 检查您的数据部分,数据:{ Idcurrent: $('#currentid').val(), addtextarea:$('#studentadd').val() } 是否带有 @ 的有效 json 987654321@
  • 通过赋予表单元素 id="" 和 name="" 属性相同的值来简化您的生活。
  • 您的 studentid 数组是否以正确的方式包含数据?

标签: php jquery ajax mysqli


【解决方案1】:

假设部分问题在这里:

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

在您的 HTML 代码中,当您尝试获取 ID 为 currentid 的元素时,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 是一个数组,它包含一个元素,它也是一个数组。这就是为什么 old for each loop 不起作用的原因。 $id 是一个数组。它被转换为0

【讨论】:

  • var_dump($_POST) 显示:array(1) { ["addtextarea"]=&gt; array(1) { [0]=&gt; string(2) "4" } }。这是我试图只将学生 4 插入数据库的时候。它为 SessionId 插入 0,为 StudentId 插入 1,这很奇怪
  • 嗯。好的。您根本没有传递会话 ID。假设这是因为选择器错误。尝试将Idcurrent: $('#currentid').val(), 更改为Idcurrent: $('#currentId').val(),。假设会话将以这种方式固定。关于 studentId - 奇怪为什么它是一个数组,但无论如何。让我更新我的答案以显示它应该如何工作。
  • @user1930247 查看我的更新答案。 UPD 部分描述了更改。代码也改了!
  • 在你更新之前,我只是想在插入多个学生时显示 var dump array(1) { ["addtextarea"]=&gt; array(3) { [0]=&gt; string(2) "39" [1]=&gt; string(2) "40" [2]=&gt; string(2) "36" } } 我会测试你的更新
  • 现在唯一的问题是它没有从 $sessionid 变量中选择 SessionId。当我将输入从隐藏更改为文本时,正在显示该数字。可能是因为按钮和 ID 是不同的形式吗?我将在问题下方显示更新。给我5分钟
【解决方案2】:

我认为数据中有问题:

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

试试:

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

请不要使用双引号“Idcurrent”

【讨论】:

  • 这不会有什么不同。有效标识符允许作为 ECMAScript 对象文字中的键,并隐式转换为字符串。考虑({foo: "bar"})["foo"],它是有效的语法,计算结果为"bar"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多