gpt4 book ai didi

php - 简单的登录脚本返回错误

转载 作者:行者123 更新时间:2023-11-29 08:08:41 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows etc... expects parameter 1 to be resource

(31 个回答)


7年前关闭。




我正在尝试编写一个没有注册功能的小型 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));

Thew DB-连接部分:

博客.php
<?php 

require 'functions.php';
require 'db.php';

// Connect to the db
$conn = Blog\DB\connect($config);
if ( !$conn ) die('Problem connecting to the db.');

db.php
<?php namespace Blog\DB;

require 'config.php';

function connect($config)
{
try {
$conn = new \PDO($config['DB_HOST'],
$config['DB_USERNAME'],
$config['DB_PASSWORD']);

$conn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

return $conn;
} catch(Exception $e) {
return false;
}
}

config.php
<?php

// Database configuration
$config = array(
'DB_HOST' => 'mysql:host=localhost;dbname=blog',
'DB_USERNAME' => 'YourUsername',
'DB_PASSWORD' => 'YourPassword'
);

问题是脚本返回错误消息:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /var/www/login.php on line 16
你能告诉我如何解决这个问题吗?

好像是 incredibly difficult找到一个体面的教程,向初学者解释如何使用干净的程序编程实践(不是 OOP)在 PHP 中构建一个简单但安全的登录脚本。不幸的是,大多数初学者教程都使用 MD5。你有什么建议吗,例如使用 crypt()/ salt ?

我知道这可能是一个经常出现的问题,但我认为由于缺乏信息和正确编写的分享安全实践的教程,许多初学者正在实现高度不安全的登录脚本。

最佳答案

您的查询失败。 mysql_query返回 false如果查询失败。因此,有关 bool 值的错误消息。

通常你想做这样的事情:

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

至于你关于密码的第二个问题。看看: http://www.php.net/manual/en/faq.passwords.php和: http://php.net/manual/en/function.password-hash.php

(如果您在 Google 上搜索“php 密码”,这实际上是前 2 个结果)。我觉得这些资源不够好,初学者可以考虑在网站上发表评论。我们都在寻求改进。

要带走的重要一点是,您可以指定如何 你希望你的散列算法是。更强的散列算法需要更多的时间来计算。

关于php - 简单的登录脚本返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22175815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com