2011-05-16 60 views
3

我的表單的基於PHP的驗證在IE,Firefox或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'])){ 

//在此處驗證。

} 
?> 

答案

如所建議的通過莫爾博士,IE,火狐和Opera處理用作比較Chrome和Safari提交按鈕不同圖像的值。

我的驗證的開始:

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

IE,Firefox和Opera的帖子以下值:

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

由於這兩個值是不同的,以contactsubmit,則if(isset())條件ISN」 t觸發。爲了rememdy這個我用比圖像作爲其他表單元素提交按鈕需要,如電子郵件字段:

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

這將觸發條件進行驗證contactemail是否爲空或不。

+5

PHP在瀏覽器上不會失敗,因爲它在服務器端處理。 – 2011-05-16 10:24:20

+0

感謝您的糾正。根據Dr.Molle關於不一致的瀏覽器處理用作提交按鈕的圖像值的回答,某些瀏覽器失敗(而不是_PHP失敗)會更準確嗎? **注意:我編輯了這個問題 - 參考通過文本**敲擊。 – 2011-05-16 10:59:50

回答

3

看看這個:

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

這個變量一點兒也不存在失敗的瀏覽器,如果您使用的圖像提交存在變數$_POST['contactsubmit_x']$_POST['contactsubmit_y']代替。

它可以在Chrome/Safari中使用,因爲如果您爲圖像提交設置了value-attribute(但發生此變量的可能性不如您所見),它們還會發送變量「contactsubmit」。

但我建議不要使用這些變量。它取決於瀏覽器,如果這些變量將被始終發送,或者僅在點擊該按鈕時發生,所以當用戶使用[ENTER]在某些瀏覽器中提交表單時遇到問題。

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

+0

謝謝。我將它改爲'if(isset($ _ POST ['contactemail']))'。檢查元素而不是提交/圖像按鈕是否是一種好的做法?即,如果電子郵件字段恰好是用戶遺漏的字段,該怎麼辦。有沒有辦法強制contactsubmit_x或contactsubmit_y的值? – 2011-05-16 10:54:56

+0

這個字段是否被省略並不重要,如果它是空的,它也會被提交。 – 2011-05-16 11:00:57

+0

優秀。謝謝。 – 2011-05-16 11:24:01

0

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

此外,您可能想看看FF Devoloper插件的FF,因爲它提供了一種簡單的方法來禁用/啓用緩存。 https://addons.mozilla.org/en-US/firefox/addon/web-developer/

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

親切的問候 加里

+0

感謝您提供信息,但Dr.Molle關於使用圖像作爲提交按鈕的建議是問題的根源。 – 2011-05-16 10:56:54

相關問題