Создать структуру XML с помощью PHP из формы HTML

0

Я создаю систему, в которой пользователь может ввести ингредиент, а затем сохранить его количество, я использую PHP, чтобы сохранить его как XML.

В настоящее время он сохраняет это.

 <ingredients>
    <ingredient quantity="2">Apple</ingredient>
    <ingredient quantity="4">Banana</ingredient>
  </ingredients>

Вместо этого я хотел бы сохранить его таким образом, но я не могу понять, как это сделать.

  <ingredient>
            <quantity_amount>2</tns:quantity_amount>
            <quantity_name>teaspoons</tns:quantity_name>
            <ingredient_name>baking powder</tns:ingredient_name>
        </ingredient>

для каждого добавленного ингредиента

Вот мой PHP и HTML, которые я использую сейчас.

HTML

  <div id="addIngredient">
                <p>
                <input type="text" id="ingredient_1" name="ingredient[]" value="" placeholder="Ingredient"/>
                <input type="text" id="quantity_1" name="quantity[]"  value="" placeholder="Quantity"/>
                <a href="#" id="addNewIngredient">Add</a>
                </p>

                </div>

PHP

// Start for loop, from 0 to ingredientName
for ($i = 0; $i < count($ingredientName); $i++) {
    // Select current item
    $element = $ingredientName[$i];

    // Updated used ingredients list ONLY
    // if the ingredient wasn't added yet
    $temp = search($upIngreds, 'value', $element);
    if (empty($temp)) {
        $upIngreds[] = array('value' => $element, 'label' => $element, 'image' => 'images/products/default.jpg');
    }

    // Select current item quantity
    $qty = $quantity[$i];
    // Create ingredient element and fill with $element
    $ingredient = $xml->createElement('ingredient', $element);
    // Set quantity attiribute to $qty value
    $ingredient->setAttribute('quantity', $qty);
    // Append it to ingredients element
    $ingredients->appendChild($ingredient);
}
  • 0
    ой прости игнорируй tns. это был просто грубый способ показать, как я хочу, чтобы он вышел в формате XML. Каждый ингредиент имеет свой собственный <ингредиент> </ ингредиент>, причем все они находятся в <ингредиенты> </ ингридиенты>
  • 0
    как вы создаете свой XML? simplexml или DOM или ??
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

для создания нового ингредиента в соответствии с вашей желаемой структурой XML:

// creating the document and its root
$dom = new DOMDocument('1.0', 'utf-8');
$root = $dom->createElement('ingredients','');
$dom->appendChild($root);

// create new ingredient and link it to root 
$ingredient = $dom->createElement('ingredient','');
$root->appendChild($ingredient);    

// create children and link them to ingredient
$q_amount = $dom->createElement('quantity_amount',"1");
$q_name = $dom->createElement('quantity_name',"spoon");
$i_name = $dom->createElement('ingredient_name',"PHP");
$ingredient->appendChild($q_amount);
$ingredient->appendChild($q_name);
$ingredient->appendChild($i_name);

echo $dom->saveXML();

см. его работу: https://eval.in/85654

Не забудьте очистить ввод пользователя от формы до того, как вставить его в XML.

  • 0
    Можно ли зациклить это для нескольких ингредиентов?
  • 0
    Я пытался следовать твоему пути с моей работой eval.in/85680, однако я получаю этот xml <ингридиенты /> <steps> <step_detail number = "0"> jhk </ step_detail> </ steps> </ recipe> <attributeName > <ингридиент количества = "эй"> эй </ ингридиенты> </ ингридиенты> <ингридиенты> <ингредиенты количества = "cskc"> x skxs </ ингридиенты> </ ингридиенты> </ ингридиенты> </ ингридиенты> просто закрываются, а затем следуют мои другие элементы в конце XML
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню