-1

このログイン スクリプトを PDO に変更しました。これでユーザー名が渡されますが、fetchAll 行が動かなくなります。助けが必要です。ありがとう

<?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');
      }
    }
  }
}
?> 
4

1 に答える 1

2
  • の戻り値の prepare() または execute() をチェックしていませんfalse。SQL エラーをチェックして処理し、そのまま続行するのではなく、コードを停止する必要があります。

  • 準備されたステートメントでクエリ パラメーターを使用せず、安全でないクエリに $_POST コンテンツを補間します。PDO に切り替えるメリットを逃しており、SQL インジェクション攻撃に対して脆弱なままになっています。

  • パスワードをプレーンテキストで保存しているため、安全ではありません。パスワードの保存方法が間違っている可能性がありますを参照してください。

  • admin_pw 列のみを使用する場合、本当に必要SELECT *ですか? ヒント:いいえ。

  • PDOStatement::fetchAll()は、行に対して 1 つの配列だけでなく、配列の配列を返します。ドキュメントの fetchAll() の例を読んでください。

于 2012-11-29T00:25:43.870 に答える