2012-12-20 119 views
0

这是我的代码,由于某种原因,它总是返回密码不正确。我不确定我是否在某个地方忘了支架,我怎样才能让它更安全,因为现在我正在使用_post功能。登录会话问题

<?php 
    include 'config.php'; 

    session_start(); 
    session_destroy(); 
    session_start(); 

    $UserName = $_POST['UserName']; 
    $PassWord = $_POST['PassWord']; 

    if ($UserName&&$PassWord) 
    { 
    mysql_select_db("SegmentMath") or die ("Couldn't find database sorry."); 
    $query = mysql_query("SELECT * FROM Users WHERE UserName='$UserName'");  
    $numrows = mysql_num_rows($query); 

    if ($numrows!=0) 
    { 
     // code to login 
     while ($row = mysql_fetch_assoc($query)) 
     { 
     $dbUserName = $row['UserName']; 
     $dbPassWord = $row['PassWord']; 
     } 

     //check to see if they match! 
     if ($UserName==$dbUsername&&$PassWord==$dbPassWord) 
     { 
     $_SESSION['UserName']=$dbUsername; 
     $_SESSION['PassWord']=$dbPassWord; 

     echo "<p>Finished Software</p>"; 
     } 
     else 
     { 
     echo "Incorrect Password"; 
     } 
    } 
    else die("Sorry username not found!"); 
    } 
    else die("Please Enter A Valid Username And Password!"); 
?> 

所以我几乎是积极的我做了一些愚蠢的错误,它让我陷入了将近30分钟。这个文件只是login.php,所以基本上,如果用户在login.html页面上输入用户名和密码,它会将该数据推送到此页Login.Php

我很困惑,为什么它说不正确的密码,即使登录是正确的,并在数据库中。

+1

您为什么这样,毁灭和顶部开始会话? o.o – tradyblix

+0

['session_destroy'](http://php.net/session_destroy)**删除所有'$ _SESSION'数据**。你为什么这样做?这是你在某个地方拾起来的某种货物邪教复制粘贴吗? – Charles

+0

你可以逐步调试..从顶部打印主变量$? –

回答

-1

您需要先连接到数据库。使用mysql_connect()

另请注意,此功能正在折旧,建议使用mysqli或PDO。在上面的链接中有链接。

+0

我应该已经连接,因为包括config.php –

+0

啊。我看到......你是否尝试回显你的'$ numrows'来查看你是否从数据库中得到任何结果? – SnareChops

0

您可能在存储密码时使用了一些加密。因为如果你使用md5()例如(只是一个例子,MD5是不是最好的密码),你应该检查是这样的:

if ($UserName == $dbUsername && md5($PassWord) == $dbPassWord) 
{ 
2

我会说,这是更好地利用这一点,我的意思是创建查询其找到usernamepassword

$login = mysql_query("SELECT * FROM users WHERE ID='". $UserName ."' AND PASSWORD='". md5($PassWord) ."'); 
$row=mysql_fetch_array($login); // fetch row 
if($row!=null) // if found row 
{ 
$_SESSION['UserName'] = $row['UserName']; // store in session 
$_SESSION['PassWord'] = $row['PassWord']; 
} %> 

,而不是

if (($UserName==$dbUsername)&&($PassWord==$dbPassWord)) 
{ 

$_SESSION['UserName']=$dbUsername; 
$_SESSION['PassWord']=$dbPassWord; 

echo "<p>Finished Software</p>"; 

} 
+0

'=='先于'&&'任何方式 –

1

你在你的代码中的错字。 PHP中的变量是区分大小写的...

19.  while ($row = mysql_fetch_assoc($query)) 
20.   { 
21.    $dbUserName = $row['UserName']; 
22.    $dbPassWord = $row['PassWord']; 
23.   } 
24.  
25.   //check to see if they match! 
26.   if ($UserName==$dbUsername&&$PassWord==$dbPassWord) 

变量上线不匹配就行。

$dbUserName是不一样的$dbUsername

0
if ($UserName==$dbUsername <= capitalize $dbUserName) 
{ 
    //YOUR LOGIC 
} 
+0

这就是CamelCase。 –

0
if ($UserName==$dbUsername&&$PassWord==$dbPassWord) 
     { 
     $_SESSION['UserName']=$dbUsername; 
     $_SESSION['PassWord']=$dbPassWord; 

     echo "<p>Finished Software</p>"; 
     } 
     else 
     { 
     echo "Incorrect Password"; 
     } 

1)。它在其他条件去..所以你可以重复这四个$变量给我吗?从$ _ POST

2)卸下摆臂空间与str_replace函数

0

我认为你错了代码时。会话启动后,您不应该将会话销毁。首先,让session_start()开始会话;

session_start(); 

$username = $_POST['username']; 
$password = $_POST['password']; 

$query = "SELECT * FROM table_name WHERE username = '$username'"; 
$result = mysql_query($query); 
$count = mysql_num_rows($query); 
$row = mysql_fetch_assoc($result); 

if($count == 0) 
{ 
//if there is no result 
} 
$dbpassword = $row['password']; 
if($dbpassword == $password) 
{ 
//put some session here 
} 
else 
{ 
//if the password is not match 
} 

我希望这可以帮助