Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 简单登录脚本返回错误_Php_Mysql_Hash - Fatal编程技术网

Php 简单登录脚本返回错误

Php 简单登录脚本返回错误,php,mysql,hash,Php,Mysql,Hash,我正在尝试编写一个没有注册函数的小PHP登录脚本,它可以从MySQL数据库中调用散列密码我知道MD5不安全。这仅用于学习目的,不用于制作。 <?php include 'blog.php'; session_start(); $status = ''; if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) { $username = mysql_real_escape_string($_POST['username']); $

我正在尝试编写一个没有注册函数的小PHP登录脚本,它可以从MySQL数据库中调用散列密码我知道MD5不安全。这仅用于学习目的,不用于制作。

<?php 

include 'blog.php';

session_start();

$status = '';

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

    $username = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string($_POST['password']); 
    $password = md5($password); 
    $sql      = "SELECT id FROM admin WHERE username='$username' and   passcode='$password'";
    $result   = mysql_query($sql);
    $count    = mysql_num_rows($result);

    if($count==1)
    {
        $_SESSION['username'] = $username;
        header("Location: admin/index.php");
    }
        else 
    {
        $status="Your Login Name or Password is invalid.";
    }

}

view_login("login/login", array("status" => $status));

您的查询失败<如果查询失败,code>mysql\u查询将返回
false
。因此出现了有关布尔值的错误消息

通常,您希望执行以下操作:

$result = mysql_query($query);
if ($result === false) {
    throw new Exception("Query failed: " . mysql_error());
}

至于关于密码的第二个问题。看看:和:

(如果你在谷歌上搜索“php密码”,这是前两个结果)。我觉得这些资源不足以让初学者考虑在网站上留下评论。我们都在寻求改进


重要的一点是,您可以指定希望哈希算法的strong。更强的散列算法需要更多的时间来计算。

根据Doge的建议,我使用相应的PDO等价物对代码进行了如下修改,现在似乎可以工作了。有没有改进加密的方法

<?php 

include 'blog.php';

session_start();

$status = '';

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

    $username   = $_POST['username']; 
    $password   = $_POST['password']; 
    $password   = md5($password); // Encrypted Password

    $stmt       = $conn->query("SELECT id FROM users WHERE username='$username' and password='$password'");
    $row_count  = $stmt->rowCount();

    /*if ($row_count === false) {
        throw new Exception("Query failed: " . mysql_error());
    }*/

    if($row_count==1)
    {
        $_SESSION['username'] = $username;
        header("Location: admin/index.php");
    }
        else 
    {
        $status="Your Login Name or Password is invalid.";
    }

}

view_login("login/login", array("status" => $status));`

连接部分在哪里??好的,我得到了以下异常:
致命错误:未捕获异常“异常”,在/var/www/typewriter/login.php:20堆栈跟踪:#0{main}第20行的/var/www/typewriter/login.php中出现消息“查询失败:未选择数据库”。我不明白,为什么它没有连接到数据库。有什么想法吗?如何增加哈希强度?您已连接到数据库服务器,但没有告诉它要使用哪个数据库(一台服务器可以有多个数据库)。调用
mysql\u选择数据库(“您的数据库”)
选择您的数据库。通常,这是在连接后立即完成的。以后可以更改数据库,但您可能不需要它。请记住,
mysql\u select\u db
也可能失败(如果您指定的数据库不存在)。所以在这里加上结果检查。@RobertRozas我不知道你的意思。你认为我如何才能改进我的答案?@FritsvanCampen。。。现在好多了……从不是哇,到,这样的答案……+1我尝试了以下方法:
//连接到db$conn=Blog\db\Connect($config);如果(!$conn)死亡('连接到数据库时出现问题')$db_selected=mysql_select_db('blog',$conn);如果(!$db_selected){die('Problem connecting to blog:'.mysql_error());}
并获得此错误:
警告:mysql_select_db()希望参数2是资源,在/var/www/blog.php第10行给出的对象连接到blog时出现问题:
<?php

// Database configuration
$config = array(
    'DB_HOST'       =>  'mysql:host=localhost;dbname=blog',
    'DB_USERNAME'   =>  'YourUsername', 
    'DB_PASSWORD'   =>  'YourPassword'
);
$result = mysql_query($query);
if ($result === false) {
    throw new Exception("Query failed: " . mysql_error());
}
<?php 

include 'blog.php';

session_start();

$status = '';

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

    $username   = $_POST['username']; 
    $password   = $_POST['password']; 
    $password   = md5($password); // Encrypted Password

    $stmt       = $conn->query("SELECT id FROM users WHERE username='$username' and password='$password'");
    $row_count  = $stmt->rowCount();

    /*if ($row_count === false) {
        throw new Exception("Query failed: " . mysql_error());
    }*/

    if($row_count==1)
    {
        $_SESSION['username'] = $username;
        header("Location: admin/index.php");
    }
        else 
    {
        $status="Your Login Name or Password is invalid.";
    }

}

view_login("login/login", array("status" => $status));`