プロが教える店舗&オフィスのセキュリティ対策術

PHP+MySQL勉強中のものですがよい方法を教えてください。
表題のように会員登録のサイトを作っているのですが
いわゆる会員番号をダブらないようにして入力時に自動的に作成したいのですが
一般的にはどのような方法があるのでしょうか?

私としてはDBの会員登録とは別にシリアル番号だけを書き換えていくテーブルを作って新規入力時に値を拾っていく方式にしたいのですが。

会員テーブル(会員番号,会員名)
シリアルテーブル(シリアル番号)
に対して

会員テーブルに会員名を入力
 ↓
シリアルテーブルからシリアル番号を読込む
 ↓
会員テーブルに(シリアル番号+1&5桁の数字,会員名)を登録
(5桁の数字は他で使うものでユニークな値ではないです)
 ↓
シリアルテーブルに(シリアル番号+1)として更新
 ↓
シリアルテーブルのシリアル番号が9999になったら1に戻す

という処理をしたいのですが
処理自体はできるのですが
当然PHPのコードが素人目にみても余りきれいではありません。
一般論でかまいませんので皆さんならどうされるか等
ご意見をうかがえないでしょうか?
よろしくお願いします。

環境はPHP5+MySQL5です。

A 回答 (3件)

    • good
    • 0
この回答へのお礼

tany180sxさん
ありがとうございます。
PHP関数だとmysql_insert_id()
http://jp.php.net/manual/ja/function.mysql-inser …
  ↑
参考になりました。

お礼日時:2008/01/15 22:43

1.会員登録Tの会員名やその他情報などがユニークで一意に定める事のできる


  情報なら、それをキーにして会員番号を取得する。
  MAX()やLAST_INSERT_ID()を使って会員番号を拾ってきてもいいですが、
  トランザクションの関係が影響を及ぼす可能性があります。
  LAST_INSERT_ID()は使ったことないので何ともわかりませんが、
  説明見る限りだと大丈夫そうな感じもしますが・・・。
  http://dev.mysql.com/doc/refman/5.1/ja/informati …

2.会員登録Tと会員情報Tが1:nの関係にないならば、全て1つのテーブルにしてしまう。
  操作が完了する過程の情報はセッションIDを加工した値をプライマリーキーにしたテーブルで保持する。

など?
勘違いしてたらすません・・・
    • good
    • 0
この回答へのお礼

naktakさん
2の
-操作が完了する過程の情報はセッションIDを加工した値をプライマリーキーにしたテーブルで保持する。-
という方法いいですね。
LAST_INSERT_ID()とあわせていろいろやってみようと思います。
ありがとうございました。

お礼日時:2008/01/15 22:40

質問の意図がよくわからないのですが、


単純に連番で会員番号をとればすむのでは?
会員番号自体はSQLでオートインクリメントしたidを
だしてやれば済むような気が・・・
やりたいことが違うのかなぁ?

この回答への補足

ややこしし書き方でごめんなさい。
おっしゃるとおりMSアクセス等でインターフェイス作ってるときは
オートインクリメントしてるのですが
今回はPHP使ってブラウザから入力することに挑戦していまして
最初の登録ページで一旦会員登録を終わらせてDBに書き込みます。
そして会員番号をセッションで保持して
(会員番号はKeyにしてるので同じ値を運びます。)
次の頁で別項目を入力するのですが
オートインクリメントだとうまくオートインクリメントで入力された値を拾えなかったんのです。

初期登録Web画面(会員番号,会員名,5桁の数字)
  ↓
  ↓ submit →会員登録T(会員番号,会員名)入力
  ↓
会員情報登録Web画面(会員番号,5桁の数字)
  ↓ 
  ↓ submit →会員情報T(会員番号,5桁の数字)入力
  ↓       ↑
  ↓    この時にオートインクリメントで入力した値の拾い方がわからない
次の登録Web画面へ続く...
(登録画面を分けている理由は実際には登録する項目が多すぎるからです)

ということでして
ならば会員番号を最大値+1で自分で作ってしまい
ついでに5桁の数字も会員番号に混ぜて運用してしまおうかなと思ったからなんです。

『オートインクリメントで入力した値の拾い方』で質問した方がよかったかもしれませんが
周りに詳しい人もいないので一般的にどうなんだろうなと思ってしまったしだいです。

補足日時:2008/01/15 00:45
    • good
    • 0

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