2016-07-26 25 views
-1

似乎,我無法在腳本中添加密碼保護:它應該允許使用密碼登錄並將數據從表單提交給mysql。登錄看起來不錯,但如果我嘗試按提交,它會將我返回到登錄頁面。看來,該會話被刪除或覆蓋,但目前尚不清楚,如何:php會話在表單提交後丟失

//login area 
<?php 
$password = "test"; 
session_start(); 
$_SESSION['txtPassword']= $_POST['txtPassword'] ; 
if ($_SESSION['txtPassword']!=$password) { 
?> 
<form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
<p><label for="txtPassword">Password:</label> 
<br /><input type="text" title="Enter your password" name="txtPassword" /></p> 
<p><input type="submit" name="Submit" value="Login" /></p> 
</form> 
<? 
} 
elseif ( $_SESSION['txtPassword']=$password) { 
echo $_SESSION['txtPassword'] ; // tried to print password, result is correct:  test 

//my db connection, just in case: 
include "config.php"; 
$connect = mysqli_connect(HOST, USER, PASSWORD, NAME); 

// data which should be inserted to db 
if 
(@$_POST['posted']=='1' $_POST['posted'])) { 
$sSQL = "UPDATE users SET user_login='".mysqli_real_escape_string($connect, $_POST['usern'])."',user_pass='".mysqli_real_escape_string($connect, dohashpw($_POST['passw']))."' WHERE ID=1"; 
mysqli_query($connect, $sSQL) or print(mysql_error()); 
print ' <div class="container"> <p class="pstype">Password updated! </p>'; 
... 
//input form 
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"><input type="hidden" name="posted" value="1" /> 

<div class="col-xs-3"> 
<label for="ex2">New Username: </label> 
<input type="text" class="form-control input-lg" name="usern" > 
</div> 

<div class="col-xs-3"> 
<label for="ex2">New Password: </label> 
<input type="password" class="form-control input-lg" name="passw" > 
</div> 

<div class="col-xs-3"> 
<input type="submit" value="Submit" onclick="<? mysqli_query ($connect, $sSQL);?>; "> 
</div> 
</form> 

我能夠登錄這個網頁,但是當我填寫表格,然後點擊提交,我再次得到登錄區。如果echo $ _SESSION顯示正確的結果,我認爲它已建立,但提交後數據丟失。你能幫我找到我的錯誤嗎?

+1

旁註:首先,在會話中傳遞密碼不是一個好主意。無論哪種方式,檢查錯誤。 –

+0

這不是比較'elseif($ _SESSION ['txtPassword'] = $ password)'。什麼是@ $ _ POST ['posted'] =='1'$ _POST ['posted']'假設要做什麼? – chris85

+0

旁註2:你應該哈希和鹽你的密碼。 –

回答

0

要分配在這裏沒有比較:

elseif ( $_SESSION['txtPassword']=$password) { 

這是更好的

elseif ( $_SESSION['txtPassword']==$password) { 

但那是一個壞主意,無論如何,密碼不應該被存放在這樣的會話變量,你必須一旦用戶提交它們並將它們散列,並且只處理和存儲散列密碼到您的代碼和數據庫中

+0

是的你是對的。但這不是問題。因爲如果條件在這裏執行。那就是問題所在 –

0
<?php 
$password = "test"; 
session_start(); 
$_SESSION['txtPassword']= $_POST['txtPassword'] ; 
if($_SESSION['txtPassword']!=$password){ 
?> 
    <form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ? >"> 
    <p><label for="txtPassword">Password:</label></p> 
    </br> 
    <p><input type="text" title="Enter your password" name="txtPassword"/> </p> 
    <p><input type="submit" name="Submit" value="Login"/></p> 
    </form> 

<?php 
} 
else{ 
echo $_SESSION['txtPassword']; 
} 
?> 

我不明白爲什麼elseif代表?你已經在檢查兩者是否不相等的情況。