mongodb в массиве php-insert для коллекции dong монго

я использую mongodb в php и у меня проблема с вставкой массива $ 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" }

Как написать PHP-код для вставки в коллекцию mongodb?

0

Решение

Я полагаю, ваша проблема в том, что 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 сделать код гораздо более читабельным.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]