2012-10-08 41 views
-3
<?php 
    session_start(); 
    $root = 'root'; 
    mysql_connect('localhost',$root,'') or die(mysql_error()); 
    mysql_select_db("test_create_database") or die(mysql_error()); 

    $result = mysql_query("SELECT * FROM members"); 
    $row = mysql_fetch_assoc($result); 


    $username=""; 
    $password=""; 
    $id=""; 

    if(isset($_POST["submit"])) 
    { 
     if(isset($_POST["submit"]) && !empty($_POST["username"]) && !empty($_POST["password"]) && !empty($_POST["id"])) 
     { 
      if(isset($_POST["username"]) && isset($_POST["password"]) && isset($_POST["id"])) 
      { $username = $row["username"]; 
       $password = $row["password"]; 
       $id  = $row["id"]; 
       if($username == "John" && $password =="1234" && $id =="1") 
       { 
        echo "you're in"; 
       } 
       else 
       { 
        echo "you're out!"; 
       } 
      } 
     } 
     elseif (isset($_POST["submit"]) && (empty($_POST["username"]) || empty($_POST["password"]) || empty($_POST["id"]))) 
     { 
       echo "enter all fields please!!!!"; 
     } 

    } 
    session_destroy(); 
?> 

如果首先所有字段被正確填寫並按下提交按鈕,文本「你在」是打印到網頁上,字段中的文字消失。但如果我再次刷新頁面,即使我已經調用了session_destroy()函數,打印的文本「你在」仍然保留。我不明白爲什麼會議沒有被破壞。任何幫助,將不勝感激。當按下刷新按鈕時,'echo'函數發佈的文本仍然存在.-- PHP

+0

這裏的問題究竟是什麼? –

+0

你究竟發生了什麼問題? – Peon

+1

F5通常會重新發送數據 - 所以會的。 – BugFinder

回答

0

isset($ _ POST [「submit」])在elseif中刪除此檢查。

提交表單和顯式刷新頁面$ _POST [「submit」]已設置,但如果你手動進入該頁面$ _POST [「submit」]將不會被設置。

2

關於session_start()session_destroy()的位不影響POST變量。正如BugFinder指出的那樣,刷新頁面通常會重新提交您剛剛提交的任何數據。這就是爲什麼'你在'消息被再次呈現。

防止此行爲的一種方法是在處理提交的數據後重定向。然後,您可以設置一個會話變量來跟蹤您仍然需要顯示的消息(或者,如果用戶已登錄或未登錄)。

您的代碼將是這個樣子:

<?php 
    session_start(); 
    $root = 'root'; 
    mysql_connect('localhost',$root,'') or die(mysql_error()); 
    mysql_select_db("test_create_database") or die(mysql_error()); 

    $result = mysql_query("SELECT * FROM members"); 
    $row = mysql_fetch_assoc($result); 

    $username=""; 
    $password=""; 
    $id=""; 

    if(isset($_POST["submit"])) 
    { 
     if(isset($_POST["submit"]) && !empty($_POST["username"]) && !empty($_POST["password"]) && !empty($_POST["id"])) 
     { 
      if(isset($_POST["username"]) && isset($_POST["password"]) && isset($_POST["id"])) 
      { $username = $row["username"]; 
       $password = $row["password"]; 
       $id  = $row["id"]; 
       if($username == "John" && $password =="1234" && $id =="1") 
       { 
        //do stuff 
        $_SESSION['message'] = "you're in"; 
       } 
       else 
       { 
        $_SESSION['message'] = "you're out!"; 
       } 
      } 
     } 
     elseif (isset($_POST["submit"]) && (empty($_POST["username"]) || empty($_POST["password"]) || empty($_POST["id"]))) 
     { 
       $_SESSION['message'] = "enter all fields please!!!!"; 
     } 
     $selfLink = $_SERVER['PHP_SELF']; 
     if (isset($_SERVER['QUERY_STRING'])) { 
      $selfLink .= "?" . $_SERVER['QUERY_STRING']; 
     } 
     header('location: '.$selfLink); 
     exit; 
    } 

    if (isset($_SESSION['message'])) { 
     echo $_SESSION['message']; 
     unset($_SESSION['message']); 
    } 
?> 

注意,重定向網頁本身似乎有點強迫(使用$_SERVER['QUERY_STRING']抓取當前頁面的位置)。如果知道文件名或者在處理表單輸入後重定向到不同的頁面,它會更直觀地工作。

相關問題