2017-09-28 53 views
0

我在做這個教程How to create a login system in PHP準備的語句執行,但我不能獲取結果

我試圖使用IF語句來檢查是否設置會話ID。當前允許用戶登錄並回顯當前會話ID。當我故意輸入一個錯誤的密碼時,代碼應該回顯一條消息,但它什麼也不做。另外,我無法使用註銷按鈕來終止會話。

這是我的登錄頁面

<?php 
session_start(); 
//include 'dbh.php'; 
    //probably do not need this can write connection in this file too 
    $conn = new PDO('mysql:host=localhost;dbname=testtable', 'root', ''); 
    $conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 
     if(!$conn){ 
      die("Connection is fubar yo!!! "); 
     } 

    $uid = $_REQUEST['uid']; 
    $pwd = $_REQUEST['pwd']; 

    $sql = "SELECT * from user WHERE uid='$uid' AND pwd='$pwd'"; 

    $result = $conn->prepare($sql); 
    $result->execute(); 

    if(!$row = $result->fetch(PDO::FETCH_ASSOC)){ 
     echo("Your username or Password is wrong"); 
    } else { 
     echo("hey man..it works"); 
     $_SESSION['id'] = $row['id']; 
    } 

    header("Location: fakelogin.php"); 

?> 

這是我的註銷頁面。

<?php 
session_start(); 
session_destroy(); 


header("Location: fakelogin.php"); 

?> 

這裏是包含登錄,註冊和註銷按鈕的主頁面。

<?php 
    session_start(); 
?> 

<!DOCTYPE HTML> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Look ma, no hands!</title> 
</head> 
<body> 
    <form action="login.php" method="POST"> 
     <input type="text" name="uid" placeholder="Enter username"><br> 
     <input type="password" name="pwd" placeholder="Enter password"><br> 
     <button type="submit" id="login">LOGIN</button> 
    </form> 

    <?php 
     echo("testing"); 
     if(isset($_SESSION['id'])){ 
      echo($_SESSION['id']); 
     } else { 
      echo("You are not logged in"); 
     } 
    ?> 
    <br><br><br> 
    <form action="signup.php" method="POST"> 
     <input type="text" name="first" placeholder="Enter first name"><br> 
     <input type="text" name="last" placeholder="Enter last name"><br> 
     <input type="text" name="uid" placeholder="Enter username"><br> 
     <input type="password" name="pwd" placeholder="Enter password"><br> 
     <button type="submit" id="sbt">SIGN UP HERE YO!</button> 
    </form> 

    <br><br><br> 

    <form> 
     <button action="logout.php">LOG OUT</button> 
    </form> 
</body> 

</html> 
+1

您應該在測試時註釋掉頭部重定向。 – josephting

+0

我把它拿出來了。我沒有看到變化。爲了記錄,爲什麼在測試時將其刪除是一個好主意? – VK1

+0

您將無法看到結果,因爲您只會看到'fakelogin.php'或任何頁面,如果您離開重定向進程完成後重定向到。加載您的登錄頁面後,您是否重定向到fakelogin.php?或者你留在登錄頁面? – josephting

回答

0

根據您所提供的代碼,你會總是返回到登錄頁面。

登錄後,登錄按鈕下方的字符串將會顯示測試後跟您的用戶帳戶ID。

否則,會顯示testsYou沒有登錄

您不能在login.php上添加消息,並期望它自動以神奇方式出現在fakelogin.php上。

有許多方法可以在頁面之間共享信息,會話變量就是其中之一。

通過使用下面的方法,您可以將會話變量id設置爲「您的用戶名或密碼錯誤」,並且由於fakelogin.php會在有值時將其打印出來,因此應顯示錯誤消息。

的login.php

<?php 
session_start(); 
//include 'dbh.php'; 
    //probably do not need this can write connection in this file too 
    $conn = new PDO('mysql:host=localhost;dbname=testtable', 'root', ''); 
    $conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 
     if(!$conn){ 
      die("Connection is fubar yo!!! "); 
     } 

    $uid = $_REQUEST['uid']; 
    $pwd = $_REQUEST['pwd']; 

    $sql = "SELECT * from user WHERE uid='$uid' AND pwd='$pwd'"; 

    $result = $conn->prepare($sql); 
    $result->execute(); 

    if(!$row = $result->fetch(PDO::FETCH_ASSOC)){ 
     echo("Your username or Password is wrong"); 
     $_SESSION['id'] = "Your username or Password is wrong"; 
    } else { 
     echo("hey man..it works"); 
     $_SESSION['id'] = $row['id']; 
    } 

    header("Location: fakelogin.php"); 

?> 

所以,當你試圖用錯誤的詳細信息登錄,您會看到testingYour用戶名或密碼錯誤

對於註銷按鈕的問題,您的HTML存在問題。 action屬性應該在form標記中,而不是像button這樣的標記。

<form action="logout.php"> 
    <button>LOG OUT</button> 
</form> 
+0

真棒迴應!謝謝! – VK1