为什么不在IE,FireFox或Opera中进行基本的PHP验证过程?

时间:2011-05-16 10:19:40

标签: php internet-explorer validation firefox

基于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'])){

//在此验证。

}
?>

答案

正如Molle博士所建议的那样,与Chrome和Safari相比,IE,FireFox和Opera处理用作提交按钮的图像的价值不同。

我的验证始于:

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 个答案:

答案 0 :(得分:3)

看看这个:

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

这个变量在失败的浏览器中不存在,如果您使用图像提交,则会有变量$_POST['contactsubmit_x']$_POST['contactsubmit_y']

它适用于Chrome / Safari,因为如果您为image-submit设置了value-attribute,它们也会发送变量“contactsubmit”(但是如您所见,此变量的出现不可靠)。

但我建议不要使用这些变量。这取决于浏览器是否总是发送这些变量或仅在单击按钮时发送,因此当用户使用[ENTER]在某些浏览器中提交表单时会遇到问题。

检查另一个变量,例如$_POST['contactemail'],而不是。

答案 1 :(得分:0)

我刚看了你的表格,似乎在这里使用FF 3.6.10正常工作。 我认为这是一个缓存问题,请清除浏览器缓存并重试。

此外,您可能需要查看FF的Web Devoloper插件,因为它提供了一种简单的方法来禁用/启用缓存。 https://addons.mozilla.org/en-US/firefox/addon/web-developer/

由于php是服务器端,因此不会受到不同浏览器的影响。

亲切的问候 加里