【问题标题】:Reading json array in php在php中读取json数组
【发布时间】:2016-10-03 18:14:48
【问题描述】:

我有一个这个变量:

var order = $('#listadoImages').sortable('serialize');

当将订单变量从 JSON 发送到 PHP 时,显示“id[]=18&id[]=19”,我的问题是我无法在 php 中读取它。我尝试使用 foreach 但返回错误。

我的 ajax 代码:

 $("#mainAction").click(function(){
         //alert("New position: " + ui.item.index());
            var order = $('#listadoImages').sortable('serialize');
            var rutas = [];
            $('#listadoImages li').each(function(index, li){
                var bg = $(this).find('span').css('background-image');
                bg = bg.replace('url(','').replace(')','').replace(/\"/gi, "");
                var res = bg.substring(42);

                if(index == 0){
                    rutas += res;
                }else{
                    rutas += ";" + res;
                }

            });


            //alert(rutas);
            $.ajax({
              type: "POST",     
              url: "functions/guardar.php",
              data: {
              orden : order,
              path : rutas
              },
              "success":function(data){

              }
            });
        });

我的 PHP 代码:

$paths =  $_POST['path'];
$orden = $_POST['orden'];
$rutas = explode(";", $paths);

if(isset($paths)){

    $sql = "SELECT * FROM imagenes";
    $respuesta = mysql_query($sql);

    if($respuesta){
    $i=0;
        while( $rs = mysql_fetch_assoc($respuesta) ){
            $rutaBD = $rs['ruta_imagen'];
          foreach ($orden as $k => $value) {
            foreach ($rutas as $key => $rut) {
                        for($i=0;$i<count($rut);$i++){
                            if($rutaBD == $rut){
                               //Here Update Statment
                            }
                        }
                }       
            }


         }      

    }

感谢您的自述文件。我希望有一个人可以帮助我。 谢谢! 问候。

【问题讨论】:

  • 我没有看到您尝试在 PHP 的任何地方使用$orden? (它应该包含一个数组 ['id =&gt; [first, second, third, ...etc...]]。转储 `$_POST? 变量并查看它包含什么。
  • 嗨@Magnus Eriksson,JSON 返回“id[]=18&id[]=19”并且无法从 php 读取
  • JSON 是一种格式,不能“返回”任何东西。你说的是 Javascript 吗?
  • @MagnusEriksson 我的问题在于 $.ajax 调用中的“orden:order”,这显示了 php $_POST['orden'] 中的 id[]=18&id[]=19。我需要更新语句的值 id。了解我吗?

标签: php json ajax foreach


【解决方案1】:

您需要使用parse_str 将字符串转换为数组。然后它将创建一个数组$id,您可以对其进行迭代。

parse_str($_POST['orden']);
var_dump($id);

要遍历数组,您可以使用 foreach,或者更好的是,使用 implode 将其放入 IN 子句中。

$sqlUpdate = "UPDATE imagenes SET ruta_imagen='".$rut."', orden=".$i." WHERE id_imagen IN (".implode(',',$id).")";

请注意,此 sql 查询对 SQL 注入开放。我强烈建议迁移到 PDO 或 mysqli,并使用准备好的语句。您还需要在 ruta_imagenorder 分配之间使用逗号。

【讨论】:

  • 嗨@aynber!是的,它为我服务,但我如何获取这些数据并在更新语句中使用 id??
  • 没有您的更新声明很难说。您可以使用foreach 循环遍历这些值。
  • 对不起@aynber 我更新了它的 "$sqlUpdate = "UPDATE imagenes SET ruta_imagen='".$rut."'orden=".$i."WHERE id_imagen=" $ord;"其中“ord”是 $_POST ['order'] 中的 id。当使用 foreach foreach ($newarray as $k =&gt; $ord) 时,给我错误“为 foreach() 提供的参数无效”。我的 newarray 定义:$newarray = parse_str($_POST['orden']);
  • parse_str 使用数组键进行赋值,并且不返回任何内容。 $newarray 只是一个空变量。请查看链接的 php.net 页面。
  • 感谢您的帮助!可以解决一部分!我不使用准备好的陈述,因为它是一个测试! ;-) 问候!
猜你喜欢
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 2012-05-11
相关资源
最近更新 更多