我正在爲登錄頁面創建有效的憑證功能。
功能的工作原理,如果我用它使用下面的代碼的功能外:通過函數運行「isset」時,會話將不會啓動
if(isset($_POST['email'])){
$email = $_POST['email'];
$password = $_POST['password'];
$q = "SELECT * FROM user WHERE email = :email";
$query = $db->prepare($q);
$query->execute(array(":email" => $email));
$results = $query->fetchAll();
if($results !=FALSE && $query->rowCount() > 0) {
if($results[0]['password'] == $password){
$_SESSION['email'] = $email;
}
但如果我調用函數從外部函數,沒有任何反應,好像有什麼錯誤的登錄憑證。
功能:
function valid_credientials($email,$password){
global $db;
$email = $_POST['email'];
$password = $_POST['password'];
$q = "SELECT * FROM user WHERE email = :email";
$query = $db->prepare($q);
$query->execute(array(":email" => $email));
$results = $query->fetchAll();
if($results !=FALSE && $query->rowCount() > 0) {
if($results[0]['password'] == $password){
$_SESSION['email'] = $email;
}}
}
和isset
後:
if (isset($_POST['email'], $_POST['password'])){
if (valid_credientials($_POST['email'], $_POST['password']) == false){
$errors[] = 'No matching email found.';
}
if (empty($errors)){
$_SESSION['email'] = htmlentities($_POST['email']);
header("Location: profile.php");
die();
}
}
我在想與連接的麻煩,但如果我用這個函數返回的電子郵件。
function valid_credientials($email,$password){
$test = $db->query("SELECT `email` FROM `user`");
while($row = $test->fetch(PDO::FETCH_ASSOC)){
echo $row['email'], '<br>';
}
}
這不是「會話」,而是你寫的代碼。由於它是你自己的代碼,你的問題就是缺乏調試。由於缺乏調試,這個問題不適合Q&A網站,因爲它太過本地化。即使志願者會爲你調試你的代碼,它也不會幫助任何進一步的訪問者。 –
同意'你的常識',但只是爲了幫助,你不會在你的功能中返回任何東西。寫一些明確的真/假返回值,以確保你的函數可以通過if語句。 – anson