Я запускаю 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>
Пожалуйста, уточните, что вы имеете в виду под «пользователь может Заполнить, конечно, более одного типа». Это исходит из поля множественного выбора?
Временно добавьте print_r($_POST); exit();
в начало вашего php-файла и покажите результаты в своем вопросе. Проблематично ответить на ваш вопрос, не зная переменных POST.
@Jamie_D нет, это исходит из уже установленных доступных полей. Такая информация, как «инженерия» и т. д., Написана пользователем.
Вам действительно нужно иметь поле множественного выбора в вашей html-форме, которое заполнено доступными курсами, которые пользователь может выбрать, вместо того, чтобы вводить стандартное текстовое поле. таким образом вы всегда будете знать, в каком формате находятся данные курса. Пожалуйста, предоставьте пример вашей HTML-формы (соответствующая часть, если форма слишком длинная)
@Jamie_D Я хочу использовать «оператор переключения» в качестве управляющей структуры. Вы верите, что это сработает? 'switch (n) {case: condition ... тормоз; } '
Поделюсь с вами, как оформляется форма (соответствующая часть)
Я добавил вам ответ, чтобы проиллюстрировать мои комментарии.
Вы должны создать поле множественного выбора в своей форме
<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');
}
есть ключ к этому?