2017-06-02 109 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']);