2016-03-11 73 views
0
$stmt = $con->prepare("SELECT * FROM admin WHERE email = ? AND password = ? "); 
$stmt->bind_param('ss', $_POST['username'], $_POST['password']); 
$result = $stmt->execute(); 
$stmt->store_result(); 

if ($result->num_rows > 0) { 
    while ($member = $result->fetch_assoc()) { 
     $_SESSION['SESS_MEMBER_ID'] = $member['id']; 
     $_SESSION['SESS_LAST_NAME'] = $member['email']; 
     $_SESSION['SESS_FIRST_NAME'] = $member['password']; 
     session_write_close(); 
     header("location:home.php"); 
    } 
} else { 
    $errmsg_arr[] = 'Wrong Username or Password'; 
    $errflag = true; 
    if ($errflag) { 
     $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
     session_write_close(); 
     header("location: index.php"); 
    } 
} 

HTML表單後沒有進行重定向:頁面使用的mysqli prepare語句

<form role="form" action="action.php" method="post" enctype="multipart/form-data"> 
<fieldset> 
<div class="form-group"> 
<input class="form-control" placeholder="User Name" name="username" type="text" autofocus> 
</div> 
<div class="form-group"> 
<input class="form-control" placeholder="Password" name="password" type="password" value=""> 
</div> 
<input type="submit" value="Log In" name="submit" class="btn btn-lg btn-success btn-block"> 
</fieldset> 
</form> 

這個代碼是沒有重定向到home.php ..它顯示錯誤的用戶名或密碼。新來的mysqli prepare語句。因此,這裏的任何幫助

+0

我想這是一個錯字,但你不應該在會話中存儲密碼;) – Roboroads

+1

你只希望得到一個結果吧?那麼你不需要'while'循環。正如@Roboroads說的那樣,在會話中存儲密碼並不是一個好主意.. ;-) – Qirel

+0

是'$ _POST ['username']'用戶的電子郵件地址嗎?當涉及到攜帶負載的變量名時,您的代碼似乎非常不一致。 – Roboroads

回答

1

我讀http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

看起來這是正確的方式來得到它:

$stmt = $con->prepare("SELECT * FROM admin WHERE email = ? AND password = ? "); 
$stmt->bind_param('ss', $_POST['username'], $_POST['password']); 
$stmt->execute(); 
$result = $stmt->get_result(); 

此外,This page最高審計機關:

執行:返回TRUE或FALSE的成功失敗。

執行不會返回您的結果,而是一個布爾值。

+0

thanksssss很多..工作:),我應該仔細閱讀這些手冊.. – Pooojaaaa