Получение фатальной ошибки: аргумент 1, переданный в DOMNode :: appendChild (), должен быть экземпляром DOMNode, значение null указано в - PullRequest
0 голосов
/ 26 мая 2020

У меня проблема при сохранении данных в 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>
...