PDO连接登录

时间:2015-04-18 12:40:06

标签: php mysql pdo

请你帮我解决这个问题。我不知道自己做错了什么。我与数据库的连接工作正常,但我无法登录。

的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没找到任何东西。它跳转到输入的用户名/密码组合不正确!随时。如果我将用户名或/和密码留空或者输入正确的用户名和密码总是相同的结果。

3 个答案:

答案 0 :(得分:1)

我发帖是因为这是一个解决OP代码无法解决的真正问题的答案。

首先,bname中的拼写错误在您的连接中应显示为dbname

现在,您正在将MySQL API与mysql_函数和PDO混合使用。

  • 这些不同的API不会相互混合。

你在评论中说:

  

&#34;欢迎您将我的代码转换为PDO。我可以理解这段代码已经混淆但不知道如何修复它。&#34;

  • 我不喜欢或者听起来像是坏人&#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');

?>