[英]php wont connect to mysql and query for user/pass
我正在嘗試使php / mysql正常工作,以便它將表單中的用戶名和密碼用於mysql表中。 如果它們在表中,則應該登錄並發送到index.php頁面(我更改了user / pass / database)
登錄頁面上的表單:
<form action="db_connect.php" method="post">
<input type="text" name="username" placeholder="Username" />
<input type="password" name="password" placeholder="Password" />
<input type="submit" value="Login" class="customButton" />
</form>
db_connect.php:
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$con = new mysqli_connect("localhost","user","password","database");
$query = mysqli_query($con,"SELECT * FROM members WHERE username='".$username."' AND password='".$password."'");
if (mysqli_num_rows($query) != 0){
$_SESSION['logged_in'] = true;
header('Location: index.php');
}else{
echo "Access denied";
}
?>
我的想法:
您的查詢可以是
$query = mysqli_query($con,"SELECT * FROM members WHERE username = '$username'");
避免錯誤。
在管理會話之前使用session_start()
另外,請嘗試在您的數據庫工具(例如Phpmyadmin,HeidiSQL等)上鍵入此查詢,然后查看是否有任何結果。
如果可以,則可以嘗試使用PDO對象創建與數據庫的連接。
提交表單或PHP轉儲日志時,是否收到“拒絕訪問”信息?
此代碼應為您工作。
登錄頁面:
<form action="db_connect.php" method="POST">
<input type="text" name="username" placeholder="Username" />
<input type="password" name="password" placeholder="Password" />
<input type="submit" value="Login" class="customButton" />
</form>
在PHP文件中,我們首先開始一個新的會話,然后報告所有錯誤(如果生成的話),然后轉義輸入字符串以避免注入,然后檢查是否設置了通過$ _POST發送的用戶名和密碼。 然后使用我們的數據庫檢查輸入值,最后將用戶重定向到他的個性化index.php
db_connect.php
<?php
session_start();
error_reporting(E_ALL); ini_set('display_errors', 1);
$con = mysqli_connect("localhost","user","password","database");
$username = $_POST['username'];
$password = $_POST['password'];
$username = mysqli_real_escape_string($con, $username);
$password = mysqli_real_escape_string($con, $password);
if(isset($username) && isset($password)){
$query = mysqli_query($con,"SELECT * FROM members WHERE username='".$username."' AND password='".$password."'");
if (mysqli_num_rows($query) > 0){
$_SESSION['logged_in'] = $user;
header("location: index.php");
}else{
echo "Access denied";
} } else { header("location: login.php"); }
?>
打開錯誤報告以幫助調試此問題。
<?php
error_reporting(E_ALL);
ini_set('display_errrors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
?>
對所有AND用戶輸入進行消毒。 由於您正在使用mysqli()
,因此將使用類似mysqli_real_escape_string()
東西。
正如弗雷德-ii-所說 ,現在馬上就有一個明顯的錯誤。 由於您正在處理會話,因此需要首先實例化它。
例如,將這樣的內容放入您的登錄腳本。
<?php
session_start();
?>
現在第二個錯誤是您正在嘗試/嘗試將mysqli_connect()
實例mysqli_connect()
一個類, mysqli_connect()
並非如此。 您的登錄代碼應如下所示:
<?php
session_start();
$con = mysqli_connect("localhost", "user", "password", "database") or die(mysqli_error($con));
$username = $_POST['username'];
$password = $_POST['password'];
$username = mysqli_real_escape_string($con, $username);
$password = mysqli_real_escape_string($con, $password);
if (isset($username) && isset($password)) {
$query = mysqli_query($con, "SELECT * FROM members WHERE username='" . $username . "' AND password='" . $password . "'");
if (mysqli_num_rows($query) > 0) {
$_SESSION['logged_in'] = true;
header("location: index.php");
} else {
echo "Access denied";
}
}
?>
不用說,您的index.php
將在其頂部需要session_start()
,以確保您可以像這樣檢查$_SESSION['logged_in']
:
<?php
session_start();
if(!$_SESSION['logged_in']) {
die('login.php');
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.