見守り電球またはGPS端末が特価中!

まずは以下のサイトをごらんいただきたいのですが、

http://www.komonet.ne.jp/~php/program/ninsho/cha …

このソースを改造してユーザーID毎でリンク先を振り分けたいと思っています。
私事で恐縮なのですが、実はサークルのメンバー用HPを立ち上げなくてはならず、
早急にログインプログラムを作成しなくてはなりませんが、なにぶん知識がありません。

どうかお力をお貸しいただけないでしょうか?
よろしくお願いいたします。

なお、ソースを作成なさった方には改造や教えて!gooなどに掲載して質問をするなどについて、一切の免責は得ております。

かなり困ってます。どうかよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

初心者でもいいんです。

とにかくプログラムというものは一気には出来上がりません。一段一段でいいですから上がって行きましょう。ベテランでも初心者でも一つ一つ作っていかなければならないのは同じですから。

・session_open
よくわからなければ、おまじないだと思って頭の方に入れて下さい。単純な作りのサイトであれば、全ページに入っていても不具合はないと思います。非常に簡単に言うと、この関数の実行以降、$_SESSION変数の読み書きができるようになります。ログインのチェックとは、認証後に例えば$_SESSION["login"]という変数にtrueを入れたとしたら、次のページのsession_open後に$_SESSION["login"]の値がtrueになっています。つまり値が引き継がれたわけです。もしtrueでなければログイン認証が行われてないと判断してエラーメッセージなりを出すようにするだけです。

・メンバーの種類
補足のようにするのであれば、ユーザーファイルにデータを一つ足してあげないといけません。数字で扱うのが解りやすいので
(1)幹事長等サークル幹部・・・1
(2)WEB兼広報担当者・・・2
(3)一般サークルメンバ・・・3
と数字を割り当てましょう。defineを使って
define(USER_MANAGER,1);
define(USER_WEBMASTER,2);
define(USER_MEMBER,3);
なんて感じにすると美しいでしょう。

そしてユーザーデータのファイルにデータを足します。
komochan,777,1(幹部)
komo,888,2(広報)
てな感じです。ちなみに末尾の,が無くても動くと思うんだけどなぁ。

で、このデータを読み込んで分解しているところを
list($id,$pass,$page) = split(",", $p_data[$i]);
てな感じにしてあげればいいんじゃないですか?
それに伴ってheader関数は
header("Location: http://~/user_".$page.".php");
となるかと思います。

以上で、少なくともヒントになったとは思いますが。
    • good
    • 0
この回答へのお礼

ありがとうございました。仰るとおりヒントとなりました。
あとは友達と試行錯誤して進めていきたいと思います。
また機会がありましたらよろしくお願いいたします。

お礼日時:2005/06/09 01:42

期待する動作としては、ログインの認証をした後、そのユーザー固有のページに飛ばすという感じですか?飛ばす先はユーザーの数分のHTMLファイル(ログイン認証すると)があると考えて良いでしょうか。



したら例えば公開ディレクトリに一つusr/のようなサブディレクトリを作成し、そこにuser_[USERID].phpのようなユーザー専用のページを置きます。

リンク先のスクリプトで修正する部分は

if($p_flag > 0){
  echo "<FONT COLOR='red'>おめでとうございます。あなたは正式に認証されました。</FONT>\n";
 } else {

ここですね。ここでメッセージを出す代わりに、header("Location: http://~/user_".$u_id.".php");
にリダイレクトをさせるような感じになるかと思います。

実際にはリダイレクト先のユーザーページでもログイン済みかどうかのチェックが必要だと思います。sessionを使えば簡単でしょうね。session_openをした後で$_SESSION["login"]等の変数をtrueにして、それをリダイレクト先でチェックするような構造になるかと思います。

ざっくり超簡単に考えただけなので、もう一工夫必要かも知れませんが。

この回答への補足

早速の回答ありがとうございました。
本当にご丁寧で、具体的なソースまで一部書いていただきまして大変感謝しております。

ただ、正直申し上げて、あまりに初心者すぎて、
わからない部分があります。

初心者がこのようなサイトを作ろうとしていること自体、あきれられてしまうかもしれませんが、どうか教えてください。

まず、sessionというものについてですが、
session_openというのはどういうことなのでしょうか?具体的にログイン済みかどうかのチェックをするスクリプトとはどのように定義すればいいのでしょうか…。ソースのサンプルのページなどがあれば教えてください。

あと、ユーザーの分類として考えているのが、
(1)幹事長等サークル幹部
(2)WEB兼広報担当者
(3)一般サークルメンバ
なのですが、IDとパスワードは一人一人別のものにしたいのです。
具体的に言うと、
(1)に分類される人は9名
(2)に分類される人は4名
(3)に分類される人は59名
です。

この数を個々一つずつhtmlファイルを作るのは大変かと思うので、認証後に
幹事長の人が自分のIDとパスワードを入力→(1)のページ
副幹事長の人が自分のIDとパスワードを入力→(1)のページ
広報局長の人が自分のIDとパスワードを入力→(2)のページ
普通のメンバの人がIDとパスワードを入力→(3)のページ
というように指定したいのです。

補足日時:2005/06/05 01:51
    • good
    • 1

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qhtaccessでユーザ毎にページを振り分けたい

お世話になります。

Basic認証でユーザ認証を行った後、ユーザ毎に違うページを表示したいと考えています。
(さくらVPS、Ubuntu12.04を利用)

<例>
 ドキュメントルート → /var/www/hoge
 UserA → /var/www/hoge/userA/index.html
 UserB → /var/www/hoge/userB/index.html

この時、

 ・.htpasswdにユーザIDとパスワードを記載
 ・.htaccessにRewriteRuleとRewriteCondを記載し転送設定をする
 ・ユーザAはユーザB用のページを見れないようにする
 ・ユーザAはuserA以下のディレクトリは全て見られるようにする

という条件の下設定を行いたいのですが、htaccessの記述ルールがよくわからず、
どうにもうまくいきません。

レベルの低い質問でもうしわけありませんが、ご回答いただけたら幸いです。
よろしくお願いします。

Aベストアンサー

CMS使った方がいい。


http://webings.net/htaccess/authuser/
とりあえずユーザでの振り分けはできるがディレクトリ制限はできない。

ディレクトリ毎にベーシック認証のファイルを用意した方がいいだろうね。

Qユーザー名、パスで認証して、ユーザのマイページを開く方法

この教えてgooみたいに ユーザ名、パスワードで認証して
そのそのユーザ名のページに飛んでいくと言うのを作りたいのですが
どのようにしたらいいでしょうか?

携帯電話の利用も考慮に入れて作りたいと思っています。

*php + mysql の利用を予定しています。

いつも質問ばかりでスミマセン。。

宜しくお願いいたします。

Aベストアンサー

header("Location: http://" . $_SERVER["SERVER_NAME"] . dirname($_SERVER["REQUEST_URI"]) . "/list/111.php?" . SID);

これではうまくいきませんか?
認証さえ通過すればうまくいけるような気がしますが・・・。

PHPみたいなインタプリタの言語のデバッグの方法としては、
header("Location: http://hoge.com/list/".$id.".php);
とやってみて、少しずつ、発展していくとどの部分でエラーがでているのかわかりやすいです。

それより心配なのは、100人ユーザーがいたら100個も個別にPHPスクリプトを作る手間です。一つのスクリプトで、プログラム内で個別に表示する項目を変えたほうがいいと思いますが・・・

Qユーザー認証&リンク先振り分け

下記のようなプログラムにてユーザー認証&リンク先の振り分けを考えているのですが、上手に出来ません。どこか問題がありましたら教えていただけないでしょうか?エラー構文などは出ないのですが、フォーム上からユーザーIDとパスワードを入力してもうまくページが切り替わらず、同じログインフォームのページが開いてしまうのです。

<?php
//
$data_file = "d_file.dat"; //データファイルの指定
$authlevel = 0; //権限レベル
if($action == "post"){
$p_data = file($data_file);
$p_flag = 0;
for($i=0; $i<count($p_data); $i++){
list($id,$pass,$authlv) = split(",", $p_data[$i]);
if($id == $u_id && $pass == $passwd){
$authlevel = $authlv; //権限レベルを読む
$p_flag++;
}
}
if($p_flag > 0){
switch (authlevel){
case 1:
require ("http://www.dell.com");
break;
case 2:
require ("http://www.whitehouse.gov");
break;
case 3:
require ("http://www.yahoo.com");
break;
case 4:
require ("http://www.google.com");
break;
case 5:
require ("http://www.yahoo.co.jp");
break;
default://上記以外
require ("http://www.kantei.go.jp");
break;
//echo "<CENTER><BR><BR><BR><FONT COLOR='blue'>おめでとうございます。あなたは正式に認証されました。<BR><BR>\n";
//echo "ここにお好きなHTML表示を埋め込んで下さい。</FONT>\n";
}
} else {
echo "<CENTER><BR><BR><BR><FONT COLOR='red'>ユーザーIDとパスワードが間違っています。やり直して下さい。</FONT>\n";
}
}
?>

ちなみに、パスワードファイル(d_file.dat)には
(ユーザーID),(パスワード),(権限レベル),
と記述したファイルを用意しました。

下記のようなプログラムにてユーザー認証&リンク先の振り分けを考えているのですが、上手に出来ません。どこか問題がありましたら教えていただけないでしょうか?エラー構文などは出ないのですが、フォーム上からユーザーIDとパスワードを入力してもうまくページが切り替わらず、同じログインフォームのページが開いてしまうのです。

<?php
//
$data_file = "d_file.dat"; //データファイルの指定
$authlevel = 0; //権限レベル
if($action == "post"){
$p_data = file($data_file);
$p_flag = 0;
...続きを読む

Aベストアンサー

拝見しましたが、まだこれは冒頭ではありませんね。header関数の前に画面出力があってはならないんです。これはタグはもちろん、改行であっても同じです。

そもそもリダイレクトする際にはHTMLの出力は一切必要ないのですから、HEADERブロックも不要です。

<html>
<head>
<title>動作すればいいなぁ</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<style type="text/css">
<!--
.six { font-size: 6pt}
.seven { font-size: 7pt}
.eight { font-size: 8pt}
.nine { font-size: 9pt}
.ten { font-size: 10pt}
-->
</style>
</head>

このブロックをBODYタグの前に移せば良いでしょう。

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

Qフォントの色を変えるには?

こんにちは。PHPでのフォントの色の変更について質問があります。
任意の文字列の色だけを変更したいのですが、下のコードではエラーになってしまいます。
どこがまずいのかご指摘いただければ幸いです。
------------------------------
<HTML>
<HEAD>
<TITLE>TEST</TITLE>
</HEAD>

<BODY>

<?PHP
ECHO "<FONT COLOR="BLUE"> HELLO </FONT>";
ECHO "<FONT COLOR="RED"> GOOD BYE </FONT>";
?>

</BODY>
</HTML>

Aベストアンサー

BLUEやREDについてるダブルクォーテーションがエスケープされてないですね。
いろいろやりかたはありますが以下のどちらかがよいでしょう。

<?PHP
ECHO "<FONT COLOR=\"BLUE\"> HELLO </FONT>";
ECHO "<FONT COLOR=\"RED\"> GOOD BYE </FONT>";
?>

もしくは

<?PHP
ECHO '<FONT COLOR="BLUE"> HELLO </FONT>';
ECHO '<FONT COLOR="RED"> GOOD BYE </FONT>';
?>


人気Q&Aランキング