用户登录脚本:用户可以使用任何用户名和密码登录

时间:2013-02-01 05:43:32

标签: php mysql login login-script

我正在尝试创建一个简单的用户登录系统。但是,我拥有会话和工作的所有东西,但用户登录不使用数据库。我可以输入任何用户名和密码并登录。

这是我的登录页面:

<?php
session_start();


$db_host = "localhost";             // Place the database host here
$db_username = "data_user";  // Place the username for the MySQL database here
$db_pass = "password";          // Place the password for the MySQL  database here
$db_name = "database_name";     // Place the name for the MySQL database here

if (isset($_POST['username']))
{
// MySQL Connection
$db_link = mysql_connect("$db_host","$db_username","$db_pass") or die ("could not connect to mysql. Make sure you have correctly inputed your host, username, and password.");
mysql_select_db("$db_name") or die ("no database could be found.");

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

// MySQL Query
$result = mysql_query("SELECT * FROM users WHERE
username = '$username' AND password = '$password' ");

if(!$result) {
    $_SESSION['error'] = '<span style="color:red">Login Failed</span>';
} else 
    {
    $row = mysql_fetch_assoc($result);
        $_SESSION['userid'] = $row['id'];
        $_SESSION['username'] = $username;
    }
    mysql_close($db_link);
}
header('Location: ./')
?>

我正在使用Bootstraps登录。所以这是我的登录html:

                <div id="login" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-header">
   <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
    <h3 id="myModalLabel">Login</h3>
  </div>
  <div class="modal-body">

    <form class="form-horizontal" action="login.php" method="post">
  <div class="control-group">
    <label class="control-label" for="inputUsername">Username</label>
    <div class="controls">
      <input name="username" type="text" id="inputUsername" placeholder="Username">
    </div>
  </div>
  <div class="control-group">
    <label class="control-label" for="inputPassword">Password</label>
    <div class="controls">
      <input name="password" type="password" id="inputPassword" placeholder="Password">
    </div>
  </div>
  <div class="control-group">
    <div class="controls">
      <label class="checkbox">
        <input type="checkbox"> Remember me
      </label>
    </div>
  </div>
  </div>
   <div class="modal-footer">
    <button type="submit" class="btn btn-primary">Sign in</button>
    </form>
  </div>
</div>

这是使用bootstrap的非常基本的登录。我的登出工作正常,所以这很好,但无论如何,任何人都可以向我解释为什么它没有连接到数据库,你可以使用你能想象的任何用户名和密码登录?

6 个答案:

答案 0 :(得分:5)

if(!$result) {

检查错了。即使没有行,这也将返回有效。如果查询未能执行,则只会导致错误。您应该检查行数,可能使用 mysql_num_rows

$num_rows = mysql_num_rows($result);
if($num_rows!=1)
{
echo "Bad U/P";
}

注意:您停止使用 mysql _ * 功能并转移到mysqli或PDO的时间

答案 1 :(得分:2)

SQL语句

SELECT * FROM users WHERE username = '$username' AND password = '$password'

将在$result的行值将不会为假。

这意味着如果用户名/密码对无效,结果集中没有行。

答案 2 :(得分:0)

使用 PDO Quick tutorial »

$sth = $dbh->prepare( "SELECT `password` FROM `table` WHERE `username` = ?" );

$sth->execute( array( $username ) );

$returned_password = $sth->fetchColumn;

...通过这样的查询,意味着您不需要WHERE password,意味着您不需要索引password列(效率说话)。

-

从结果中,与用户输入的密码进行比较:

if ( $returned_password == $password )
    // OK
else
    // NOT OK

...或者如果您之前将密码存储在某个哈希值中,这是一个非常好的做法:

if ( $returned_password == md5( $password ) )
    // OK
else
    // NOT OK

...至于为什么你当前的剧本允许任何登录,请参阅@Hanky Pankyㇱ的回答。

祝你好运!

答案 3 :(得分:0)

这可能听起来很傻,

但是你真的创建了名为“database_name”和用户“data_user”的数据库吗?

$db_host = "localhost";
$db_username = "data_user";
$db_pass = "password";
$db_name = "database_name";

我相信您没有为数据库输入正确的详细信息。如果没有,请这样做,告诉我们。

答案 4 :(得分:-2)

print_r($row);

打印$ row行时显示的内容会返回数据

答案 5 :(得分:-3)

尝试编辑以下行

$row = mysql_fetch_assoc($result);
        $_SESSION['userid'] = $row['id'];
        $_SESSION['username'] = $username;
    }

$row = mysql_fetch_assoc($result);
        $_SESSION['userid'] = $row[0]['id'];
        $_SESSION['username'] = $username;
    }

因为您使用了mysql_fetch_assoc,结果数组将是行和列的关联数组。

相关问题