重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

phpでログイン機能を作成したのですが、
ログイン後のページでログインした人の名前を表示することができません。

ご教授頂けますと幸いです。

<?php

$sql = "SELECT * FROM user";
$stmt = $pdo->query($sql);
foreach($stmt as $_SESSION['USERID']){}
echo $_SESSION['USERID']['name'];

?>

例えばこのように記述するとforeachで作成した
最後のレコードのnameが表示されてしまいます。

ログインしているユーザーを特定して、
そのユーザーのnameを表示させたいと思っています。

宜しくお願い致します。

質問者からの補足コメント

  • 回答ありがとうございます。
    でも出来なかったです、、、。

    どのユーザーで試してもなぜか「S」と表示されます。

    ==記述文==

    $sql = sprintf("SELECT * FROM `user` where `id` = %d",$_SESSION['USERID']);
    $res = $pdo->query($sql);
    echo reset($res)['name'];

    ========

    テーブルのカラム名:id,name,mail,password
    idはAUTO_INCREMENTしてます。



    ログイン時は
    $_SESSION['USERID'] = $mail;
    としています。

    お手数をおかけ致しますが、
    教えて頂けると大変助かります。

    宜しくお願い致します。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/06/02 12:53
  • 恥ずかしながらコードをコピペさせて頂きましたが、
    今度はページそのものがエラーになってしまいました。

    こちらの記述はメールアドレスに「s」が入っていなくても良いのでしょうか?

    何度もお聞きして本当に申し訳ないです。

    全てのデータからnameの値は取れるので、
    データベースにはちゃんと繋がっているのですが、、、この箇所で詰まってます。

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/06/02 13:19
  • var_dump($_SESSION);

    //結果
    array(1) { ["USERID"]=> string(3) "c@c" }

    id:12
    name:ccc
    mail:c@c
    password:cccccc

    のテストユーザーでログインした場合の結果です。

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/06/02 13:59
  • phpは7.0です!

      補足日時:2018/06/02 14:00
  • 試してみましたが、「s」という文字のみが表示されます。

    意味無いかもしれませんが、

    var_dump($res)の結果:

    object(PDOStatement)#2 (1) { ["queryString"]=> string(41) "SELECT * FROM `user` where `mail` = 'c@c'" }


    他の手順で間違っているのでしょうか、、、

    No.4の回答に寄せられた補足コメントです。 補足日時:2018/06/02 16:19

A 回答 (5件)

これではどうでしょう。



$sql = sprintf("SELECT * FROM `user` where `mail` = %s", $pdo->quote($_SESSION['USERID']) );
foreach($pdo->query($sql) as $row){
echo $row['name'];
}
    • good
    • 0
この回答へのお礼

出来ました!!

なんとお礼を言って良いのやら、、
本当に、本当にありがとうございます。

ご飯でもご馳走させてほしいところですが、
とりあえずベストアンサーにさせて頂きます!!

ありがとうございました。

お礼日時:2018/06/02 17:30

php7でしたら、これでいけるでしょうか。



$sql = sprintf("SELECT * FROM `user` where `mail` = %s", $pdo->quote($_SESSION['USERID']) );
$res = $pdo->query($sql);
echo reset($res)['name'];
この回答への補足あり
    • good
    • 0

ページそのものがエラーになってしまったのなら、


mysql_real_escape_string() が廃止されたphp7なのかもしれませんね。

var_dump($_SESSION);
で、他に検索条件として使えそうなものは確認できないでしょうか。
この回答への補足あり
    • good
    • 0

> ログイン時は


> $_SESSION['USERID'] = $mail;

$_SESSION['USERID']にはメールアドレスが入ってるんですね。
でしたら、

$sql = sprintf("SELECT * FROM `user` where `mail` = '%s'", mysql_real_escape_string($_SESSION['USERID']));
$res = $pdo->query($sql);
echo reset($res)['name'];

ではどうでしょう。
この回答への補足あり
    • good
    • 0

DBの該当テーブル名がuser、そのテーブルのユーザーIDカラム名がuserid、ユーザー名のカラム名がname、ログインしたユーザーのユーザーIDが$_SESSION['USERID']に入っていると仮定するなら、



$sql = sprintf("SELECT * FROM `user` WHERE `userid` = %d" , $_SESSION['USERID']);
$res = $pdo->query($sql);
echo reset($res)['name'];
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!