繁体   English   中英

将php-insert数组中的mongodb插入mongo db集合

[英]mongodb in php-insert array to mongo db collection

我在php中使用mongodb,并在将$ subitems数组插入mongodb集合时遇到问题。

php代码:

if($_SERVER["REQUEST_METHOD"] == "POST"){
    $errors = array();
    $alarm = array();

    $item_name = data::test_input($_POST["item_name"]);
    $folder_name = data::test_input($_POST["folder_name"]);
    $subitem_num = data::test_input($_POST["subitem_num"]);


    for($i=1;$i<=$subitem_num;$i++){
        ${"subitem_name$i"} = data::test_input($_POST["subitem_name".$i]);
        ${"subitem_file$i"} = data::test_input($_POST["subitem_file".$i]);
        if(count($errors)==0){
        $subitems = array(${"subitem_name$i"}=>${"subitem_file$i"});
        }
    }

    if(empty($item_name)){
        $errors['item_name']= "insert item";
    }
    if(empty($folder_name)){
        $errors['folder_name']= "insert folder";
    }
    if(count($errors)==0){
    $query = array(
        "item_name" => $item_name,
        "status" => 0,
        "folder_name" => $folder_name,
        "subitem" => $subitems
    ); 
    $result = items::insert($query);
    if($result) $alarm['success_additem'] = "submit done";
    }
}

我想像这样将值记录到mongodb集合中:

{ "_id" : ObjectId("542e71b333e916542a00002e"), "item_name" : "users management", "status" :0, "folder_name" : "users", "subitem" : { "a" : "a.php","b" : "b.php" },"c" : "c.php" }

如何编写用于插入到mongodb集合的php代码?

我认为您的问题是,当插入数据库中时,文档中的subitem字段永远不会包含多个键/值对。

for($i=1;$i<=$subitem_num;$i++){
    ${"subitem_name$i"} = data::test_input($_POST["subitem_name".$i]);
    ${"subitem_file$i"} = data::test_input($_POST["subitem_file".$i]);
    if(count($errors)==0){
    $subitems = array(${"subitem_name$i"}=>${"subitem_file$i"});
    }
}

基于该for循环,您将在每次迭代中覆盖$subitems 我认为您的意思是在其中分配一个密钥,在这种情况下,最好为以下服务:

$subitems = array();

for($i = 1; $i <= $subitem_num; $i++) {
    $key = data::test_input($_POST["subitem_name".$i]);
    $value = data::test_input($_POST["subitem_file".$i]);

    if (count($errors) == 0) {
        $subitems[$key] = $value;
    }
}

作为记录,我不知道为什么要在这里检查$errors ,因为它在此函数的顶部分配了一次,并且似乎没有在for循环中被修改; 但是,我将其保留在原处,使其与您提供的原始示例一致。

另外,在这里实际上没有理由使用动态命名的变量。 固定的术语(例如$key$value使代码更具可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM