2015-08-08 117 views
1

這是我的代碼,我有它的問題,它說,它有一個重定向循環此網頁有重定向循環ERR_TOO_MANY_REDIRECTS

<?php 
session_start(); 
require_once("db_connection.php"); 

if (!$connect) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 

$username = $_POST['username']; 
$password = $_POST['password']; 

$query = "SELECT * FROM admins WHERE username='{$username}' AND password='{$password}'"; 
$result = mysqli_query($connect , $query); 

if (isset($result)) { 
    echo "success"; 
} 

$rows = mysqli_fetch_assoc($result); 

if(mysqli_num_rows($result)==1){ 
    $_SESSION['id'] = $rows['id']; 
} 

if(mysqli_num_rows($result)!=1 || !isset($rows['id'])){ 
    header("location: login.php"); 
} 

?> 

,當我嘗試推出它給我上的瀏覽器

此網頁有重定向循環

ERR_TOO_MANY_REDIRECTS`

+1

除了SQL注入,你也應該注意不要存儲明文密碼。使用SHA256對其進行散列並對其進行醃製將有所幫助。但爲什麼重新發明輪子?使用一些現成的認證機制。 – Tarik

+0

是的,我知道! 這只是用於教育目的! 我還在學習,這是我學到的東西的應用 – Bouzaid

回答

7

您有一個基本的邏輯錯誤。您正試圖在頁面加載時運行此代碼,但尚未有任何$_POST值,因爲沒有提交表單。所以你的查詢失敗。因爲如果查詢沒有發現行,你的代碼會回到這個頁面,那麼這個循環會重新開始。

若要解決此問題,請將此代碼全部包裝在if語句中,以檢查表單是否已提交。你可以檢查$_SERVER超全球,其中包含和關鍵字REQUEST_METHOD它會告訴你,如果頁面是通過POST(如提交表單時常見的)或GET(如在「典型」頁面加載中常見的)請求的。如果它的值是「POST」,那麼表單被提交,你可以處理數據,如果沒有,則忽略該代碼。

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // your code goes here 
} 

僅供參考,你是大開SQL injections

+0

事實上,SQL注入是我第一次看到這些代碼。 – Tarik

+0

是的,我知道!這僅用於教育目的!我還在學習,這是我學到的東西的應用 – Bouzaid