Php 简单登录脚本返回错误
我正在尝试编写一个没有注册函数的小PHP登录脚本,它可以从MySQL数据库中调用散列密码我知道MD5不安全。这仅用于学习目的,不用于制作。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
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));`