簡體   English   中英

為什么不在IE,FireFox或Opera中進行基本的PHP驗證過程?

[英]Why won't my basic PHP validation process in IE, FireFox or Opera?

基於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為空。

看這個:

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

這個變量在失敗的瀏覽器中不存在,如果使用圖像提交,則存在變量$_POST['contactsubmit_x']$_POST['contactsubmit_y']

它適用於Chrome / Safari,因為如果你為image-submit設置了一個value-attribute,它們也會發送變量“contactsubmit”(但是你看到這個變量的出現是不可靠的)。

但我建議不要使用這些變量。 這取決於瀏覽器是否總是發送這些變量,或者只有在單擊按鈕時才會發送,因此當用戶使用[ENTER]在某些瀏覽器中提交表單時會遇到問題。

檢查另一個變量,例如$_POST['contactemail']

我剛看了你的表格,似乎在這里使用FF 3.6.10正常工作。 我認為這是一個緩存問題,請清除瀏覽器緩存並重試。

此外,您可能希望查看FF的Web Devoloper插件,因為它提供了一種禁用/啟用緩存的簡便方法。 https://addons.mozilla.org/en-US/firefox/addon/web-developer/

由於php是服務器端,因此不會受到不同瀏覽器的影響。

親切的問候加里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM