Какое предложение 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
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');
}

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