質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • PHP

    20782questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    9255questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • HTML5

    4161questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • SQL

    2468questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • teratail

    415questions

    teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

「こんにちは、●●さん」

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 880

b1ackc0ffee

score 197

楽天や、yahooみたいにメールアドレスと、パスワードを入れたら、
「こんにちは、●●さん」みたいに、●●の部分に自分の名前が文字で入るじゃないですか。
ログイン画面で渡しているのは、メールアドレスと、パスワードなのにそれに関連する●●を表示させるのってどうしたら良いのでしょうか。

現在のコードは全て
https://teratail.com/questions/12552
に貼っています。

ログインの際にメールアドレスを用意した変数に入れて、SELECTでDBから取得する際の条件式で、一致させるのでしょうか?

途中まで書いてみました。
イメージ説明
わかりづらくてすみませんが宜しくお願い致します。
イメージ説明
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

ログイン成功時にユーザ情報(account)をセッションに保存して、それを基に表示するのが一般的かと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/15 14:12

    回答ありがとうございます^^
    authorization.php の認証プログラム
    ------------------------------
    <?php
    require_once 'Auth/Auth.php';
    // ↓ログインページを表示させる関数
    function login(){
    require_once 'login.php';
    }
    // ↓認証を実行する
    // ↓何で認証するかを指定
    $params=array(
    'dsn' => 'mysqli://newbbsuser:newbbspass@localhost/newbbs',
    'table' => 'account',
    'usernamecol' => 'mailaddress',
    'passwordcol' => 'pwd'
    'db_fields' => '*');
    // ↓認証済みか判定し、していなければログインページに
    // 決まった値 => DBに合わせる
    // 後で使うstartのために、何をスタートさせるか、それに必要な情報をインスタンス化
    $auth = new Auth('MDB2', $params, 'login');
    // new Auth(ドライバー名, 認証に必要なパラメータ, ログイン関数);
    $auth->start();
    // ↓未認証の場合は処理を終了
    if (!$auth->checkAuth()) {
    print("※メールアドレスもしくはパスワードが間違っています。");
    }
    ------------------------------
    で、ログイン成功後は、トップページに遷移するようにしているのですが、
    どこで、セッション保存すれば宜しいでしょうか。
    宜しくお願い致します。

    キャンセル

  • 2015/07/15 16:03 編集

    認証がOKの時($auth->checkAuth()がtrue)
    if (!$auth->checkAuth()) {
    }else{
    //ここでsessionに書込む
    $_SESSION['user'] = ユーザ情報
    }
    ------
    frameset.php側で$_SESSIONからユーザ情報を取り出して
    $user = $_SESSION['user'] ;
    htmlで
    <?php print $user['ユーザ名'];?>
    とすれば良いのではないでしょうか?

    知っていれば余計なお世話ですが
    sessionを使うには、session_start()をする必要があります。
    http://php.net/manual/ja/session.examples.basic.php

    ログアウト時にsessionを削除する事もお忘れなく。

    キャンセル

  • 2015/07/15 16:43

    icham様
    ご返信有難うございます。

    以前、
    if (!$auth->checkAuth()) {
    print("※メールアドレスもしくはパスワードが間違っています。");
    }
    }else{
    $displayName = $auth->getname();
    print("$displayName"."さん、こんにちは。<br>");
    print("<a href=\"logout.php\">ログアウトする</a>");
    }
    という風に書いていて、function login(){
    require_once 'login.php';
    }
    とどちらが優先されるかを試したりしていたのですが、後者だけが実行されたので、
    else{}はスルーされるのかと思っていました。

    $_SESSION['user'] = ユーザ情報の、
    user部分は何に当たるのでしょうか?
    このまま書いてしまったらだめですよね?素人の質問ですみません。


    その細かい配慮が、心に沁みます。有難うございます。

    ・manualにセッションを手動で開始するには session_start() 関数を使います。
    とありますが、手動以外の方法ってあるのでしょうか?

    ------------------------------
    <?php
    require_once 'Auth/Auth.php';
    // ↓ログインページを表示させる関数
    session_start();
    function login(){
    require_once 'login.php';
    }
    // ↓認証を実行する
    // ↓何で認証するかを指定
    $params=array(
    'dsn' => 'mysqli://newbbsuser:newbbspass@localhost/newbbs',
    'table' => 'account',
    'usernamecol' => 'mailaddress',
    'passwordcol' => 'pwd',
    'db_fields' => '*'
    );
    // ↓認証済みか判定し、していなければログインページに
    // 決まった値 => DBに合わせる
    // 後で使うstartのために、何をスタートさせるか、それに必要な情報をインスタンス化
    $auth = new Auth('MDB2', $params, 'login');
    // new Auth(ドライバー名, 認証に必要なパラメータ, ログイン関数);
    $auth->start();
    // ↓未認証の場合は処理を終了
    if (!$auth->checkAuth()) {
    print("※メールアドレスもしくはパスワードが間違っています。");
    }
    }else{
    $_SESSION[]
    ------------------------------
    宜しくお願い致します。

    キャンセル

  • 2015/07/15 17:34

    elseが処理される条件であればelseがスルーされることはありません。
    ”後者だけ”というのがlogin関数を指すのでしたら認証NGだっただけなのではないですか?
    $auth = new Auth('MDB2', $params, 'login');
    ここの第3引数で指定してるのが、認証NGの時に実行する関数名となるので
    elseに入る前に”$auth = new Auth('MDB2', $params, 'login');”の処理で未認証となり
    ログインに遷移しているのだと思います。
    ※Authパッケージ?は使ったことないので違っていたら、ごめんなさい。

    $_SESSION['user'] = ユーザ情報 に関しては
    $_SESSION['username'] = $auth->getAuthData("name");
    とかになると思います。

    require_onceで 'frameset.php'を読み込んでるので
    単発での描画で名前を表示でしたら$_SESSIONを介する必要もないですね。
    リロードした後も名前を表示したいのでしたらSESSIONを使ってください。

    キャンセル

0

このライブラリだとgetAuthDataを使ってほかのカラムのデータも取得できるみたいです。

http://www.phpbook.jp/pear/pear_auth/index9.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/14 20:46

    多分これでいいかと

    こんにちは、<?php echo htmlspecialchars(auth->getAuthData("name")); ?>さん

    キャンセル

  • 2015/07/15 14:09

    リンクとアドバイス有難うございます★
    <?php

    if ($auth->getAuth()){
    print($auth->name);
    $name = $auth->getAuthData("name");
    print("こんにちは");
    print("$name);
    print("さん");
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8" />
    <title>NEW掲示板</title>
    </head>
    <body>
    <?php
    echo('<a href="logout.php" target="_top">ログアウトする</a>');
    echo("こんにちは、"."$displayName"."さん。");
    echo htmlspecialchars(auth->getAuthData("name"));
    ?>
    <h3>ようこそNEW掲示板へ</h3>
    <form method="POST" action="guest_write.php" target="frame2">
    <div id="container">
    <label for="name">名前:<label>
    <input type="text" id="name" name="name" size="20" maxlength="30" />
    </div>
    <div id="container">
    <label for="body">本文:</label>
    <input type="text" id="body" name="body" size="70" maxlength="255" />
    </div>
    <input type="submit" value="送信" />
    </form>
    </body>
    </html>
    いろいろ試して、上記のように書きましたが、

    Parse error: syntax error, unexpected ''db_fields'' (T_CONSTANT_ENCAPSED_STRING), expecting ')' in C:\xampp\htdocs\bbs\new_bbs\authorization.php on line 15
    というエラーが出てしまいました。
    認証用のプログラムで、認証が通ったら違うページにいくように、actionで設定しているのですが、違うページでも、
    $params=array(
    'dsn' => 'mysqli://newbbsuser:newbbspass@localhost/newbbs',
    'table' => 'account',
    'usernamecol' => 'mailaddress',
    'passwordcol' => 'pwd'
    'db_fields' => '*');
    と書かないといけないでしょうか。
    素人の質問で申し訳ありません。
    宜しくお願い致します。

    キャンセル

  • 2015/07/15 19:38

    「Parse error: syntax error,」
    これは構文エラーです。
    引数の型が違うとか、定義されていない変数が使われているとか、そういうエラーの以前に、コードの書き方が間違っているときにおこります。(カッコが足りなかったり、逆に多く書いたり、セミコロンをちゃんと書いていなかったり、プログラムとして解釈できない部分があるときに起こります)
    今回は「'passwordcol' => 'pwd'」のあとに「,」を書き忘れているので、エラーが起きています。
    英語が得意でなくても「C:\xampp\htdocs\bbs\new_bbs\authorization.php on line 15 on line 15」でエラーが出ている行がauthorization.phpの15行目であることぐらいは分かると思うので、エラーが出たら指定の行周辺を調べてください。

    あと私が書いた<?php echo htmlspecialchars(auth->getAuthData("name")); ?>さん
    はauthの前に$を書き忘れているので、気をつけてください。




    $params=array(
    'dsn' => 'mysqli://newbbsuser:newbbspass@localhost/newbbs',
    'table' => 'account',
    'usernamecol' => 'mailaddress',
    'passwordcol' => 'pwd'
    'db_fields' => '*');

    が他のページに必要かですが、このライブラリは使ったことがないので確実ではありませんが、少なくとも、テーブル内のデータとかを$authgetAuthData("name")等で使う必要がある以上はその設定に'db_fields' => '*'が必要なので、どのページでも必要な気がします。

    ログイン情報はセッションで持っているはずなので、無理やりやれば、書く必要はなくなるかもしれませんが、別ファイルに保存して呼び出した方がいいと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20782questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    9255questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • HTML5

    4161questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • SQL

    2468questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • teratail

    415questions

    teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。