#php #html #forms
#php #HTML #формы
Вопрос:
У меня есть страница с формой, разделенная на две половины с разделителями макета. Правая сторона динамически генерирует входные данные на основе предыдущего выбора пользователя относительно того, сколько пользователей они бронируют.
Все это обрабатывается PHP. Действие формы устанавливается на саму страницу. При отправке форма проверяется, и если это проходит, пользователь перенаправляется на следующий шаг. Если проверка завершается неудачно, сообщения об ошибках генерируются соответствующим образом.
Он отлично работает в Firefox и Chrome, но не в IE11, за исключением случаев, когда установлен режим совместимости с IE8. В IE11 (также в режимах совместимости 10 и 9) абсолютно ничего не происходит, когда я нажимаю кнопку отправки. В консоль не регистрируются ошибки, ничего не отправляется, страница не перезагружается. В режиме IE8 это работает нормально.
Единственными предупреждениями консоли, которые возникают при загрузке страницы, являются два несопоставимых конечных тега. Первое несоответствие, которое он находит, — это первый закрывающий </div>
тег. Второе несоответствие — это закрывающий </form>
тег.
<div class="6u">
<form id="buy-form" name="details" action="booking3.php" method="post">
<fieldset>
<legend>Enter Billing Details</legend>
<label for="first_name" class="register">First Name</label>
<input type="text" id="fname" name="first_name" class="textbox booking required" size="20" maxlength="20"
value="<?php if (isset($_SESSION['first_name'])) {
echo $_SESSION['first_name'];
} ?>"/><br/>
<label for="last_name" class="register">Last Name</label>
<input type="text" id="lname" name="last_name" class="textbox booking required" size="20" maxlength="20"
value="<?php if (isset($_SESSION['last_name'])) {
echo $_SESSION['last_name'];
} ?>"/><br/>
<label for="email" class="register">E-mail Address</label>
<input type="email" id="emai" name="email" class="textbox booking required" size="20" maxlength="60"
value="<?php if (isset($_SESSION['email'])) {
echo $_SESSION['email'];
} ?>"/><br/>
<label for="telephone" class="register">Telephone</label>
<input type="text" id="tel" name="telephone" class="textbox phonenumber booking required" size="20"
maxlength="20" value="<?php if (isset($_SESSION['telephone'])) {
echo $_SESSION['telephone'];
} ?>"/><br/>
<label for="address">Billing Address</label>
<textarea class="order required" name="address"><?php if (isset($_SESSION['address'])) {
echo $_SESSION['address'];
} ?></textarea>
</fieldset>
</div>
<?php
if ($_SESSION['userno'] >= 1) { // if more than one user is selected, display text boxes to take extra user details
echo '<div class="6u content content-right">';
if ($_SESSION['userno'] == 1) {
echo '<span>Please enter the name, e-mail address and telephone number of your user.</span><br/>';
} else {
echo '<span>Please enter the names, e-mail addresses and telephone numbers of your '.$_SESSION['userno'].' users.';
}
for ($i = 0; $i < $_SESSION['userno']; $i ) { //create textboxes for the appropriate amount of users based on userno selection
echo '<fieldset><legend>User '.($i 1).'</legend>';
if ($i == 0) {
echo '<label class="register">As Billing Details</label><input id="userisbooker" type="checkbox" class="booking"/><br/>';
}
echo '<label for="userFname[]" class="register">First Name: </label><input type="text" id="fname'.$i.'" name="userFname[]" class="textbox booking required" value="';
if (isset($_SESSION['userFname'][$i])) {
echo $_SESSION['userFname'][$i];
}
echo '"/><br/>';
echo '<label for="userLname[]" class="register">Last Name: </label><input type="text" id="lname'.$i.'" name="userLname[]" class="textbox booking required" value="';
if (isset($_SESSION['userLname'][$i])) {
echo $_SESSION['userLname'][$i];
}
echo '"/><br/>';
echo '<label for="userEmail[]" class="register">E-mail Address: </label><input type="email" id="email'.$i.'" name="userEmail[]" class="textbox booking required" value="';
if (isset($_SESSION['userEmail'][$i])) {
echo $_SESSION['userEmail'][$i];
}
echo '"/><br/>';
echo '<label for="userTel[]" class="register">Telephone: </label><input type="text" id="tel'.$i.'" name="userTel[]" class="textbox booking required" value="';
if (isset($_SESSION['userTel'][$i])) {
echo $_SESSION['userTel'][$i];
}
echo '"/><br/>';
echo '</fieldset>';
}
echo '<input class="button button-alt" type="submit" name="submit" value="Next >"/></form>';
}
?>
</div>
Что вызывает эту проблему в IE11? Достаточно ли этих двух несовпадающих тегов (которые кажутся мне совпадающими), чтобы заблокировать всю страницу?
Комментарии:
1. Ооочень … ваш HTML неверен, и что-то не работает? Я бы перестал спорить о том, что именно нарушает, как, когда, где, и просто исправил HTML вместо этого.
2. Я не вижу, где недопустимый HTML…
3. переместите
</form>
ВНЕШНЮЮ частьif
инструкции. Если вы запустите форму, вам придется закрыть ее в любом случае. Я действительно удивлен, что вы указываете IE в качестве браузера, который не будет работать, поскольку это не должно работать ни в одном браузере, если вы спросите меня.4. @user3181236 Вы можете просто скопировать / вставить исходные тексты HTML в онлайн-валидатор W3C, и вы получите ошибки
5. Также попробуйте следовать IPO-модели ( en.wikipedia.org/wiki/IPO_Model ) . Выполните всю обработку перед выводом. Это поможет вам навести порядок, не смешивая PHP и HTML так сильно
Ответ №1:
Так и должно быть; не закрывайте элемент, в котором вы запускаете форму, прежде чем сначала закрыть форму.
<form id="buy-form" name="details" action="booking3.php" method="post">
<div class="6u">
<fieldset>
<legend>Enter Billing Details</legend>
<label for="first_name" class="register">First Name</label><input type="text" id="fname" name="first_name" class="textbox booking required" size="20" maxlength="20" value="<?php if(isset($_SESSION['first_name'])){echo $_SESSION['first_name'];}?>"/><br/>
<label for="last_name" class="register">Last Name</label><input type="text" id="lname" name="last_name" class="textbox booking required" size="20" maxlength="20" value="<?php if(isset($_SESSION['last_name'])){echo $_SESSION['last_name'];}?>"/><br/>
<label for="email" class="register">E-mail Address</label><input type="email" id="emai" name="email" class="textbox booking required" size="20" maxlength="60" value="<?php if(isset($_SESSION['email'])){echo $_SESSION['email'];}?>"/><br/>
<label for="telephone" class="register">Telephone</label><input type="text" id="tel" name="telephone" class="textbox phonenumber booking required" size="20" maxlength="20" value="<?php if(isset($_SESSION['telephone'])){echo $_SESSION['telephone'];}?>"/><br/>
<label for="address">Billing Address</label><textarea class="order required" name="address"><?php if(isset($_SESSION['address'])){echo $_SESSION['address'];}?></textarea>
</fieldset>
</div>
<?php
if ($_SESSION['userno'] >= 1){ // if more than one user is selected, display text boxes to take extra user details
echo '<div class="6u content content-right">';
if ($_SESSION['userno'] == 1){
echo '<span>Please enter the name, e-mail address and telephone number of your user.</span><br/>';
} else{
echo '<span>Please enter the names, e-mail addresses and telephone numbers of your '.$_SESSION['userno'].' users.';
}
for ($i = 0; $i < $_SESSION['userno']; $i ){ //create textboxes for the appropriate amount of users based on userno selection
echo '<fieldset><legend>User '. ($i 1).'</legend>';
if ($i == 0){
echo '<label class="register">As Billing Details</label><input id="userisbooker" type="checkbox" class="booking"/><br/>';
}
echo '<label for="userFname[]" class="register">First Name: </label><input type="text" id="fname'.$i.'" name="userFname[]" class="textbox booking required" value="'; if(isset($_SESSION['userFname'][$i])){echo $_SESSION['userFname'][$i];} echo'"/><br/>';
echo '<label for="userLname[]" class="register">Last Name: </label><input type="text" id="lname'.$i.'" name="userLname[]" class="textbox booking required" value="'; if(isset($_SESSION['userLname'][$i])){echo $_SESSION['userLname'][$i];} echo'"/><br/>';
echo '<label for="userEmail[]" class="register">E-mail Address: </label><input type="email" id="email'.$i.'" name="userEmail[]" class="textbox booking required" value="'; if(isset($_SESSION['userEmail'][$i])){echo $_SESSION['userEmail'][$i];} echo'"/><br/>';
echo '<label for="userTel[]" class="register">Telephone: </label><input type="text" id="tel'.$i.'" name="userTel[]" class="textbox booking required" value="'; if(isset($_SESSION['userTel'][$i])){echo $_SESSION['userTel'][$i];} echo'"/><br/>';
echo '</fieldset>';
}
echo '<input class="button button-alt" type="submit" name="submit" value="Next >"/>';
echo '</div>';
}
?>
</form>
Комментарии:
1. Это работает не так, как ожидалось, — поскольку первый
<div class="6u">
не закрывается до тех пор, пока не последует второй, второй<div class="6u content content-right">
лежит внутри первого, а не рядом с ним.2. ага, позвольте мне это исправить. одна секунда
3. там. хитрость заключается в том, чтобы запустить форму перед запуском divs, которые разделяют ее на две части, и закрыть ее после них.
4. Ах, конечно!
<divs>
в формах все в порядке. На самом деле я тоже это знал <facepalm> . Большое спасибо за вашу помощь.