1

こんにちは、作成した CMS で複数のユーザーを作成しようとしています。テーブルにすべてのデータがありmysql_num_rows、レコードが一致するかどうかを確認してsession_register()から、セッションを設定するために使用していました。これを PDO コマンドに変更しました。

ユーザーが CMS を使用しているときにユーザーを追跡できるようにして、変更されたすべてのレコードに usrID を関連付けられるようにしたいと考えています。後日、誰が更新を行ったかを確認し、最終的にこれを使用して作成者などに関する情報を表示できるようにします。

たとえば、フォームを使用して新しいレコードを更新または追加する場合、非表示の入力にセッション ID がエコーされ、ログイン時にユーザー レコードから取得されます。

これを行う最善の方法はありますか?このログイン コードの構文は正しく記述されていますか?

$con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$sql="SELECT * FROM $tbl_name WHERE the_username='$the_username' and the_password='$the_password'";

$result = $con->prepare($sql); 
$result->execute(); 
$number_of_rows = $result->fetchColumn();

if($number_of_rows==1){
    $info = $result->fetch(PDO::FETCH_ASSOC);
    $_SESSION['username'] = $info['the_username'];
    $_SESSION['id'] = $info['id'];
    header('Location: admin.php');
}else{
echo "Wrong username or password, please refresh and <a href=\"login.php\">try again.</a>";
}

入れたほうがいいのではないでしょうか?

if($number_of_rows==1 && $info = $result->fetch(PDO::FETCH_ASSOC)){MAKE SESSION}
4

2 に答える 2

1

あなたの PDO 関数の使い方はかなり一貫性がなく、いくつかのエラーにつながります。

まず、同じデータを 2 回取得することはできません。実際のところ、そのような二重フェッチはまったく必要ありません。

また、何らかの理由で、PDO を使用する唯一の理由である準備済みステートメントを使用していません。したがって、適切なコードは次のようになります

$sql="SELECT * FROM $tbl_name WHERE the_username=? and the_password=?";
$result = $con->prepare($sql); 
$result->execute(array($the_username,$the_password)); 
# $number_of_rows = $result->fetchColumn(); <- don't need that
$info = $result->fetch();
if($info){
    $_SESSION['username'] = $info['the_username'];
    $_SESSION['id'] = $info['id'];
    header('Location: admin.php');
}else{
    echo "Wrong username or password, please refresh and <a href=\"login.php\">try again.</a>";
}
于 2013-04-23T11:15:37.523 に答える
0

はい、コードとロジックは正常に動作します。ただし、新しいバージョンの PHP では非推奨になっている session_register() は使用しないでください。

于 2013-04-23T10:25:43.683 に答える