2012-11-29 89 views
-1

我将此登录脚本更改为PDO。现在它通过用户名,但得到卡住fetchAll线。我需要帮助。感谢PDO登录脚本不起作用

<?php 
session_start(); 
include_once"includes/config.php"; 

if (isset($_POST['admin_login'])) { 
    $admin_user = trim($_POST['admin_user']); 
    $admin_pw = trim($_POST['admin_pw']); 

    if ($admin_user == NULL OR $admin_pw == NULL) { 
    $final_report.="Please complete all the fields below.."; 
    } else { 
    $check_user_data = $db->prepare("SELECT * FROM `admin` 
     WHERE `admin_user`='$admin_user'"); 
    $check_user_data->execute(); 

    if ($check_user_data->fetchColumn() == 0) { 
     $final_report.="This admin username does not exist.."; 
    } else { 
     $get_user_data = $check_user_data->fetchAll($check_user_data); 

     if ($get_user_data['admin_pw'] == $admin_pw) { 
     $start_idsess = $_SESSION['admin_user'] = "".$get_user_data['admin_user'].""; 
     $start_passsess = $_SESSION['admin_pw'] = "".$get_user_data['admin_pw'].""; 
     $final_report.="You are about to be logged in, please wait a few moments..."; 
     header('Location: admin.php'); 
     } 
    } 
    } 
} 
?> 

回答

2
  • 不检查返回值准备()或执行()为false。您需要检查SQL错误并处理它们,停止代码而不是继续。

  • 不在预处理语句中使用查询参数,仍然不安全地插入$ _POST内容到查询中。您错过了切换到PDO的好处,并使自己容易受到SQL注入攻击。

  • 您正在以明文存储密码,这是不安全的。请参阅You're Probably Storing Passwords Incorrectly

  • 你真的需要SELECT *如果你只使用admin_pw列?提示:不。

  • PDOStatement::fetchAll()返回一个数组数组,而不仅仅是一个数组。阅读fetchAll()的文档中的示例。

+0

我是新的PDO,我应该如何改变它的工作原理。谢谢 – user1858570

+0

@ user1858570阅读一些教程可帮助您掌握PDO的优势。把我的头顶部(当然,收藏夹列表,但无论如何),我可以推荐http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers –

+0

感谢,它看起来非常有用的文章,但我不知道如果我能得到我的脚本改变了我需要的方式。 – user1858570