【问题标题】:Foreach loop insert same data multiple timeForeach 循环多次插入相同的数据
【发布时间】:2018-06-05 07:19:30
【问题描述】:

嵌套的 foreach 循环毁了我的一天。数据被插入多次(根据检查的嵌套菜单的数量插入相同的值)并且嵌套值存储在每一行中,尽管它们不是父行。

我认为问题是由嵌套的 foreach 循环引起的

<?php
if(!empty($_POST['heading']) && !empty($_POST['content']) && !empty($_POST['keytag']) && !empty($_POST['date'])){
        $heading=$_POST['heading'];
        $content=$_POST['content'];
        $keytag=$_POST['keytag'];
        $date=$_POST['date'];
        $query = '';
        $msg = '';

        $data = explode("," ,$_POST["navid"]);
        $subdata = explode("," ,$_POST["subnavid"]);
            foreach ($data AS $key => $menu){
                foreach($subdata AS $k => $submenu){

                    //If Image is browsed 
                    if(!empty($_FILES['file']['name'])){
                        move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
                        $query = $con->prepare('INSERT into news(heading, cat_id, subcat_id, content, keytag, date, img) VALUES(:heading, :cat_id, :subcat_id, :content, :keytag, :date, :new_img)');
                        $query->bindParam(':new_img',$new_img);
                    }

                    //If Image isnot browsed 

                    if(empty($_FILES['file']['name'])){
                        $query = $con->prepare('INSERT into news(heading, cat_id, subcat_id, content, keytag, date) VALUES(:heading, :cat_id, :subcat_id, :content, :keytag, :date)');
                    }
                    if(empty($submenu)){
                       $submenu = null;
                    }
                    $query->bindParam(':heading', $heading);
                    $query->bindParam(':subcat_id', $submenu);
                    $query->bindParam(':cat_id', $menu);
                    $query->bindParam(':content', $content);
                    $query->bindParam(':keytag', $keytag);
                    $query->bindParam(':date', $date);

                    if($query->execute()){
                        $msg="Successfully Inserted";
                    };
                }
            }
            echo $msg;
        }

} ?>

问题来了

让我简单解释一下。网站有三个菜单:NewsViewsArt。其中只有新闻菜单有子菜单。如果新闻的submenuViews/Art同时勾选,默认情况下Views/Art 列也会存储submenu 的值,但在实际视图/艺术中没有子菜单,它正在存储新闻子菜单值

应该是

这是html

<li>
<input type="checkbox" name="menu[]" value="2">News
    <ul>
        <li>
        <input type="checkbox" name="menu[][menusub]" value="2">Politics
        </li>
        <li>
        <input type="checkbox" name="menu[][menusub]" value="3">Social
        </li>
        <li>
        <input type="checkbox" name="menu[][menusub]" value="4">Economy
        </li>
    </ul>
</li>
<li>
<input type="checkbox" name="menu[]" value="12">Views                                 
</li>
<li>
<input type="checkbox" name="menu[]" value="13">ART                               
</li>

数据通过ajax传递如下

    $(document).on('submit', '#form', function(e){
        e.preventDefault();
        var navid = [];
        $("input[name='menu[]']:checked").each(function(){
            navid.push(this.value);
        });
        var subnavid = [];
        $("input[name='menu[][menusub][]']:checked").each(function(){
            subnavid.push(this.value);
        });
        if (navid.length === 0){ //tell you if the array is empty
            alert("Please Select atleast one checkbox");
            return false;
        }
        else {
            var formData = new FormData(this);
            formData.append('navid', navid);
            formData.append('subnavid', subnavid);
            $.ajax({
            type: 'POST',
            url: 'upload.php',
            data: formData,
            contentType: false,
            cache: false,
            processData:false,
            success: function(data){
                alert(data);

                        }
        });
        }
    });

【问题讨论】:

    标签: php ajax foreach nested-loops


    【解决方案1】:

    从第一个 foreach 循环中取出 $subdata = explode("," ,$_POST["subnavid"]);,您应该可以开始了。

    因为每个父循环都会提取$_POST["subnavid"],子循环将从数组的第一个成员开始。

    $subdata = explode("," ,$_POST["subnavid"]); // This is the change required.
    foreach ($data AS $key => $menu){
       foreach($subdata AS $k => $submenu){
       ......
       ......
       }
    }
    

    同时更改$key 变量。因为是一样的。所以它可能会与每个循环重叠。

    【讨论】:

    • 谢谢,我试过了,还是不行。我想这是我的弱点,我无法简短地解释我的问题。请查看我更新的问题。
    • 检查我更新的答案。注意底部的线条。
    • 真的很烦,还是不行。我认为问题在于将值存储在变量中。我正在存储$heading=$_POST['heading'] 但我认为它应该是$heading=$_POST['heading'][$key]$heading=$_POST['heading'][$k]。我试过了,不行,请看更新的问题,我已经添加了code 我是如何存储value 的,可以吗?非常感谢您的合作和帮助兄弟。
    • 伙计,你能把$_POST["subnavid"]的东西贴出来吗?
    • 对不起,我正在尝试其他选项。 $_POST["subnavid"] 包含嵌套菜单的值。我使用回声进行测试,它回显了检查的嵌套元素的准确值。请参阅我更新的 ajax 代码。之前的帖子忘记补充了
    猜你喜欢
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 2013-04-05
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    相关资源
    最近更新 更多