У меня проблема при сохранении данных в XML. Я пытаюсь сохранить все несколько выбранных значений из поля выбора. Я надеюсь прояснить свой вопрос. Атрибут name в "classe" должен разрешать отправку множественных выборок по PHP var $_POST['classe']
в виде массива.
Итак, я добавляю []
в имя <select name="classe[]" class="classe classe-select" multiple="" required>
Но когда я делаю это, я ловлю фатальную ошибку:
Fatal error: Uncaught TypeError: Argument 1 passed to DOMNode::appendChild() must be an instance of DOMNode, null given in C:\xampp\htdocs\expressoes3\add.php:199 Stack trace: #0 C:\xampp\htdocs\expressoes3\add.php(199): DOMNode->appendChild(NULL) #1 {main}
Не знаю почему. Я действительно нуждаюсь в помощи. Я новичок в PHP и DOMDocument. Когда я стираю скобки [] из <select name="classe[]"
, все работает, за исключением того, что нельзя сохранять несколько значений.
Вот мой код:
<?php
if(isset($_POST['submitSave'])) {
// Disable errors due to empty xml files
error_reporting(E_ALL & ~E_WARNING);
$domDoc = new DOMDocument('1.0', 'UTF-8');
$domDoc->preserveWhiteSpace = false;
$domDoc->formatOutput = true;
$domDoc->encoding = 'UTF-8';
$domDoc->load('./data/expression.xml');
$xpath = new DOMXpath($domDoc);
if($domDoc->getElementsByTagName('expression')->length>0){
// If we already have expression tag defined
$expression = $domDoc->getElementsByTagName('expression')[0];
}else{
// If we don't have any expression tag, i.e. file is empty
$expression = $domDoc->createElement('expression');
}
$vocabulario = $domDoc->createElement('vocabulario');
$vocabulario->setAttribute('word', $_POST['word']);
$classe = $domDoc->createElement('classe', $_POST['classe']);
$domDoc->appendChild($expression);
$expression->appendChild($vocabulario);
$vocabulario->appendChild($classe);
file_put_contents('./data/expression.xml', $domDoc->saveXML());
header('location:index.php');
}
?>
<form method="post">
<div class="col-75">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="classe[]" class="classe classe-select" multiple="" required>
<option value="| adjective |">adjective</option>
<option value="| adverb |">adverb</option>
<option value="| noun |">noun</option>
<option value="| verb |">verb</option>
</select>
<br>
<ol id="classe" start='0'></ol>
<script>
$(document).ready(function() {
// Create an empty array to store results
var selected = [];
// Delegate the change event on each .addon-select
$('.classe-select').on('change', function() {
// Store this .addon-select's value
var result = $(this).val();
// .push() the value into the selected array
selected.push(result);
$('#classe').append('<li>' + result + '</li>');
// Display the selected array on console
console.log(selected);
});
});
</script>
</div>
<div class="row">
<td><input type="submit" value="Save" name="submitSave"></td>
</div>