- ベストアンサー
プライベート機能の作成
今現在、Wikiシステムに似たようなアプリを作成しており、かくユーザーごとのプライベート機能を作成していましたが自力では解決できずみなさまのお力を借りれればと思い質問させていただきました。 DBに oshiete&goo&blog&zip&ttn&google のように観覧可能なユーザーを&で区切って格納しています。 oshieteというIDでユーザー認証が必要なページにアクセスした際、DBの観覧可能なユーザーカラムから&を取り除いた各ユーザー名を取得し、もしその中にoshieteというID名があれば表示、なければエラーメッセージを表示という機能を装備したいのですがなかなかうまくいきません。 ご存知の方よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です DBなんかでやるなら、 一番単純なのは、今、セパレータで連結しているユーザIDを1レコードずつ、テーブルに格納することでないかと。 create table user (number serial primary key,id varchar(20)) で作って、 select number from user where id = 'oshiete' なんかで簡単に検索できるし、テーブルが大きくなっても極端にならないのがいいです。 DBのインタフェースに関しては、色々ありますので、具体例を出しにくいですが、私が良く使うPostgreSQL だと 以下のようになるかと $con = pg_Connect(データベース情報); if (!$con){ echo "DateBase に接続できませんでした。"; exit; }else{ pg_exec($con,"select number from user where id = '$userid'"); if (pg_Numrows($rtn) != 0){ // OK }else{ // NG } } 最近は、adodbか、戻ってもpear-db を使ってますんで、少し大雑把になっています。 連結したテキストでも検索できるけど、そもそもDBの意味がないかと思いますので。 いずれにしろ、SQLのインジェクションに注意です。
その他の回答 (2)
- athanasius
- ベストアンサー率37% (361/964)
$userarray = explode ("&",$ユーザ情報); if(!is_null(array_search("oshiete", $userarray))){ // OK }else{ //NG } ってのも考えられるかな? でも、DBで検索した方が速いんだけどね。
お礼
回答ありがとうございました。 >でも、DBで検索した方が速いんだけどね。 私もデータ数が多くなればその分PHPにかかる負担も多くなるのかと心配していますが、DBでこのような場合でも検索などできるのでしょうか? もし、よろしければ方法を教えていただければ幸いです。
- fire--
- ベストアンサー率49% (146/293)
if(preg_match("/".ログインユーザーIDの入った変数."/i",ユーザーリストの入った変数)==1){ OKの処理 } else { NGの処理 } では? あと作る事自体が目的でなく、使う事が目的ならば、そういうツールを 探してしまうのも手だと思いますよ。 ユーザー認証などは、しっかり作らないと穴だらけになったりします。 例えばxoopsはユーザー認証はあらかじめ組み込まれています。 http://xoopscube.jp/index.php
お礼
回答ありがとうございました。 一度自作する前にツールなどを探してみたいと思います。
お礼
回答ありがとうございます。 質問なのですが、カラムにはoshiete&gooといった感じで&にて区切られています。 この場合、select * from table where id = 'oshiete' で検索可能なのでしょうか? 何度も質問して申し訳ございませんが、どうぞよろしくお願いいたします。 (使用しているDBはMySQLです。)