首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于SQL语句的JSON AJAX循环数组

用于SQL语句的JSON AJAX循环数组
EN

Stack Overflow用户
提问于 2015-11-10 16:35:44
回答 1查看 343关注 0票数 1

希望你能帮我这个忙。我有一个数组,im发送到我的php脚本通过ajax处理。我想做的是循环遍历数组,并根据某个键的值,为该数组执行SQL语句。大多数情况下,它将是多个数组。下面是我得到的-- far....for --这个例子,我输入了静态值:

代码语言:javascript
复制
    <form id='logForm' method='post' action='seatingProcess.php'>
    <span id='"219"' changeType='SEATCHANGE' setDeskId='9-4' prevSeatNew='T'></span>
    <span id='"229"' changeType='SEATCHANGE' setDeskId='2-5' prevSeatNew='T'></span>
    <span id='"299"' changeType='REMOVESEAT' setDeskId='0'></span>
<div class='btn btn-primary' type='submit' id='submit'>Submit</div>
    </form>

Javascript

代码语言:javascript
复制
$('#submit').click(function(){
            var spans = $('#logForm span');
            var data = [];

             $(spans).each(function(){
                 var newItem = {};
                 var item = $(this);
                 newItem.id = $(item).attr('id');
                 newItem.deskval = $(item).attr('setDeskId');
                 newItem.changeType = $(item).attr('changeType');
                 newItem.prevSeatNew = $(item).attr('prevSeatNew');
                 data.push(newItem);                 
             })

             $.ajax({
                 type: "POST",
                 url: "seatingProcess.php",              
                 data: {data:data},
                 success: function(msg){
                     console.log(msg); //testing the sql statements
                 },
                 error: function(){
                     alert('fail');                  
                 }               
             })

seatingProcess.php

代码语言:javascript
复制
<?php
if(isset($_POST['data'])){
 $obj = $_POST['data'];
 $doKeyChange = ['changeType'];
 $addValue = 'SEATCHANGE';
 $delValue = 'REMOVESEAT';  

 foreach($obj as $doKeyChange => $addValue) {
    //Array[0] {'id' => 219, 'deskval' => 9-4, 'prevSeatNew' => T}
   //Array[1] {'id' => 229, 'deskval' => 2-5, 'prevSeatNew' => T}

    $userid = ['id'];
    $desk_id = ['desk'];
    $set_desk_id = ['deskval'];
    $prevseat = ['prevSeat'];
    $prevseatNew= ['prevSeatNew'];
    $sqlAdd = "UPDATE roster SET  seat='$set_desk_id' preDesk='$prevseatNew' WHERE id='$userid'";
    print_r ($sqlAdd);
}
 foreach($obj as $doKeyChange => $delValue) {
    //Array[2]{'id' => 299, 'deskval' => 0}
    $userid = ['id'];
    $set_desk_id = ['deskval'];
    $sqlAdd = "UPDATE roster SET  seat='$set_desk_id' WHERE id='$userid'";
    print_r ($sqlAdd);
}
}
?>

目前,我收到的错误如下:

注意:数组到字符串的转换

不知道该怎么做,提前谢谢

问题

如何编写php,使其获得所请求的键的值并将其放入SQL语句中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-10 17:04:04

您目前没有尝试将data数组序列化为可以由$.ajax()和PHP正确处理的格式。当您试图依赖jQuery的默认对象查询字符串转换时,如下所示:

代码语言:javascript
复制
data: {data:data},

jQuery期望data是可以序列化为查询字符串的对象(即键值对)。将数字索引数组作为data传递将导致所看到的转换错误。

您需要正确地创建一个序列化查询字符串,或者(这将是我的建议),因为您试图传递一个更复杂的数据结构,您可能会考虑使用POSTing头类型将数据结构和application/json编码到PHP。这将要求您在PHP中读取原始的POSTed数据,而不是从$_POST读取数据,因为PHP除表单编码的类型之外,不填充内容类型标头的$_POST超全局。

要发送JSON,ajax调用可能如下所示:

代码语言:javascript
复制
         $.ajax({
             type: "POST",
             url: "seatingProcess.php",
             contentType: "application/json",              
             data: JSON.stringify(data),
             success: function(msg){
                 console.log(msg); //testing the sql statements
             },
             error: function(){
                 alert('fail');                  
             }               
         })

在PHP中,您从原始输入中读取JSON,如下所示:

代码语言:javascript
复制
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33634970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档