У меня есть следующий код проверки, который запускается после отправки моей формы:
foreach ($_POST['vin']) as $vin_value ) { if(strlen($vin_value) != 17) { echo "VIN is not 17 digits"; echo "VIN is " . strlen($vin_value) . " digits"; echo "VIN value is: " . $vin_value; } else { mail($admin_email, "Auto Quote Request", $email_body); echo "Thank you for contacting us!"; } }
Я пытаюсь убедиться, что отдельный vin ($ vin_value) моего массива vin [] составляет ровно 17 цифр. Прямо сейчас, когда я отправляю форму, сообщение не отображается вообще. Что тут происходит?? И я понимаю, что этот код просто проверяет символы, а не цифры. Благодарю.
html ввод формы:
<div class="form-group"> <label for="inputVIN" class="col-lg-2 control-label">Vehicle Identification Number</label> <div class="col-lg-10"> <input class="form-control" id="inputVIN" placeholder="Must be 17 digits." type="text" name="vin[]"> </div> </div>
Вход представляет собой массив. Это должно учитывать возможность множественных чисел вин. Существует возможность добавить другое поле формы с именем vin []. Все входные данные, относящиеся к этому вопросу, имеют имя = "vin []". Чтобы повторить, сначала есть одна группа форм с именем = vin [], но пользователь может нажать кнопку, чтобы добавить больше. Вот почему я использую массив в первую очередь. Поэтому я хочу, чтобы каждый элемент массива ($ vin_value) содержал ровно 17 символов. Вот почему я использую foreach. Надеюсь, это обеспечит достаточный контекст.
Я бы предположил, что значение $vin
является массивом, null или undefined, и поэтому вызов функции strlen($vin)
возвращается каждый раз.
см. документацию для strlen здесь
Чтобы отладить значения, измените код на следующий:
if(strlen($vin) != 17) { echo "VIN is not 17 digits"; echo "VIN is " . strlen($vin) . " digits"; echo "VIN value is: " . $vin; } else { mail($admin_email, "Auto Quote Request", $email_body); echo "Thank you for contacting us!"; }
редактировать возможное решение номер 2:
strlen () возвращает количество байтов, а не количество символов в строке.
Как было предложено замечанием Чернышевского в стреневых документах, сделайте следующее:
сначала передайте строку через utf8_decode ():
if(strlen(utf8_decode($vin)) != 17) { echo "VIN is not 17 digits"; echo "VIN is " . strlen(utf8_decode($vin)) . " digits"; echo "VIN value is: " . $vin; } else { mail($admin_email, "Auto Quote Request", $email_body); echo "Thank you for contacting us!"; }
utf8_decode () преобразует символы, не входящие в ISO-8859-1, в '?', которые с целью подсчета количества символов будут работать.