***問題已得到解答。這是解決方案:使用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語句。我只是不明白爲什麼。
回顧:我的代碼實際上不會接受正確的學生輸入(或對此不正確),並且不允許用戶登錄。它只是拋出一個錯誤。我的問題是:我的代碼有什麼問題?我的查詢是錯誤的,還是執行會話?
你可以在你的login.php代碼中嘗試'var_dump($ _ POST)'嗎?它會告訴你你的領域是否成功發送。 – andrewsi
第一:你的學校項目是非常錯誤的,並有非常大的安全「漏洞」。最原始的安全事物在這裏被打破了。即使我可以在10秒內接管你的服務器。你的教授/老師應該真正開展一些開發課程! – Sliq
首先,你將'mysql_'與'mysqli_'函數混合在一起,這樣會阻礙事物的發展。 –