2015-11-02 17 views
0

因此,我正在創建登錄部分。但是,我不確定它是否實際登錄用戶。我有一個包含UserID(A_I),電子郵件,密碼和所有常用內容的表格。因此,當我登錄時,我試圖在帳戶頁面上獲取並回顯用戶標識,以顯示用戶已登錄,但仍未獲得任何成功。在帳戶頁面(登錄系統)上執行自動遞增值

登錄形式:

<form method="post" action=""> 
      <div class="FormElement"> 
        <input name="email" type="text" required="required" class="TField" placeholder="Email"> 
      </div> 
      <div class="FormElement"> 
        <input type="Password" required="required" class="TField" placeholder="Password"> 
      </div> 
      <div class="FormElement"> 
        <input name="LogIn" type="submit" class="button" value="LogIn"> 
      </div> 
     </form> 

登錄PHP腳本:

<?php require 'Connections/Connections.php'; ?> 
<?php 

    if (isset($_POST['LogIn'])){ 

      $EM = $_POST['email']; 
      $PW = $_POST['password']; 
      $result = $con->query("select * from user where Email='$EM' AND Password='$PW'"); 

      $row = $result->fetch_array(MYSQLI_BOTH); 
      session_start(); 
      $_SESSION["UserID"] = $row['UserID']; 
      header('Location: Account.php'); 
    } 
?> 

正如你可以在腳本中看到的,我們前往Account.php,在那裏我基本上想:

<?php echo $_SESSION["UserID"]; ?> 

但是,沒有UserID被回顯。沒有錯誤,通知或警告。

Connections.php($ con)只是與MYSQLI表的正常連接,它連接的很好。

相當新的在這裏和任何幫助表示讚賞!

在此先感謝。

+0

在您的密碼字段中添加name =「password」,並在您的表單中添加一個操作。 –

+0

你是否做過任何調試,比如'var_dump($ _ POST)'或'var_dump($ row)'?確保您啓用了錯誤報告功能,因爲您應該收到有關「未定義的索引密碼」的警告。 – Barmar

回答

0

你必須爲你的密碼字段中添加屬性附加傷害名。使用預準備語句和PDO也很好。最後,當您重定向您的頁面時,請添加退出方法Why I have to call 'exit' after redirection through header('Location..') in PHP?

<form method="post" action="youraction.php"> 
    <div class="FormElement"> 
     <input name="email" type="text" required="required" class="TField" placeholder="Email"> 
    </div> 
    <div class="FormElement"> 
     <input name="password" type="Password" required="required" class="TField" placeholder="Password"> 
    </div> 
    <div class="FormElement"> 
     <input name="LogIn" type="submit" class="button" value="LogIn"> 
    </div> 
</form> 

<?php 

if (isset($_POST['LogIn'])) { 
    session_start(); 

    try { 
     //Make your connection handler to your database 
     $conn = new PDO("mysql:host=".$servername.";dbname=".$database, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); 

     $sql = "SELECT * FROM user WHERE Email = :email AND Password = :password"; 
     $stmt = $conn->prepare($sql); 
     //Execute the query 
     $stmt->execute(array(':email'=>$email, ':password'=>$password)); 
     $row = $stmt->fetch(); 
     if (count($row) > 0) { 
      $_SESSION["UserID"] = $row['UserID']; 
      header('Location: Account.php'); 
      exit(); 
     } 

    } catch(PDOException $e) { 
     echo $e->getMessage(); 
     die(); 
    } 

} 
?> 
+0

哎呀,沒有注意到它。現在像魅力一樣工作,非常感謝! –

0

你缺少你的密碼輸入名稱字段,它應該是:

<input name="password" type="Password" required="required" class="TField" placeholder="Password" /> 

也不要忘記讓他們與/>

由於側端關閉您的所有輸入標籤,做不只是將$ _POST數組中的字符串直接傳遞給查詢,您可以通過SQL注入來實現。使用類似於:quote()http://php.net/manual/en/pdo.quote.php

0

name屬性添加到密碼輸入。

<form method="post" action=""> 
     <div class="FormElement"> 
       <input name="email" type="text" required="required" class="TField" placeholder="Email"> 
     </div> 
     <div class="FormElement"> 
       <input type="Password" required="required" name="password" class="TField" placeholder="Password"> 
     </div> 
     <div class="FormElement"> 
       <input name="LogIn" type="submit" class="button" value="LogIn"> 
     </div> 
    </form> 

因爲您還沒有提供名稱,它總是返回未定義的索引。它不會與數據庫中的密碼相匹配。

0

哎呀你錯過name="password"輸入形式還使用單一的PHP標籤爲便於理解

require_once ('Connections/Connections.php'); 

if (isset($_POST['LogIn'])) { 

    $EM = $_POST['email']; 
    $PW = $_POST['password']; 
    $result = $con->query("select * from user where Email='$EM' AND Password='$PW'"); 

    $row = $result->fetch_array(MYSQLI_BOTH); 
    if (!empty($row)) { 
     session_start(); 
     $_SESSION["UserID"] = $row['UserID']; 
    } 
    header('Location: Account.php'); 
} 
+0

哎呀,你是第四個指出這一點的人。 :) – Barmar