違うテーブルの値の取得 - PHPプロ!Q&A掲示板

840

  • 0P

違うテーブルの値の取得

質問日時 / 2007年12月21日 15:43    回答数 / 6件

Questioner:  ktzw3  このエントリーをはてなブックマークに追加 

キーワード / 検索    テーブル    フィールド   

始めまして。
前任が蒸発して火消しに必死な初心者です。
PHP+MySQLで会員認証つきHPを制作しています。

仕様により会員データテーブル(x_member)と
アクター情報テーブル(x_person)に分かれて
個人情報が格納されており、
会員認証時にログインした会員の個人情報(例えば名前とID)を
変数($prsn_name,$prsn_id)にとりたいのですがわからず困っています。
もしおわかりになる方がいらっしゃいましたらお願いします。

認証のコードとテーブル構造は下記の通りです。


function login_check($con, $user_id, $password)
{
   $sql = "select * from x_member where mbr_login_name = '".$user_id."' and mbr_login_pwd = '".$password."'";
   $rst = mysql_query($sql, $con);
   return $rst;
}

if(($user_id!="")&&($password!="")){
   //ログインチェック
   $rst = login_check($con, $user_id, $password);
   $cnt = mysql_num_rows($rst);
   if($cnt==1){
      $login_flg = 1;
      $col = mysql_fetch_array($rst);
      $member_id = $col['mbr_id'];
      $member_mail = $col['mbr_login_name']
//ここにいれたい
//    $prsn_mail =
//    $prsn_id = 
   }
   else{
      $pid = 0;
   }
}


table:X_member
_________________________
|mbr_ID |  password |user_ID(メールアドレス)|
-------------------------
|0001   | aaaaaaaa | AAAA@.....      |
-------------------------
|0002   | bbbbbbbb | BBBB@.....      |
-------------------------
|0003   | CCCCCCCC | CCCC@.....      |
-------------------------
|0004   | DDDDDDDD | DDDD@.....      | 
-------------------------

table:X_person
_______________________
|prsn_ID |  name  |  mail        |・・・・
------------------------
|0001    | 吉田   | AAAA@.....   |・・・・
------------------------
|0002    | 加藤   | XXXX@.....  |・・・・
------------------------
|0003    | 佐藤   | BBBB@.....  |・・・・
------------------------
|0004    | 鈴木   | ZZZZ@.....  |・・・・
------------------------
|0005    | 小倉   | CCCC@.....  |・・・・
------------------------
|0006    | 松本   | DDDD@.....  |・・・・
------------------------

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01kaitauおつかれさまです。 同情を禁じえないので早めに。
┣A02Kanonbellせめてエスケープくらいはつけた状態を教えるべきじゃ
┗A03signalX_member と X_person はどのカラムで連結できますか
 ┗A03-1ktzw3昨日の返信が反映されていないことに今気づきました・
  ┗A03-1-1signal>>CODE <?php function login_check( $con, $user
   ┗A03-1-1-1ktzw3ありがとうございます! 早速試してみます。

回答一覧

並び替え:

A01 参考になった
answererkaitau [12月21日 16:25]

おつかれさまです。

同情を禁じえないので早めに。

member と person テーブルの関連が説明されていないですけど、
仮にX_member.mbr_IDと X_person.prsn_ID が同じものを指すとみなすとすると、
function の中のsqlを

  1. $sql  = "select M.mbr_id as mbr_id ,P.name as prsn_name from x_member M,x_person P ";
  2. $sql .= "  where M.mbr_id = P.prsn_ID and mbr_login_name = '".$user_id."' and mbr_login_pwd = '".$password."'";
とすれば
  1. $prsn_name = $col['prsn_name'];
で名前が取れるはずです。

この意見に回答する

ツリーへ TOPへ

A02 参考になった
answererKanonbell [12月22日 01:36]

せめてエスケープくらいはつけた状態を教えるべきじゃないかなあ。。

http://jp.php.net/manual/ja/function.mysql-real-escape-string.php

  1. $sql  = "select M.mbr_id as mbr_id ,P.name as prsn_name ";
  2. $sql .= "from x_member M,x_person P ";
  3. $sql .= "where M.mbr_id = P.prsn_ID and mbr_login_name = '";
  4. $sql .= mysql_real_escape_string($user_id) . "' ";
  5. $sql .= "and mbr_login_pwd = '" . mysql_real_escape_string($password) . "'";

って感じかなあ。
MySQLはPrepared Statement使えないんでしたっけか。
MySQLあまり知らないので、これじゃ不足だってのがあれば指摘していただけると助かりますが。


立場には同情しますが、とりあえず付け焼刃で「機能として動作はするもの」はなんとかなるかもしれませんが、「業務に耐えうるもの」は無理です。
初心者が手を出しても火に油を注ぐ結果に成りかねないので、別の方策を考えた方が良いのではないかと。

この意見に回答する

ツリーへ TOPへ

A03
answerersignal [12月22日 19:27]

X_member と X_person はどのカラムで連結できますか?

PHP や SQL、セキュリティを理解している人は周りにいませんか?

もしよければ、納期と全体の開発規模(工数)を教えてもらえますか?
ログインでつまずくようでは先が思いやられます><;

この意見に回答する

ツリーへ TOPへ

A03-1
replyerktzw3 [12月24日 15:01]

昨日の返信が反映されていないことに今気づきました・・・・・
ご意見ありがとうございます。

>X_member と X_person はどのカラムで連結できますか?
登録メールアドレス(prsn_email)をログイン名(mbr_login_name)に使っているので
x_member.mbr_login_nameとx_person.prsn_emailで連結ができるはずです。

付け焼刃でどうにかなるものではないのは重々承知しているのですが。。。
会員データを引き出せるようになれば要求されている機能は仕上がるのです。
よろしくお願いします。

この意見に回答する

ツリーへ TOPへ

A03-1-1
replyersignal [12月24日 16:37] (最終編集:12月24日 16:40)

  1. <?php
  2.  
  3. function login_check( $con$user_id$password ) {
  4.   $format = <<<SQL
  5. SELECT *
  6.   FROM x_member
  7.      , x_person
  8.  WHERE x_person.prsn_email = x_member.mbr_login_name
  9.    AND x_member.mbr_login_name = '%s'
  10.    AND x_member.mbr_login_pwd  = '%s'
  11. SQL;
  12.   $sql = sprintf( $formatmysql_real_escape_string( $user_id )mysql_real_escape_string( $password ) );
  13.   print $sql; # どんなSQLができたのか確認!
  14.   $rst = mysql_query( $sql$con );
  15.   return $rst;
  16. }
  17.  
  18. if ( $user_id != '' and $password != '' ) {
  19.   $rst = login_check( $con$user_id$password );
  20.   $cnt = mysql_num_rows( $rst );
  21.   if ( $cnt >= 1 ) {
  22.     $login_flg = 1;
  23.     $col = mysql_fetch_array( $rst );
  24.     print_r( $col ); # 何が返ってきたか一度確認すること!
  25.     $member_id   = $col['mbr_id'];
  26.     $member_mail = $col['mbr_login_name'];
  27.     $prsn_mail   = $col['mail'];
  28.     $prsn_id     = $col['prsn_id'];
  29.   } else {
  30.     $pid = 0;
  31.   }
  32. }
  33.  
  34. ?>

この意見に回答する

ツリーへ TOPへ

A03-1-1-1
replyerktzw3 [12月24日 16:50]

ありがとうございます!
早速試してみます。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
セッションがいいのか、それともデータベースがいいのか教えて下さい。
 このエントリーをはてなブックマークに追加 
A
>ボタンをクリックしたら選んだ商品情報を持っておきたいと思っています。 そのくらいのことならセッションもしくはCookie(期限短め:場合によってはブラウザ閉じるまで)でいいんじゃないですかね。 #わ...

>>続きを読む

一つの目安として、ECサイトの購入情報など絶対に消えてはいけないものはDBに、カートなどの一時的に使用する情報や、ユーザに任意のタイミングで消去されても構わないものはセッションにと使い分けるといいでしょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)