У меня длинная форма со слишком большим количеством полей. Я хотел сделать его динамической формой, что означает, что обязательные поля каждый раз меняются по желанию. Поэтому я поместил небольшое поле рядом со всеми полями формы и получил этот код, чтобы динамически выбирать, какие поля являются обязательными, и проверять его, поэтому, когда пользователь отправляет форму, динамический текст ошибки появляется только рядом с выбранными обязательными полями. но результат отличается от ожидаемого. Ошибка PHP отображается рядом со всеми полями, а не только в массиве. Пожалуйста, нужна ваша помощь.
$required = array('cm_name', 'cm_mobile', 'cm_mail', 'cm_dob', 'cm_income', 'cm_country');
if(isset($_POST['submit'])) {
foreach($required as $field) {
if (empty($_POST[$field])) {
$err_req = "* Required Data";
$valid = true;
} else {
$err_req = "";
$valid=false; }
}
}
Здесь вы меняете значение переменной внутри цикла foreach. Когда вы выходите из цикла, вам либо присваивается значение вашей переменной ($ err_req = «* Обязательные данные»), либо нет ($ err_req = «»). Это приведет к тому, что все ваши поля будут иметь текст «Обязательные данные» рядом с ним, или ни одно из них не будет иметь его. Это потому, что значение вашей переменной перезаписывается с каждой итерацией внутри вашего цикла.
Вместо этого вы хотите выполнить операцию печати или не печатать сообщение об ошибке рядом с каждым из полей ввода формы внутри цикла или использовать уникальный идентификатор для каждого места, в котором вы хотите отобразить ошибку. Это может быть достигнуто несколькими способами, одним из них будет присвоение идентификатора каждому пустому сообщению об ошибке рядом с полем ввода. Для простоты идентификатор может соответствовать вашим $ обязательным значениям массива. Если в вашем поле $ нет значения, вам следует изменить значение текста ошибки с соответствующим идентификатором.
Я написал эту функцию
function checkrequired($field,$req_fields)
{
if(in_array($field,$req_fields)) {
if(isset($_POST[$field]) && empty($_POST[$field])) {
echo "* Missing Data";
}
}
}
И поместите рядом с каждым полем эту строку
<?php checkrequired("cm_phone",$req_fields); ?>
И определил, какие поля обязательны для заполнения, как это
$req_fields = array('cm_name', 'cm_mobile', 'cm_mail', 'cm_dob', 'cm_income', 'cm_country', 'security_code');