Почему не мой основной процесс проверки PHP в IE, FireFox или Opera? - PullRequest
3 голосов
/ 16 мая 2011

Проверка моей формы на основе PHP не работает в последних версиях IE, Firefox или Opera. Я нажимаю кнопку «Отправить» с пустыми значениями в полях формы, чтобы вызвать проверку, но страница просто обновляется.

Странно, что сообщения о проверке и ошибках работают в Chrome и Safari.

Посмотрите на это здесь: http://www.directsponsor.org/contact/

Может кто-нибудь посоветовать мне известные проблемы, касающиеся того, почему PHP может не работать в определенных браузерах некоторые браузеры ведут себя по-разному?

Заранее извиняюсь за горы кода, хотя я предполагаю, что это необходимо:

Вот форма:

    <form method="post" action="http://www.directsponsor.org/contact/">
  <fieldset>
  <ul>
  <?php if(isset($_POST['contactsubmit'])){
  if (!$contactnamevalidation){
  echo "<li class='contactfail'><p><img src='"; echo bloginfo('stylesheet_directory'); echo "/images/icons/101-large.png'>&nbsp;&nbsp;&nbsp;You did not input your <strong>name</strong>.</p></li>";
  }
  }
  ?>
  <li>
    <label for="contactname">Your name <em>(required)</em></label> 
    <input type="text" name="contactname" class="textbox" value="<?php if (isset($_POST['contactname'])) {echo htmlspecialchars($_POST['contactname'], ENT_QUOTES);    }?>">
 </li>
 <?php if(isset($_POST['contactsubmit'])){
  if (!$contactemailvalidation1){
  echo "<li class='contactfail'><p><img src='"; echo bloginfo('stylesheet_directory'); echo "/images/icons/101-large.png'>&nbsp;&nbsp;&nbsp;You did not input your <strong>email</strong>.</p></li>";
  }
  }
  ?>
 <?php if(isset($_POST['contactsubmit'])){
  if (!$contactemailvalidation2){
  echo "<li class='contactfail'><p><img src='"; echo bloginfo('stylesheet_directory'); echo "/images/icons/101-large.png'>&nbsp;&nbsp;&nbsp;You did not input a <strong>valid email</strong>.</p></li>";
  }
  }
  ?>
  <li>
    <label for="contactemail">Your email <em>(required)</em></label>
    <input type="text" name="contactemail" class="textbox" value="<?php if (isset($_POST['contactemail'])) {echo htmlspecialchars($_POST['contactemail'], ENT_QUOTES);    }?>">
 </li>
 <?php if(isset($_POST['contactsubmit'])){
  if (!$contactmessagevalidation){
  echo "<li class='contactfail'><p><img src='"; echo bloginfo('stylesheet_directory'); echo "/images/icons/101-large.png'>&nbsp;&nbsp;&nbsp;You did not input a <strong>message</strong>.</p></li>";
  }
  }
  ?>
  <li>
    <label for="contactmessage">Message <em>(required)</em></label>
    <textarea name="contactmessage"><?php if (isset($_POST['contactmessage'])) {echo htmlspecialchars($_POST['contactmessage'], ENT_QUOTES);    }?></textarea>
  </li>
  <li class="buttons">
  <label for="contactsubmit">&nbsp;</label><input type="image" src="/wp-content/themes/directsponsor/images/button-sendmessage.png" name="contactsubmit" value="Submit Message">

  <?php if(isset($_POST['contactsubmit'])){echo"<a href='http://www.directsponsor.org/contact/'><img src='/wp-content/themes/directsponsor/images/button-clearform.png'/></a>";} ?>
  </li>
  </ul>
  </fieldset>
  </form>

Вот (соответствующая часть) проверки:

    <?php 
if(isset($_POST['contactsubmit'])){

// Проверка здесь.

}
?>

Ответ

Как предполагает доктор Молл, IE, FireFox и Opera обрабатывают значение изображений, используемых в качестве кнопки отправки , по-разному по сравнению с Chrome и Safari.

Моя проверка началась с:

if(isset($_POST['contactsubmit'])){

IE, Firefox и Opera публикуют следующие значения:

//Values for image as a submit button.
contactsubmit_x
contactsubmit_y

Поскольку оба эти значения отличаются от contactsubmit, условие if(isset()) не срабатывает. Чтобы запомнить это, мне нужно было использовать элемент формы, отличный от , в качестве кнопки отправки , такой как поле электронной почты:

if(isset($_POST['contactemail'])){

Это вызовет условие для проверки, является ли contactemail пустым или нет.

Ответы [ 2 ]

3 голосов
/ 16 мая 2011

Посмотрите на это:

if(isset($_POST['contactsubmit']))

эта переменная не существует в сбойных браузерах, если вы используете отправку изображения, вместо нее есть переменные $_POST['contactsubmit_x'] и $_POST['contactsubmit_y'].

Это работает в Chrome / Safari, потому что они также отправляют переменную "contactsubmit", если вы устанавливаете атрибут-значение для отправки изображения (но вхождение этой переменной не является надежным, как вы видите).

Но я бы предложил вообще не использовать эти переменные. От браузера зависит, будут ли эти переменные отправляться всегда или только при нажатии кнопки, поэтому вы сталкиваетесь с проблемами, когда пользователь использует [ENTER] для отправки формы в некоторых браузерах.

Проверьте другую переменную, например, $_POST['contactemail'] вместо

0 голосов
/ 16 мая 2011

Я только что посмотрел на вашу форму, и она, кажется, работает нормально, используя FF 3.6.10.Я думаю, что это проблема кеширования, очистите кеш браузера и попробуйте снова.

Также вы можете захотеть взглянуть на плагин Web Devoloper для FF, поскольку он предлагает простой способ отключить / включить ваш кеш.https://addons.mozilla.org/en-US/firefox/addon/web-developer/

Поскольку php на стороне сервера, он не будет зависеть от различных браузеров.

С уважением, Гарри

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...