PHP登录,从查询/获取数组中获取错误的计数值

PHP登录,从查询/获取数组中获取错误的计数值,php,Php,编辑多亏了下面的评论,我们才发现问题出在md5上,没有一切正常工作。 但是我如何实现md5呢 我在以下代码登录时遇到一些问题。 数据库和注册系统已在运行。 问题在于它在查询中根本找不到任何结果。 如果计数大于0,则应将用户重定向到安全页面。 但这仅在我写入计数>=0时有效,但这应该大于0,只有在找到用户名和密码时,他才应该在登录后被定向到站点的安全(起始页)。 例如,root(用户名)root(密码)已经存在,但我似乎无法使用它正确登录 <?php session_start(); if

编辑多亏了下面的评论,我们才发现问题出在md5上,没有一切正常工作。
但是我如何实现md5呢

我在以下代码登录时遇到一些问题。
数据库和注册系统已在运行。
问题在于它在查询中根本找不到任何结果。
如果计数大于0,则应将用户重定向到安全页面。
但这仅在我写入计数>=0时有效,但这应该大于0,只有在找到用户名和密码时,他才应该在登录后被定向到站点的安全(起始页)。
例如,root(用户名)root(密码)已经存在,但我似乎无法使用它正确登录

<?php
session_start();

if (!empty($_POST["send"]))
{   
$username = ($_POST["username"]);
$password = (md5($_POST["password"])); 
$count = 0;

$con = mysql_connect("localhost" , "root", "");

mysql_select_db("testdb", $con);

$result = mysql_query("SELECT name, password FROM user WHERE name = '".$username."' AND password = '".$password."' ")
    or die("Error select statement");


$count = mysql_num_rows($result);


if($count > 0) // always goes the to else, only works with >=0 but then the data is not found in the database, hence incorrect
{
    $row = mysql_fetch_array($result);

    $_SESSION["username"] = $row["name"];
    header("Location: StartPage.php");
}
else
{
    echo "Wrong login data, please try again";
}

mysql_close($con);    
}

?>

在这种情况下,你能做的最好的事情就是找出问题所在。
因此,您可以按步骤进行并执行以下操作:

1) 使用
print\r($\u POST)
启动脚本,查看POST传递的变量(荒谬的是,问题甚至可能与您拥有的'send'保护参数有关..即通过get发送表单)

2) 将查询分配给变量(…别忘了转义参数!),并将其打印到屏幕上;然后在mysql(或phpmyadmin)上执行它,看看它们给出了什么结果


作为一个旁注,正如某人已经指出的,这个代码可能会受到SQL注入的影响,所以您可以考虑使用准备好的语句;请参见此处:

您的登录代码良好


但是,在将密码存储到数据库中之前,还需要使用md5()函数。因此,在数据库中插入用户记录时,将md5()应用于密码,保存在数据库中。现在,当您尝试在登录时查找记录时,它将正确匹配。

您应该使用mysqli或PDO并使用更新的哈希函数和salt重写此记录。MD5应用非常广泛,是裂解炉的目标

听起来您的查询返回了0行。回显您的查询,并直接在phpMyAdmin或类似文件中运行它,查看是否确实找到了记录。显然,数据不在表中。您是否已尝试打印用户名和密码散列,并将其与表中的用户名和密码散列进行比较,以确保它们正确匹配?(参考)请尝试
joe'或'root'-
对于
$username
,数据库中已存在正确的数据。已经通过SQLjog运行select语句来检查。root(用户名)root(密码)已包含在内。