2011-03-09 24 views
1

我剛剛發現了一個令人討厭的IE8問題,它影響到我正在使用的登錄頁面。登錄表單在FF(3.6 - MAC & PC),Chrome,Safari中正常工作,但是在IE8中提交UN/PW時​​會進行刷新。沒有錯誤,只是一張空白的表格,看着我的臉。在登錄頁面上PHP - 登錄表格無法在IE8中工作

PHP代碼:

<?php 
session_name('tzLogin'); 
session_set_cookie_params(2*7*24*60*60); 
session_start(); 

error_reporting(E_ALL^E_NOTICE); 
define('INCLUDE_CHECK',true); 
include 'includes/connect.php'; 

if(isset($_GET['logoff'])) 
{ 
    $_SESSION = array(); 
    session_destroy(); 
    header("Location: login.php"); 
    exit; 
} 
?> 

最後,表單代碼:上的 '儀表盤'(着陸)頁面

<?php 
define('INCLUDE_CHECK',true); 
include 'includes/connect.php'; 

session_name('tzLogin'); 
session_set_cookie_params(2*7*24*60*60); 
session_start(); 

if($_SESSION['id'] && !isset($_COOKIE['tzRemember']) && !$_SESSION['rememberMe']) 
{ 
    $_SESSION = array(); 
    session_destroy(); 
} 

if(isset($_GET['logoff'])) 
{ 
    $_SESSION = array(); 
    session_destroy(); 

    header("Location: login.php"); 
    exit; 
} 

if($_POST['submit']=='Login') 
{ 
    $err = array(); 

    if(!$_POST['username'] || !$_POST['password']) 
     $err[] = 'Sorry, all the fields must be completed.'; 

    if(!count($err)) 
    { 
     $_POST['username'] = mysql_real_escape_string($_POST['username']); 
     $_POST['password'] = mysql_real_escape_string($_POST['password']); 
     $_POST['rememberMe'] = (int)$_POST['rememberMe']; 

     $row = mysql_fetch_assoc(mysql_query("SELECT id,usr,permission,fullName FROM adidas_members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'")); 

     if($row['usr']) 
     { 

      $_SESSION['usr']=$row['usr']; 
      $_SESSION['id'] = $row['id']; 
      $_SESSION['fullName'] = $row['fullName']; 
      $_SESSION['permission'] = $row['permission']; 
      $_SESSION['rememberMe'] = $_POST['rememberMe']; 

      setcookie('tzRemember',$_POST['rememberMe']); 
     } 
     else $err[]='Opps, wrong username and/or password.'; 
    } 

    if($err) 
    $_SESSION['msg']['login-err'] = implode('<br />',$err); 

    header("Location: dashboard.php"); 
    exit; 
} 
else { 
} 

$script = ''; 

?> 

登錄相關的代碼

<form action="" method="post" class="contactForm" id="loginForm"> 
       <?php 
        if($_SESSION['msg']['login-err']) 
        { 
         echo '<div class="error">'.$_SESSION['msg']['login-err'].'</div>'; 
         unset($_SESSION['msg']['login-err']); 
        } 
       ?> 
       <table class="loginTable" cellspacing="0"> 
        <tr> 
        <th width="50"><label for="username">Username:</label></th> 
        <td><input type="text" name="username" id="username" class="validate[required] textBox" /></td> 
        </tr> 
        <tr> 
        <th><label for="password">Password:</label></th> 
        <td><input type="password" name="password" id="password" class="validate[required] textBox" /></td> 
        </tr> 
        <tr> 
        <th></th> 
        <td style="padding-top:5px;"><input type="image" src="images/button_login.gif" alt="Login" name="submit" value="Login" /><span class="remember"><input name="rememberMe" id="rememberMe" type="checkbox" checked="checked" value="1" />Remember me</span></td> 
        </tr> 
       </table> 
      </form> 

我唯一能想到/發現的是IE8不能很好地處理cookie。也就是說,我查看了哪些cookies正在設置中,並且我被告知tzLogin是(有一個很久的失效日期)。

注:我的登錄頁面是基於關閉此>http://tutorialzine.com/2009/10/cool-login-system-php-jquery/

希望有人能與挫折感幫助!

rrfive

回答

0

IE不流通submit=Login只有通過座標圖像按鈕(submit.xsubmit.y值)。

庫的隱藏輸入代替:

<input type="hidden" name="submitaction" value="Login" /> 

而且在PHP代碼:

if($_POST['submitaction']=='Login') 
+0

輝煌!謝謝@theScrumMeister! – rrfive

+0

這是一個正確的解決方案,儘管我會選擇javascript解決方案,因爲從長遠來看,這不是一件容易的事情。 只在IE瀏覽器上注入隱藏的輸入,也不會污染其他理智瀏覽器的DOM。 漸進式破壞。 – twicejr