Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript从数据属性和id添加数组,并在数组php中组合它们?_Javascript_Php_Mysql_Arrays - Fatal编程技术网

如何使用javascript从数据属性和id添加数组,并在数组php中组合它们?

如何使用javascript从数据属性和id添加数组,并在数组php中组合它们?,javascript,php,mysql,arrays,Javascript,Php,Mysql,Arrays,我只想问一下,如何从列表顺序上的所有id值和数据速率值合并这两个数组?ul li太多了,所以我需要将它们全部获取并存储到数组中 这是我的javascript代码: var h = []; $("ul.reorder-photos-list li").each(function() { h.push($(this).attr('id').substr(9)); }); var x = [];

我只想问一下,如何从列表顺序上的所有id值和数据速率值合并这两个数组?ul li太多了,所以我需要将它们全部获取并存储到数组中

这是我的javascript代码:

                var h = [];

                $("ul.reorder-photos-list li").each(function() {  h.push($(this).attr('id').substr(9));  });

                var x = [];

                $("ul.reorder-photos-list li").each(function() {  x.push($(this).attr('data-rate').substr(9));  });


                $.ajax({
                    type: "POST",
                    url: "order_update.php",
                    data: {
                        ids: " " + h + "",
                        rate: " " + x + ""
                        },
                    success: function(html) 
                    {
                        window.location.reload();
                        /*$("#reorder-helper").html( "Reorder Completed - Image reorder have been successfully completed. Please reload the page for testing the reorder." ).removeClass('light_box').addClass('notice notice_success');
                        $('.reorder_link').html('reorder photos');
                        $('.reorder_link').attr("id","");*/
                    }
                });
这是我的html代码:

<li id="image_li_<?php echo $row['id']; ?>" class="ui-sortable-handle">
<input id="rate" type="text" value="<?= $row['rate']?>" data-rate="<?php echo $row['rate']; ?>" >

希望有人能帮助我。:)提前谢谢

设置数据时,不需要有多个循环。您可以在数据中循环一次:

var dataArray = [];

$("ul.reorder-photos-list li").each(function() {  
    var el = $(this),
        input = el.children(':input'); // This gets the input decendent of the li

    // When adding one item at a time to an array, array[array.length] = item is better
    dataArray[dataArray.length] = {
        id: el.attr('id').substr(9),
        rate: input.val(),
    };
});

$.ajax({
    type: "POST",
    url: "order_update.php",
    data: { items: dataArray }, // items gives the PHP something to use as a key in the POST data
    success: function(html) {...}
});
您的PHP将如下所示:

// The data passed from the Ajax call is already an array
$itemsArray    = $_POST['items'];

// Your function to process the array
function updateOrder($orderArray) {
    foreach ($orderArray as $index => $array) {
        // $index will already have a count, you need to +1 because it's 0-based
        mysqli_query($this->connect, "UPDATE `test` SET `order` = " . ($index + 1) . ", `rate`=" . $array['rate'] . " WHERE id = " . $array['id']);
    }
    return true;
}
这将创建h/x对的JSON对象

$.ajax({
    type: "POST"
    , url: "order_update.php"
    , data: { JSON.stringify(rates); }
    , success: function(html) {
        window.location.reload();
        /* $("#reorder-helper").html(
         * "Reorder Completed - Image reorder have been successfully completed.
         * Please reload the page for testing the reorder." 
         * ).removeClass('light_box').addClass('notice notice_success');
         * $('.reorder_link').html('reorder photos');
         * $('.reorder_link').attr("id","");
         */
    }
});
这将修复您的呼叫以发送正确的数据

您的PHP端需要类似于以下内容:

if(isset($_POST['rates'])) {
    $ratesString = $_POST['rates'];
    $rates = json_decode($ratesString);
}
// Do other things with $hx`
您的插入查询也已关闭。您需要将每个值声明为变量,否则编译器也会讨厌您的PHP。您的查询中还有一些不必要的引号

function updateOrder($orderArray){
    $count = 1;
    foreach ($orderArray as $array){
        $rate = $array['rate'];
        $id = $array['id'];
        mysqli_query($this->connect,"UPDATE test SET order = $count, rate = '$rate' WHERE id = '$id'");
        $count ++;  
    }
    return true;
}
对于你的HTML,我认为这就是你想要的,但不确定,因为它并没有真正解释的那么好…请随意评论你的意图

<ul>
<?php foreach($orderArray as $array) : ?>
<li id="image_li_<?php echo $array['id']; ?>" class="ui-sortable-handle">
<input id="rate" type="text" value="<?php echo $array['rate']?>" data-rate="<?php echo $array['rate']; ?>" ></li>
<?php endforeach; ?>
</ul>

    我现在知道密码了。谢谢你们的帮助,伙计们

                    var h = [];
    
                    $("ul.reorder-photos-list li").each(function() {  h.push($(this).attr('id').substr(9));  });
    
                    var x = [];
    
                    $("input").each(function() {  x.push($(this).val());  });
    
                    $.ajax({
                        type: "POST",
                        url: "order_update.php",
                        data: {ids: " " + h + "",rate: " " + x + ""},
                        /*data: { items: dataArray },*/
                        success: function(html) 
                        {
                         ...
                        }
    
                    });
    
    在Php端:

    $idArray    = explode(",",$_POST['ids']);
    $rateArray  = explode(",",$_POST['rate']);
    
    $ids = array();
    foreach ($idArray as $id) {
        $ids[] = $id;
    }
    
    $rates = array();
    foreach ($rateArray as $rate) {
        $rates[] = $rate;
    }
    
    $n = 0;
    $orderArray = array();
    while( $n <= count($idArray) )
    {
        $orderArray[] = array("id" => $ids[$n] , "rate" => $rates[$n]);
        $n++;
    }
    
    $db->updateOrder($orderArray);
    
    function updateOrder($orderArray){
            $count = 1;
            foreach ($orderArray as $array){
                mysqli_query($this->connect, "UPDATE `test` SET `morder` = " . $count . ", `mtoursrate`=" . $array['rate'] . " WHERE id = " . $array['id']);
                $count ++;  
            }
            return true;
        }
    
    $idArray=explode(“,”,$\u POST['id']);
    $rateArray=explode(“,”,$_POST['rate']);
    $ids=array();
    foreach($id列为$id){
    $id[]=$id;
    }
    $rates=array();
    foreach($rateArray作为$rate){
    $rates[]=$rate;
    }
    $n=0;
    $orderArray=array();
    而($n$id[$n],“rate”=>$rates[$n]);
    $n++;
    }
    $db->updateOrder($orderArray);
    函数updateOrder($orderArray){
    $count=1;
    foreach($orderArray作为$array){
    mysqli_查询($this->connect,“UPDATE`test`SET`morder`=”$count.”,`mtoursrate`=“$array['rate']”。其中id=“.$array['id']);
    $count++;
    }
    返回true;
    }
    
    请简化您的代码。h是数组而不是逗号分隔的字符串,对吗?和x一样。那么,
    ids:“+h+”,rate:“+x+”
    将打印什么呢?实际上我将它从逗号分解成数组。我想将rateArray合并到id数组中,id数组是多维数组@developerjk错了。我说的是javascript方面。您的php代码是不相关的,因为您的ajax不会发送您认为是的内容。他们从ul li HTMLS获取id和数据速率中的值。因此,很抱歉延迟回复,我只是忘记了速率必须在输入值中。呵呵。不在同一个html元素中<代码>我忘记了jquery是否会在AJAX将JS对象转换到其他地方之前自动将其转换为字符串。我通常使用香草JavaScript,因为我主要从事不需要扩展库的小项目。这也有助于对基础语言及其功能有更深入的理解。@CSS这个答案是我想要的最接近的答案。这里只需要更改
    rate:el.attr('data-rate').substr(9),
    将其设置为输入值。有什么想法吗,伙计?@xerwudjohn,我已经更新了答案中的代码,以便从输入中获取速率。@Jeffwa嗨,伙计,我正在处理数据库问题。我认为利率是价值而不是储蓄。但是id数组是好的。@xerwudjohn这能修复HTML部分吗?如果没有,请多给点提示。你的代码太复杂了,呵呵。这有点难。哈哈,谢谢你的帮助。只是想问一下,你们对如何获取输入值中的所有值有什么想法吗?这是我的代码
    $(“input.data rate”).each(function(){x.push($(this.attr('value')).substr(9));})输入类名是数据-rate@xerwudjohn我的响应中的第一个块就是这样做的……它创建了一个js对象
    rates
    ,其属性为
    rate
    id
    。您可以使用
    rates.rate
    rates.id
    访问属性。如果使用
    console.log(rates),js对象将打印出类似的内容
    {rates:[{id:0,rate:2%},{id:1,rate:2.2%},…]
    。这段代码就像我现在想的那样简单。
    <ul>
    <?php foreach($orderArray as $array) : ?>
    <li id="image_li_<?php echo $array['id']; ?>" class="ui-sortable-handle">
    <input id="rate" type="text" value="<?php echo $array['rate']?>" data-rate="<?php echo $array['rate']; ?>" ></li>
    <?php endforeach; ?>
    </ul>
    
                    var h = [];
    
                    $("ul.reorder-photos-list li").each(function() {  h.push($(this).attr('id').substr(9));  });
    
                    var x = [];
    
                    $("input").each(function() {  x.push($(this).val());  });
    
                    $.ajax({
                        type: "POST",
                        url: "order_update.php",
                        data: {ids: " " + h + "",rate: " " + x + ""},
                        /*data: { items: dataArray },*/
                        success: function(html) 
                        {
                         ...
                        }
    
                    });
    
    $idArray    = explode(",",$_POST['ids']);
    $rateArray  = explode(",",$_POST['rate']);
    
    $ids = array();
    foreach ($idArray as $id) {
        $ids[] = $id;
    }
    
    $rates = array();
    foreach ($rateArray as $rate) {
        $rates[] = $rate;
    }
    
    $n = 0;
    $orderArray = array();
    while( $n <= count($idArray) )
    {
        $orderArray[] = array("id" => $ids[$n] , "rate" => $rates[$n]);
        $n++;
    }
    
    $db->updateOrder($orderArray);
    
    function updateOrder($orderArray){
            $count = 1;
            foreach ($orderArray as $array){
                mysqli_query($this->connect, "UPDATE `test` SET `morder` = " . $count . ", `mtoursrate`=" . $array['rate'] . " WHERE id = " . $array['id']);
                $count ++;  
            }
            return true;
        }