2013-12-16 104 views
-1

***問題已得到解答。這是解決方案:使用PHP進行登錄時遇到問題需要輸入

好的,所以我需要解決一些事情之前,回答問題。首先,數據庫意味着有許多安全缺陷。這是一個安全類,我試圖故意破解它。然後,我入侵後,我應該阻止自己的攻擊。

我想清楚的第二件事是,這是一個本地數據庫,除了我自己,同學和老師以外,任何人都不會使用它。

現在回答:我做錯的第一件事是代碼應該從本地主機網頁登錄。我試圖從login.php文件登錄。

第二件事,是我混合了我的mysql *和mysqli *方法。代碼中不能有多個版本的相同方法。

感謝所有發佈的人和快速回復。

該問題的簡要說明: 我一直在編碼一個學校項目的數據庫。根據教師的評論,我已經正確設置了學校數據庫。我擁有的代碼應該是用戶輸入的內容,請使用「已註冊」的學生列表對其進行檢查,並將學生ID和密碼與已存在的列表進行比較。 檢查完成後,代碼將根據正在註冊的學生開始會話。如果學生沒有註冊,它會再次將他們重定向到登錄頁面。

我遇到的麻煩是代碼根本無法工作。我收到一個錯誤,說我的login.php文件的第35行有問題。這裏是我的代碼:

<?php 
//Connect to DB 
$con=mysql_connect("localhost","root","cravenreach","univ"); 

if (mysqli_connect_errno($con)) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
else 
{ 
    echo "Succeed to connect to MySQL. "; 
} 
//Session setup 
session_start(); 
if(isset($_POST['sid']) && isset($_POST['password'])) 
{ 
$checklogin = mysql_query($con, "SELECT * FROM students WHERE sid=".$_POST['sid']." AND password=".$_POST['password']); 
echo $count1 = mysql_num_rows($checklogin); 
if($count1==1) 
{ 
    // auth okay, setup session 
    $_SESSION['sid'] = $_POST['sid']; 
    // redirect to required page 
    header("Location: main.php"); 
} 
else { 
    // didn't auth go back to login 
    header("Location: login.php"); 
} 
} 
else { 
// username and password not given so go back to login 
//header("Location: login.php"); 
//This code is broken, causes a redirect loop. 
echo "failure to start"; 
//header("location: .php"); 
} 

?> 

這裏是index.php的代碼:

<html> 
<body> 
<form action="login.php" method="post"> 
<p><label>Student ID: <input type="text" name="sid"></label></p> 
<p><label> Password: <input type="password" name="password"></label></p> 
<input type="submit"> 
<input type="reset" value="Clear"> 
</form> 
</body> 
</html> 

我收到的錯誤是這樣的:「成功連接到MySQL失敗的開始。」 我知道代碼並沒有將登錄評估爲true,而是直接跳到最後一條else語句。我只是不明白爲什麼。

回顧:我的代碼實際上不會接受正確的學生輸入(或對此不正確),並且不允許用戶登錄。它只是拋出一個錯誤。我的問題是:我的代碼有什麼問題?我的查詢是錯誤的,還是執行會話?

+0

你可以在你的login.php代碼中嘗試'var_dump($ _ POST)'嗎?它會告訴你你的領域是否成功發送。 – andrewsi

+0

第一:你的學校項目是非常錯誤的,並有非常大的安全「漏洞」。最原始的安全事物在這裏被打破了。即使我可以在10秒內接管你的服務器。你的教授/老師應該真正開展一些開發課程! – Sliq

+0

首先,你將'mysql_'與'mysqli_'函數混合在一起,這樣會阻礙事物的發展。 –

回答

0

您的查詢應該是這樣

//Prevnt from SQL injection 
$sid = mysql_real_escape_string($_POST['sid']); 
$password = mysql_real_escape_string($_POST['password']); 
checklogin = mysql_query("SELECT * FROM students WHERE sid='$sid' AND password='$password'",$con); 

,MySQL的已經過時的使用庫MySQLi或PDO

+0

我嘗試進行您所建議的更改,但代碼仍會輸出相同的錯誤。 感謝您輸入BTW。 –

1

您需要更換mysql_*功能於mysqli_*也,你需要)

前添加查詢 "結束
$checklogin = mysqli_query($con, "SELECT * FROM students WHERE sid='".mysqli_real_escape_string($_POST['sid'])."' AND password='".mysqli_real_escape_string($_POST['password'])."' "); 
+0

我仍然收到相同的錯誤。 我建議將所有的mysql函數改爲mysquli。 –

+0

您是否提交了表單,'$ _POST ['sid']'和'$ _POST ['password']'沒有設置,這就是爲什麼你無法從代碼啓動 –