请你帮我解决这个问题。我不知道自己做错了什么。我与数据库的连接工作正常,但我无法登录。
的login.php
<?php
session_start();
$username= $_POST["username"];
$password= $_POST["password"];
include("/inc/connect.inc.php");
if(!isset($conn)){
$conn = null;
header('Location: index.php');
}
else{
$query = $conn->prepare("SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password'");
$query ->execute(array(':username' =>$username, ':password' =>$password)
);
if ( ($query->rowCount() == 0) && ( ($password == null) or ($username == null) ) ){
echo "<h3>Please enter your username and password</h3>";
$conn = null;
header("Refresh: 3;URL=index.php");
}
else if ($query->rowCount() == 1)
{
$_SESSION['user_logged'] = $_POST['username'];
unset($username);
unset($password);
echo "<h3>Your password is correct</h3>";
$conn = null;
header("Refresh: 3;URL=interface.php");
}
else {
echo "<h3>The username / password combination entered is incorrect!</h3>";
unset($username);
unset($password);
$conn = null;
header("Refresh: 3;URL=index.php");
}
}
?>
以前我没有理解 stackoverflow 规则。我希望这次我的问题更加准确。我已经做了很多工作来达到这一点,现在只有登录我的数据库的问题。我的$query = $conn->prepare
没找到任何东西。它跳转到输入的用户名/密码组合不正确!随时。如果我将用户名或/和密码留空或者输入正确的用户名和密码总是相同的结果。
答案 0 :(得分:1)
我发帖是因为这是一个解决OP代码无法解决的真正问题的答案。
首先,bname
中的拼写错误在您的连接中应显示为dbname
。
现在,您正在将MySQL API与mysql_
函数和PDO混合使用。
你在评论中说:
&#34;欢迎您将我的代码转换为PDO。我可以理解这段代码已经混淆但不知道如何修复它。&#34;
mysql_
代码转换为PDO,而是您的代码。我们不会在Stack上转换代码,我们会帮助解决有问题的代码。 有很多教程可供您学习和使用。
以下是一些,您可以进一步研究Stack / Google:
PHP.net上还有手册
在堆栈上:
关于密码的MD5:
$password = md5($password);
MD5已经过时,被认为已损坏,不再可以安全地用于密码存储。
我建议您使用CRYPT_BLOWFISH或PHP 5.5&#39 {s} password_hash()
功能。对于PHP&lt; 5.5使用password_hash() compatibility pack
。
&#34;我的屏幕空白。有什么想法吗?&#34;
关于&#34;空白屏幕&#34;。
这意味着您有语法错误。
执行error_reporting(0);
表示&#34;关闭所有错误报告&#34;
根据PHP.net上的手册
您需要做的是打开错误报告,而不是关闭。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告应仅在暂存时完成,而不是生产。
答案 1 :(得分:0)
第1步。改变
$conn = new PDO('mysql:host=localhost;bname='.$database.'charset=utf8',$username,$password);
到
$conn = new PDO('mysql:host=localhost;dbname='.$database.';charset=utf8',$username,$password);
位2st。你在一个项目中使用mysqli和pdo。为了什么?
答案 2 :(得分:0)
如果您查看连接字符串,则会出现拼写错误:
查看此处的示例http://php.net/manual/en/pdo.connections.php
更新:你似乎完全迷失了,所以我会一步一步地将代码和事情的原因不起作用。我写的代码将填充echo和print语句。
1。)您需要检查数据库连接,但没有代码可以执行此操作。连接可能没问题,但PHP不会抛出错误。
try
{
$conn = new PDO('mysql:host=localhost;dbname=' . $database . 'charset=utf8', $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(is_object($conn) && $conn != false)
{
echo "I'm connected. PDO is ready and willing";
}
else
{
echo "Sorry something went horribly wrong! Not connected to database";
{
}
catch(PDOException $e)
{
throw new pdoDbException($e);
echo die('Error Message:'.$e->getMessage());
}
2。)看起来您的连接无法正常工作,因为没有任何函数正在调用连接。创建的连接对象不在函数范围内。
function user_exists($username)
{
global $conn; // bring the connection object into scope
$username = sanitize($username);
$query = $conn->prepare("SELECT COUNT(user_id) FROM users WHERE username = :username");
$query ->execute(array(
':username' =>$username
));
$user = $query->fetch(PDO::FETCH_ASSOC);
return $user. ' exists in database';
}
3。)有很多代码,但没有一个函数看起来像是在运行时被调用。用户测试存在,如果数据库连接在运行时在init.php文件中工作
<?php
session_start();
require 'database/connect.php';
require 'functions/general.php';
require 'functions/users.php';
$errors = array();
// call a function to check if user exists.
echo user_exists('user_123');
?>