基于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'> 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'> 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'> 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'> 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"> </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
是否为空。
答案 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是服务器端,因此不会受到不同浏览器的影响。
亲切的问候 加里