2017-04-21 84 views
1

嘗試從當前頁面執行註銷。基本上,如果你點擊註銷,它會再次顯示登錄表單。我不想打電話給這個頁面。當我執行「註銷」按鈕時,它仍然顯示用戶登錄,但如果我再次點擊「註銷」按鈕,它可以正常工作。或者,如果我刷新頁面,它也可以。看起來最初提交的「註銷」不刷新。註銷 - 必須按兩次才能使用它?

<? 
 
    session_start(); 
 

 
$subtitle="Login"; 
 
ob_start(); 
 
// require("header2.php"); 
 
//Get any form data. 
 
$football->WhoOnlineDelete; 
 

 
$username=$_POST['username']; 
 
$password=$_POST['password']; 
 
global $conn; 
 
$conn = mysqli_connect("localhost","","", ""); 
 

 
function logOut() 
 
{ 
 
    unset($_SESSION['user']); 
 
    unset($_SESSION['uname']); 
 
\t session_destroy(); 
 
    ob_start(); 
 
    exit(); 
 
} 
 

 
if ($_POST) 
 
{ 
 
//Make sure cookies are enabled. 
 
// if ($_COOKIE["football"]=="") 
 
// { 
 

 
//  $football->ErrorMessage("You must use a browser that supports cookies and<br> have them enabled in order to access this site."); 
 
// } 
 
// else 
 
// { 
 
//Check input. 
 
    if ($username=="") 
 
    { 
 
       echo "Please enter a username."; 
 
    } 
 
     elseif ($password=="") 
 
    { 
 
       echo"Please enter your password."; 
 
    } 
 
     else 
 
    { 
 
//Verify the password and redirect to default page if correct. 
 
    $sql=mysqli_query($conn, "select * from phpfb_users where user = '".$username."'"); 
 
     $row = mysqli_fetch_object($sql); 
 
     $rows = mysqli_num_rows($sql); 
 
     if($rows == 0) 
 
     { 
 
       echo "User '".$username."' not found."; 
 
     } 
 
     elseif (md5($password) != $row->password) 
 
     { 
 
       echo "Incorrect password, please reenter."; 
 
     } 
 
     else 
 
     { 
 

 
     $user=$row->user; 
 
     if ($row->name =="") { 
 
     $uname=$row->user; 
 
     } else { 
 
     $uname=$row->name; 
 
     } 
 
     $_SESSION['uname'] = $uname; 
 
     $_SESSION['user'] = $user; 
 
     header("Location: loginJERRY.php"); 
 
     } 
 

 
    } 
 

 

 
    } 
 

 

 
//} 
 
    else 
 
{ 
 
//Set test cookie. 
 
    setcookie("football","peanutbutter",0,"/",$football->domain,0); 
 
} 
 
?> 
 
<div> 
 
<div style="display:block;margin:0px auto;" background-color="lightblue;"> 
 
<?php if(empty($_SESSION["user"])) { ?> 
 
<form name="loginform" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post"> 
 

 
\t <div class="error-message"><?php if(isset($message)) { echo $message; } ?></div> \t 
 
\t <div class="field-group"> 
 
\t \t <div><label for="login">Username: </label> 
 
\t \t <input name="username" type="text" class="input-field"> 
 
\t 
 
<label for="password">Password:</label> 
 
\t \t <input name="password" type="password" class="input-field"> 
 
<input type="submit" name="login" value="Login" class="form-submit-button"></span></div> 
 
\t </div>  
 
</form> 
 
<?php 
 
} else { 
 
\t $result = mysqli_query($conn,"SELECT * FROM phpfb_users WHERE user='".$username."' and password = '".$password."'"); 
 
\t $row = mysqli_fetch_array($result); 
 
?> 
 
<br><br> 
 
<form action="" method="post" id="frmLogout"> 
 
<div class="member-dashboard">Welcome <?php echo $user; ?>, You have successfully logged in! 
 
<input type="submit" name="logout" value="logout" class="logout-button"></div> 
 
</form> 
 
<? 
 
if (isset($_POST['logout'])) { 
 
    if ($_POST['logout'] == 'logout') { 
 
logOut(); 
 
    } else if ($_POST['logout'] != 'logout') { 
 
    } 
 
    
 
} 
 
?> 
 
</div> 
 
</div> 
 
<?php } ?> 
 
</body> 
 
<script type='text/javascript'> 
 
     document.loginform.username.focus(); 
 
     document.loginform.username.select(); 
 
</script>

我缺少的東西?

+1

直到頁面呈現內容之後,纔會將它們註銷... –

+0

嘗試將表單動作更改爲類似'index.php'的東西,並查看是否可以解決此問題。或者,如果您想讓用戶回到同一頁面,請在表單上填寫if(isset($ _ POST ['$ var])'語句以檢查數據是否已被解析如果有,請不要輸出表格 –

+0

你的代碼非常容易受到黑客攻擊,請不要自行構建,我建議你使用預構建的PHP框架組件(就像Laravel一樣) – Leonard

回答

0

您需要在HTML頁面呈現前檢查註銷功能,因此添加您在$ _ POST後退出()函數一樣退出鍵,

<? 
    ..........  
    $conn = .... 

    function logOut() 
    { 
     unset($_SESSION['user']); 
     unset($_SESSION['uname']); 
     session_destroy(); 
     ob_start(); 
     exit(); 
    } 
    if (isset($_POST['logout']) && $_POST['logout'] == 'logout') { 
     logOut(); 
    } // not required else part here 

    if($_POST) { 
     .... 
?> 
0

從技術角度來看,用戶將被註銷(因爲會話變量被銷燬),但頁面顯示的是不同的東西。你需要的頁面獲取呈現之前採取頂部的退出一部分,否則頁面不知道用戶將被註銷:

<? 
    session_start(); 

$subtitle="Login"; 
ob_start(); 
// require("header2.php"); 
//Get any form data. 
$football->WhoOnlineDelete; 

$username=$_POST['username']; 
$password=$_POST['password']; 
global $conn; 
$conn = mysqli_connect("localhost","","", ""); 

function logOut() 
{ 
    unset($_SESSION['user']); 
    unset($_SESSION['uname']); 
    session_destroy(); 
    ob_start(); 
    exit(); 
} 

if (isset($_POST['logout'])) { 
    if ($_POST['logout'] == 'logout') { 
logOut(); 
    } else if ($_POST['logout'] != 'logout') { 
    } 

} 

if ($_POST) 
{ 
//Make sure cookies are enabled. 
// if ($_COOKIE["football"]=="") 
// { 

//  $football->ErrorMessage("You must use a browser that supports cookies and<br> have them enabled in order to access this site."); 
// } 
// else 
// { 
//Check input. 
    if ($username=="") 
    { 
       echo "Please enter a username."; 
    } 
     elseif ($password=="") 
    { 
       echo"Please enter your password."; 
    } 
     else 
    { 
//Verify the password and redirect to default page if correct. 
    $sql=mysqli_query($conn, "select * from phpfb_users where user = '".$username."'"); 
     $row = mysqli_fetch_object($sql); 
     $rows = mysqli_num_rows($sql); 
     if($rows == 0) 
     { 
       echo "User '".$username."' not found."; 
     } 
     elseif (md5($password) != $row->password) 
     { 
       echo "Incorrect password, please reenter."; 
     } 
     else 
     { 

     $user=$row->user; 
     if ($row->name =="") { 
     $uname=$row->user; 
     } else { 
     $uname=$row->name; 
     } 
     $_SESSION['uname'] = $uname; 
     $_SESSION['user'] = $user; 
     header("Location: loginJERRY.php"); 
     } 

    } 


    } 


//} 
    else 
{ 
//Set test cookie. 
    setcookie("football","peanutbutter",0,"/",$football->domain,0); 
} 
?> 
<div> 
<div style="display:block;margin:0px auto;" background-color="lightblue;"> 
<?php if(empty($_SESSION["user"])) { ?> 
<form name="loginform" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post"> 

    <div class="error-message"><?php if(isset($message)) { echo $message; } ?></div>  
    <div class="field-group"> 
     <div><label for="login">Username: </label> 
     <input name="username" type="text" class="input-field"> 

<label for="password">Password:</label> 
     <input name="password" type="password" class="input-field"> 
<input type="submit" name="login" value="Login" class="form-submit-button"></span></div> 
    </div>  
</form> 
<?php 
} else { 
    $result = mysqli_query($conn,"SELECT * FROM phpfb_users WHERE user='".$username."' and password = '".$password."'"); 
    $row = mysqli_fetch_array($result); 
?> 
<br><br> 
<form action="" method="post" id="frmLogout"> 
<div class="member-dashboard">Welcome <?php echo $user; ?>, You have successfully logged in! 
<input type="submit" name="logout" value="logout" class="logout-button"></div> 
</form> 
</div> 
</div> 
<?php } ?> 
</body> 
<script type='text/javascript'> 
     document.loginform.username.focus(); 
     document.loginform.username.select(); 
</script> 

你也可以調用函數註銷後重新加載頁面,但這種在我看來,這不是很好。你總是必須記住,在渲染頁面之前,你首先必須執行所有的邏輯。

相關問題