Какое предложение PHP необходимо для добавления этой функции?

Я запускаю PHP-код, который собирает данные, введенные пользователем из веб-формы (плагин CF7), а затем экспортирую их в формат файла XML.

В этой форме пользователь может заполнить более одного типа курсов. Например: инженерия, маркетинг, медицина ...

Я ищу предложение добавить в свой код функцию, которая «создает» данные атрибута (блок полей) только тогда, когда это необходимо, то есть когда пользователь заполняет информацию для более чем 1 курса вместо того, чтобы иметь он был установлен ранее и оставлен пустым.

Это потому, что я не могу предсказать, сколько курсов может заполнить пользователь ,, и я не могу просто заранее создать несколько блоков полей, «ожидающих» ввода пользователя, который может не произойти. Я не могу оставить это поле пустым. Создавать нужно по мере необходимости.

Мой фактический фрагмент кода (2 блока поля):

$xmlSigam = $domDocument->createElement('SigaFiles');
$xmlEntity->appendChild($xmlSigam);  
$xmlSigam->setAttribute("Text", "SQM");  

$xml_dados = $domDocument->appendChild($domDocument->createElement('Dados'));   
$xmlSigam->appendChild($xml_dados);

$attribute = $xml_dados->appendChild($domDocument->createElement('attribute'));
$attribute->appendChild($domDocument->createTextNode($posted_data['code']));
$attribute->setAttribute('domainname', 'Code');

$attribute = $xml_dados->appendChild($domDocument->createElement('attribute'));
$attribute->appendChild($domDocument->createTextNode($posted_data['course']));
$attribute->setAttribute('domainname', 'Course');

$attribute = $xml_dados->appendChild($domDocument->createElement('attribute'));
$attribute->appendChild($domDocument->createTextNode($posted_data['description']));
$attribute->setAttribute('domainname', 'Description');

$xml_dadosmb = $domDocument->appendChild($domDocument->createElement('Dados')); 
$xmlSigam->appendChild($xml_dadosmb);

$attributemb = $xml_dadosmb->appendChild($domDocument->createElement('attribute'));
$attributemb->appendChild($domDocument->createTextNode($posted_data['codemb']));
$attributemb->setAttribute('domainname', 'Code');

$attributemb = $xml_dadosmb->appendChild($domDocument->createElement('attribute'));
$attributemb->appendChild($domDocument->createTextNode($posted_data['coursemb']));
$attributemb->setAttribute('domainname', 'Course');

$attributemb = $xml_dadosmb->appendChild($domDocument->createElement('attribute'));
$attributemb->appendChild($domDocument->createTextNode($posted_data['descriptionmb']));
$attributemb->setAttribute('domainname', 'Description');

Текущий выходной формат файла XML: (в случае, если пользователь просто заполняет 1 блок поля)

<SigaFiles Text = "SQM">
  <Data>
    <attribute domainname = "Code">00001</attribute>
    <attribute domainname = "Course">ENGINEERING</attribute>
    <attribute domainname = "Description">COMPUTER ENGINEERING</attribute>
  </Data>
  <Data>
    <attribute domainname = "Code"></attribute>
    <attribute domainname = "Course"></attribute>
    <attribute domainname = "Description"></attribute>
  </Data>
</SigaFiles>

есть ключ к этому?

John 14.09.2018 19:22

Пожалуйста, уточните, что вы имеете в виду под «пользователь может Заполнить, конечно, более одного типа». Это исходит из поля множественного выбора?

Jamie_D 15.09.2018 19:46

Временно добавьте print_r($_POST); exit(); в начало вашего php-файла и покажите результаты в своем вопросе. Проблематично ответить на ваш вопрос, не зная переменных POST.

Jamie_D 15.09.2018 19:59

@Jamie_D нет, это исходит из уже установленных доступных полей. Такая информация, как «инженерия» и т. д., Написана пользователем.

John 16.09.2018 12:57

Вам действительно нужно иметь поле множественного выбора в вашей html-форме, которое заполнено доступными курсами, которые пользователь может выбрать, вместо того, чтобы вводить стандартное текстовое поле. таким образом вы всегда будете знать, в каком формате находятся данные курса. Пожалуйста, предоставьте пример вашей HTML-формы (соответствующая часть, если форма слишком длинная)

Jamie_D 16.09.2018 13:26

@Jamie_D Я хочу использовать «оператор переключения» в качестве управляющей структуры. Вы верите, что это сработает? 'switch (n) {case: condition ... тормоз; } '

John 16.09.2018 18:18

Поделюсь с вами, как оформляется форма (соответствующая часть)

John 16.09.2018 18:19

Я добавил вам ответ, чтобы проиллюстрировать мои комментарии.

Jamie_D 16.09.2018 19:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
8
43
1

Ответы 1

Вы должны создать поле множественного выбора в своей форме

<select  name = "courses[]" id = "countries" multiple = "multiple">
  <option value = "0001">Engineering</option>
  <option value = "0002">History</option>
  <option value = "0003">Computer Science</option>
  <option value = "0004">Philosphy</option>
</select>

И в вашем посте php-блоке:

$xmlSigam = $domDocument->createElement('SigaFiles');
$xmlEntity->appendChild($xmlSigam);  
$xmlSigam->setAttribute("Text", "SQM");  

$xml_dados = $domDocument->appendChild($domDocument->createElement('Dados'));   
$xmlSigam->appendChild($xml_dados);

$course_array = $_POST['courses'];
foreach($courses as $courseCode => $course)
{
  $attribute = $xml_dados->appendChild($domDocument->createElement('attribute'));
  $attribute->appendChild($domDocument->createTextNode($courseCode));
  $attribute->setAttribute('domainname', 'Code');

  $attribute = $xml_dados->appendChild($domDocument->createElement('attribute'));
  $attribute->appendChild($domDocument->createTextNode($course));
  $attribute->setAttribute('domainname', 'Course');
}

Другие вопросы по теме