• ベストアンサー

IDの払い出し(文字列)

WEB APでデータベースを勉強中のものです. ユーザを管理するID番号をデータベースの連番IDではなく,文字列のIDにしたいのですが,どうすればいいでしょうか.PHP等で作成する方法でもいいです. 文字列IDにすると特定されにくいかなって思っています. 例えば A100001 C100002 です.

質問者が選んだベストアンサー

  • ベストアンサー
  • 1minn
  • ベストアンサー率57% (52/90)
回答No.2

OrangeCup150さんが想定されている意図であるなら・・・ 1.PHPにてランダムの半角英数文字列(固定桁長)を生成する(8桁とか) 2.SELECTして1の値と既存との重複チェック 3.重複があれば1と2を繰り返し。なければそれでOK。 serial型などは今どきなら自動でINDEXもつくので、ユーザーID的なものとは別にあってもいいと思いますよ。プライマリキーになるので、他のテーブルとの結合もしやすいし。 ユーザーの情報をいじくったりする時には、そのserial型の値を使って操作してやったほうが速度も出やすいですから。

その他の回答 (1)

回答No.1

つまり、 普通に、ユーザ登録時に、ユーザに希望IDを入力させるようにすればいいと思いますが・・・。それができないため、システム側でIDを発行するようにしたいわけですよね(たぶん)。 しかし、単純に連番IDを使用すると、ユーザIDの存在の有無が判別されやすいから、良くないよなーとか思ったわけですよね(たぶん)。 連番IDにアルファベット2,3文字(いわゆるチェックコードみたいな)を加えれば、まあ、十分マシになるかとか思ったわけですよね(たぶん)。 ユーザID(番号部)は、周回するシーケンスで採番し、ユーザID(アルファベット部)は、パスワード作成の要領で作成する。(ユーザ登録時に重複チェックを行ない重複していたら、ユーザID(アルファベット部)を再作成する。) たぶん、アルファベット2~4ケタ、番号、3~6ケタ程度にすればいいぐあいになると思います。 こういう方法でどうでしょうか?

kawaK1986
質問者

お礼

意図を汲み取っていただきありがとうございます. なるほど,そういう方法でつくるんですね. 勉強になります.

関連するQ&A

  • PHP&MySQLでの文字列+数列の一意の連番を生成するには?

    お世話になります。 PHP&MySQLでプログラムを勉強しています。 データを挿入する際にデータに連番を振ろうと思っています。その際に連番を1 2 3 4・・・というような連番ではなく、 hametome0000001 hametome0000002 hametome0000003 ・ ・ ・ ・ といったような(文字列+数列)連番にしたいと思っているのですが、MySQLのデータ型をauto incrementにして連番を振る場合では文字列+数列の連番が振れないようなので、どのようにすれば文字列+数列の連番を振れるのか分かりません。 よろしくご教授のほど、お願いいたします。

    • ベストアンサー
    • PHP
  • PHPソースファイルの文字列置換をしてから、

    PHPソースファイルの文字列置換をしてから、 そのスクリプトを実行する方法を実行しようとしている のですが、うまくいきません。 似たような質問(http://oshiete.nikkeibp.co.jp/qa5496696.html) を参考にして、文字列置換自体はうまくいったのですが、 phpファイル実行時にまったく関係の無いはずの DBアクセスでエラーが発生してしまいました。 変換前前のphpファイルに置換後の文字列を手で入れて、 データベース実行するとうまくいきます。 しかしながら、phpファイルの文字列置換をstr_replaceで実行し、別名保存した後 includeしても、うまくいかないといった状況です。 ちなみに置換後のphpファイル内で $置換後文字列 = "test"; echo $置換前文字列; とすると、置換前文字列が置換後文字列に きちんと変わっているようで、 "test"と出力されます。 もしかすると、原因は違う所に潜んでいるのかもしれませんが、 どこを調べれば良いのか検討がつかず困っております。 どなたか解決手段の分かる方がいらっしゃれば教えて頂けませんでしょうか? -------------------------------------------------------------- 尚、ファイル構成は top |-change (1.php) |-database (2.php) |-search (検索画面[データベース検索の入り口。form action ="./3.php"],3.php) |-base (4.php,5.php[tempファイル]) となっており、 それぞれの中身は 1.文字列置換実行用のphpファイル(1.php):  1-1.file_get_contentsで4のphpファイルを取得  1-2.str_replaceを用いて文字列置換  1-3.文字列置換したファイルをfwriteで4.phpと同じディレクトリに保存(5.php)  1-4.5.phpをincludeする。  1-5.5.phpをunlinkする。 2.データベースアクセス(mysql)用関数を含むphpファイル(2.php):  ↓エラーの原因と思われる関数  function connect() { global $host,$user_id,$passwd,$con; $con = mysql_connect($host,$user_id,$passwd); } 置換前phpファイルを手動で文字列置換した場合には  同ファイル内で設定したglobal変数の値がきちんと格納されており、  データベース実行がうまくいきます。  置換後phpファイルでは$host等に値が格納されていないため、  データベース実行がうまくいきません。  グローバル変数の中身は同ファイル内で定義しています。 3.検索を実行した時に呼び出されるphpファイル(3.php):  3-1.include("../change/1.php"); 3-2.1.phpの関数の実行 4.文字列置換前のphpファイル(4.php): /*呼び出し元のディレクトリ位置でないとincludeに失敗する*/ 4-1.include("../database/2.php");  4-2.2.phpのデータベースアクセス関数を実行する。 5.文字列置換後のphpファイル(5.php): 3-2の1.php関数の実行により、一時的に生成される。

    • ベストアンサー
    • PHP
  • SQLServerのID列(自動連番)について

    PHPとSQL Serverでウェブアプリケーションを作っています。 例として、下記のようなテーブルを想定します。 テーブル名 users  user_id [int] ←主キー(IDENTITYプロパティを指定して、1ずつ増える連番)  name [char(10)] IDENTITYにより、INSERT INTO でuser_idの値を指定せずとも、一意のID値が割り振られます。 このINSERT処理は、PHPのmssql_queryでSQL文を発行しているのですが、 この時割り振られたuser_idが何であるかは、どうやって調べればよいのでしょうか。 IDENTITYを利用せず、INSERTする前にSELECT MAX(user_id)を発行して、 最も大きなuser_idを調べ、それを+1してINSERT、とすれば当然user_idは分かりますが、 せっかくIDENTITYの機能があるのに明らかに無駄な処理です。 どなたか分かる方、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 【VBA】IDを入力して文字列を取り出す関数

    ExcelのVBAにてプログラムを作成しています。 IDを引数に渡して、文字列を取り出すような関数を作成しようと思っていますが、 何か良い作成例をご教示頂けないでしょうか? 例としては、このような形を考えています。 ※リソースファイルなどを使用せず、全てコードにて記述。 GetString("TEST_ID") '引数のIDに対応する文字列を返す(ID、文字列はテーブルなどで定義) お手数ですが、よろしくお願いします。

  • 【C++/CLI】文字列管理関数の作成

    VC++2005の.NET、言語はC++/CLIでアプリを作成しています。 String型の文字列を管理するクラスを作成しようと思います。 自分ではどのようなものを作成したいのか、イメージはついているのですが、 CLIの知識、技術が足りず、なかなか作成することが難しい状態です。 下記にイメージを記載しますので、有識者の方々アドバイス頂けませんでしょうか。 よろしくお願い致します。 文字列管理クラス「TextTbl」 【TextTbl.h】 enum { STR_TEST1, //格納したい文字列1のID STR_TEST2 //格納したい文字列2のID // ・・・   //ここに追加したい文字列のIDを追加していく } String^ getText( int id ); 【TextTbl.cpp】 // 文字列を取得する関数(引数は文字列のID) String^ TextTbl::getText( int id ) { //文字列のテーブルを定義する処理(文字列IDと文字列の文言が対になって定義されている) //IDを元に文字列を検索し取得する処理 return str; //検索した結果のString型文字列を返す }

  • phpでmysqlから呼び出し文字列に変換?

    mysqlに下記のようなものがあるとします。 id name category 1 ユーザー1 3 2 ユーザー2 1 3 ユーザー3 1 これをphpで呼び出して表示します。(エスケープ処理は省いてます) <?php echo $users["id"]; ?> <?php echo $users["name"]; ?> <?php echo $users["category"]; ?> それぞれ1→ユーザー1→3 という感じで問題なく表示されています。 しかし、categoryのところは実は 1 海釣り 2 川釣り 3 両方 このように選んで貰ってその数値を格納しています。 しかしながらそれをphpで呼び出しどのように【1が呼び出された時は海釣り】のように表示するのでしょうか? 最初から文字列を格納でも良いのですが整数を格納し呼び出す時に、という今回のケースも勉強したいと思ったのですがどのようにやるのがスムーズなのでしょうか? 比較的プロフィールのページや写真掲載のページなどに頻繁に使うのでどこかに関数としてかいておけるものなのでしょうか?

    • ベストアンサー
    • PHP
  • 正規表現での複数箇所の文字列置換について

    文字列から特定の文字を検出し、 HTMLタグに置換するスクリプトを作成しようとしています。 例: 元の文字列:xxxxxx[id:1]xxxx[id:2]xxxx  ↓ 置換後の文字列: xxxxxx (<A>タグによるリンク。idが1番のタイトルをDBから参照) xxxx (<A>タグによるリンク。idが2番のタイトルをDBから参照) xxxx 要求している処理順序:  1:文字列中から[id:xxx]を検出して<A>タグに変換  2:id:xxx の xxx部分(数字)を抽出  3:2で得た数字でSQLを実行  4:DBから得た文字列で<A>タグを完成    <A href="test.php?id=(2で得た数字)">(4で得た文字列)</A>  5:以上を[id:xxx]の個数分だけ繰り返し --- スクリプト: // 文字列 $str = "xxxxxx<br>[id:1]<br>xxxx<br>[id:2]<br>xxxx"; // 置換 $result = ereg_replace("\[id:([0-9]+)\]","<a href=\"test.php?id=\\1\">xxx</a>"; ここで、id: の次に続く数字を抽出して その数字を元にDBからデータを引っ張ってこようと思ってます。 // 抽出 $pregresult = preg_match("/[0-9]+/",$result,$match); $id = $match[0]; ここで $id に番号が入り、その番号でSQL文を作成したいのですが 文字列中に[id:xxx]がひとつだけなら正常に動作するのですが 二つ以上存在する場合、$id には最初に検出された数字(上記例では 1 ) しか入ってこないので、二つ目以降のidが認識できず困ってます。 複数の検出・置換対象を順次処理していく方法があれば ご教示いただければ幸いです。 もしくは、他にもっとスマートな方法があるのであれば ご提示いただければ幸いです。 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ウェブページの文字列をサーブレットに送りたい

     ウェブページ上で選択した文字列をデータベースへ送る、というアドオンを作りたいと考えており、そのためにjavascriptを使ってウェブページ上で選択した文字列をサーブレットのテキストフィールドへ送るというプログラムを作ろうとしているのですが、そのやり方が思いつきません。  自分の頭では、 ・Webブラウザに予めフォームを用意しておき、文字列が選択されたときに自動的にそこにその文字列が入り、そこからサーブレットに送る という方法くらいしか思いつきませんでした。  このようなプログラムの作成法を知っている方、またはもっと別の方法を知っている方がいましたら、ぜひ教えてください。お願いします。

  • A-ONEラベル屋さん連番文字列の作成

    よろしくお願いします。 A-ONEラベル屋さん連番文字列の作成がうまくできません。 掲載されている操作手順の通りに実施しました。 OKボタンをクリックして、セル?にNo.は振られているのですが、用紙に反映されず、 印刷しても印字されません。 OKした後、何か操作が必要でしょうか? ご存知の方、教えてください。 ●操作手順 はじめに連番文字を挿入開始するセルを選択します。 このとき作成する複数行セルを選択すれば、作成する数の初期値に使えます。 複数列選択時には使えません。 [リンク機能]-[連番文字の作成]メニューで[連番文字の作成]ダイアログを表示します。 [作成枚数]には選択時の行数が入っています。作成する枚数を入力してください。 [最初の番号]や[先頭文字列]/[末尾文字列]、[桁数]・[増分]を指定します。 準備ができたら[OK]ボタンをクリックします。 連番文字が作成されるセル上にある文字は置き換えられて元には戻せません。 確認ダイアログが表示されます。 確認の上[OK]ボタンをクリックします。

  • Webページに文字列を探したい

    友達とのゲームで あるWebページに隠されたある文字列を探しています。 隠されているウェブページは .phpというhtmlでメソッドpostした先のウェブページです。 htmlソースにはある文字列(答えの文字列)はありませんでした。 可能性として文字列が隠されているであろうところはどこがあるでしょうか? htmlソースしか思い浮かびませんでした。