2017-06-02 112 views
-5

我如何獲取登錄腳本以檢查腳本我沒有看到任何錯誤的腳本可以幫助我解決或指出我的錯誤我的php/mysql腳本在嘗試登錄時無法正常工作

<?php 
$conn = mysql_connect("localhost","root","") or die("could not connect to server"); 
mysql_select_db("users",$conn) or die("could not connect to database"); 
?> 
<?php 
if (isset($_POST['save'])){ 
ob_start(); 
$UserName = clean($_POST['UserName']); 
$Password =(md5($_POST['Password'])); 

    $qry="SELECT FROM userstable WHERE UserName='$UserName' AND Password='$Password' AND status=1"; 
    $result=mysql_query($qry); 

if($result) { 
     if(mysql_num_rows($result) > 0) { 
      session_regenerate_id(); 
      $member = mysql_fetch_assoc($result); 
      session_start(); 
      $_SESSION['SESS_MEMBER_ID'] = $member['id']; 
      $_SESSION['loggedin'] = 1; 
      session_write_close(); 
      header("location: home.php"); 
     }else {header("location: login.php"); exit(); } 
    }else { die("Query failed");} 
} 
?> 
+2

什麼錯誤?現在停止使用mysql..use mysqli。並錯誤地使用md5功能。 –

+3

**使用不推薦使用的'mysql_ *'API停止**。使用'mysqli_ *'或'PDO' – Jens

+1

瞭解準備好的語句以防止SQL注入 – Jens

回答

1

你缺少這在SQL「*」語句不過是更安全,你必須修復要內選擇列您的聲明

$qry="SELECT UserName, Password FROM userstable WHERE UserName='$UserName' AND Password='$Password' AND status=1"; 
    $result=mysql_query($qry); 

但請停止使用depreca特德mysql_ * API。使用mysqli_ *或PDO

您可以使用此

<?php 
if (isset($_POST['save'])){ 
session_start(); 
if(isset($_SESSION['SESS_MEMBER_ID']) && $_SESSION['SESS_MEMBER_ID']!=''){header("Location:home.php");} 
$dbh=new PDO('mysql:dbname=dbname;hostdbhost', 'dbusername', 'dbpassword');/*Change The Credentials to connect to database.*/ 
$username=$_POST['username']; 
$password =(md5($_POST['pass'])); /*Encrpt your password with md5.*/ 
if(isset($_POST) && $username!='' && $password!=''){ 
$sql=$dbh->prepare("SELECT id,password,username FROM tablename WHERE username=?"); 
$sql->execute(array($username)); 
while($r=$sql->fetch()){ 
    $p=$r['password']; 
    $u=$r['username']; 
} 

if($p==$password){ 
      $_SESSION['SESS_MEMBER_ID']=$id; 
      $_SESSION['SESS_USERNAME'] = $u; 

    header("Location:home"); 
}else{ 
    header("Location: login.php?error=1"); 
} } 
} 

?> 
1

你錯過,你要選擇的列:

SELECT col1, col2 , ... FROM userstable WHERE UserName='$UserName' AND Password='$Password' AND status=1"; 

停止使用不贊成mysql_* API。使用mysqli_*PDO

瞭解準備好的語句以防止SQL注入。

同時檢查是否存在錯誤執行的SQL函數選定的表的

+0

這是一個非常有用的信息,你只是回滾 –

+0

@MasivuyeCokile比添加它作爲評論的問題,而不是改變我的答案 – Jens

+0

我沒有改變你的答案,我改進了它,有一個功能在這裏,以改善答案..在最後這是一個社區網絡。 –

1

選擇至少一列之後。

SELECT col1, col2 , ... 
FROM userstable 
WHERE UserName='$UserName' AND Password='$Password' AND status=1"; 

還修正您的md5函數。

改變這種

$Password =(md5($_POST['Password'])); 

$Password =md5($_POST['Password']);