No.9ベストアンサー
- 回答日時:
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スクリプトを作る手間です。一つのスクリプトで、プログラム内で個別に表示する項目を変えたほうがいいと思いますが・・・
お礼が遅くなりました。。。
ようやく教えてもらったことを少しずつ理解しながら
ようやく完成いたしました!!
セッションのことが全く分かっていなかったので
教えていただいている事が全く分かりませんでした。
で、ひとつずつ解明していったら
id を持ちまわることが出来て、セキュリティもきちんとクリアして
いいものが出来ました。
本当に親切に教えていただいて
ありがとうございました。
No.8
- 回答日時:
Warning: mysql_num_rows():
Warning: mysql_fetch_array():
これらのエラーは、SQL文が間違っているときにでます。
これはデータベース構造とスクリプトを見せていただくしか方法はないですね。
>ヒントで頂いたように、各ページに認証ページを読み込むようにしていたらアクセスできないようなので、今回はそちらにしようかなと思います。
うまく動かないとのことですが、各ページでチェックしないとブックマーク対策はできませんので可能であれば行っておいたほうが無難でしょう。
あと、
>一番下にある(スミマセン、字数制限で書けそうに無いのでm(__)m)ように認証することは出来るので、認証の時に入れたID(数字で3桁)を
認証ごに出てくる画面に id.php と言うリンクが出来ないかなと思っています。
ここの部分の意味がよくわかりません。
認証後にここの部分で飛ばすことを言っているのかな?
header("Location: http://" . $_SERVER["SERVER_NAME"] . dirname($_SERVER["REQUEST_URI"]) . "/list/111.php?" . SID);
ひとつ疑問なのは、header&Locationであえて別のページに飛ばす必要があるのかどうか。認証後のphpが生成するページに
<a href=http://".$_SERVER["SERVER_NAME"].dirname($_SERVER["REQUEST_URI"])."/list/111.php?".SID>あなたのページはこちら</a>";
とリンクタグを素直に書いてはだめですか?
月末までのオープン、がんばってください。
この回答への補足
スミマセン、知識が無い上に説明下手で。。。
ID PASS で認証してもらう時の ID で
その方の専用のページを作りたいのです^^;
なので、入力してもらったID が 100 なら
****/100.php と言う具合にです。
**login.php**
ID PASS 入力
**login_check**
チェックする
で、とんだ先に 自分専用(****/100.php)のページのアドレスがある。
そこまで受け渡しする方法は無いでしょうか?
スミマセン、もう一度だけ助けてください。
お願いいたします。
***お勧め頂いた本、アマゾンにも新品は売ってませんでした。
当方の住む地方都市の大きな本屋さんにも在庫がありませんでした。
(明日、出向いて注文してみるつもりです)
No.7
- 回答日時:
本を何冊も読んでいるとのことですが、参考URLの本はとてもオススメです。
おそらく質問者さんのやりたいことがそのまま記載されていると思います。
プログラム上達の近道は、本を読むよりも、自分のやりたいことのプログラムを人に書いてもらって、見て勉強したほうがいいと思います。
参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/4844314 …
この回答への補足
どうしてもこのエラーが出ます。
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /virtual/wave/public_html/login-test/pass_check.php on line 22
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /virtual/wave/public_html/login-test/pass_check.php on line 23
会員ではありません
テーブル名 フィールド名など 気をつけてみましたが分かりません。
少し、敷居が高かったのかな? と思っています。。
早速、本を買いに行ってきます。
そこで、これだけ教えていただけませんか?
一番下にある(スミマセン、字数制限で書けそうに無いのでm(__)m)ように
認証することは出来るので、認証の時に入れたID(数字で3桁)を
認証ごに出てくる画面に id.php と言うリンクが出来ないかなと思っています。
ヒントで頂いたように、各ページに認証ページを読み込むようにしていたら
アクセスできないようなので、今回はそちらにしようかなと思います。
勝手なことばかり言ってスミマセン、
月末までに作らないといけないので。。
(ただ、その後のこともありますので 再度ソースを勉強させて頂きます)
どうか宜しくお願いいたします。
No.6
- 回答日時:
pass_check.php なのですが、データベース情報は入れなくて良いのでしょうか?
必要です。書き忘れました。
あとIDとpassのチェックは pass_check.phpのelseif文の方でチェックしています。これもpass='$pass'を書き忘れていますね。すいません。
}elseif($id <> ""){//idとpassを入力してきた場合
$sql_check_id = "SELECT* FROM mem WHERE id='$id' AND pass='$pass' AND (from_date <= '$today' AND to_date >= '$today')";
}
No.5
- 回答日時:
あと自分のPR文を編集できるようにするためには、SELECT文で抜き出したデータを入れてやればいいだけです。
pr.php
htmlは省いてあります。
<?php
//しつこいが必ず読み込む
require_once('pass_check.php');
if($err == '1'){
//pass_check.phpで$err = 1だったら会員ではないので、はじく
echo "会員ではありません";
}else{
echo "<FORM method=post action=pr_henko.php>";
echo "<TABLE BORDER=1>";
echo "<TR>"
echo "<TD>ハンドルネーム</TD>";
echo "<TD><input type=text name=user_name value=$user_name_gloval></TD>";
echo "<TD>住所</TD>";
echo "<TD><input type=text name=adress value=$user_adress_gloval></TD>";
echo "</TR>";
echo "<TR>";
echo "<TD colspan=2><input type=submit value=登録></TD>";
echo "</TR>";
echo "</TABLE>";
echo "</FORM>";
}
?>
pr_henko.php
<?php
//しつこいが必ず読み込む
require_once('pass_check.php');
if($err == '1'){
//pass_check.phpで$err = 1だったら会員ではないので、はじく
echo "会員ではありません";
}else{
if($user_name == "" OR $adress == ""){
echo "名前とアドレスは入力してください。";
}else{
//データベース関連のデータをインクルードします
require_once("dbini.php");
//MySQLに接続します
$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
//データベースを選択します
$selectdb = mysql_select_db($DBNAME, $con);
$sql_shusei = "UPDATE mem SET user_name='$user_name', user_adress='$adress' WHERE temp_id = '$temp_id_global'";
$result_shusei = mysql_query($sql_shusei);
if(!$result_shusei){
echo "更新失敗";
}else{
echo "更新成功";
}
}
}
?>
あと、memに住所など個人情報がある場合は、分けておいたほうがいいです。
理由は、SQLインジェクションにより、個人データを抜かれる可能性があるからです。
どのようなものかは
http://www.atmarkit.co.jp/fsecurity/rensai/webho …
こちらをご覧ください。
No.4
- 回答日時:
私がやっている携帯電話着メロの商用サイトでの話です。
ユーザーが登録すると、http://hoge.com/login_check.php?temp_id=b9650f36 …
のようにメールにログインURLやID、PASSを添付して送ります。
ちなみにtemp_id=の部分は、md5ハッシュ値で、ほとんど重複がないのでランダムID発行には便利です。
md5の説明:(http://www.php.net/manual/ja/function.md5.php)
携帯電話ではキーが打ちにくいので、ユーザーがいちいちIDとPASSを入力しなくてもよいというメリットがあります。
私はtemp_idを判断して、若しくは入力されたIDとPASSを見て判定しています。
やり方としては
1.login.phpはそのままでいいと思います。
2.login_check.php等全てのページに、認証チェック用のプログラム(pass_check.php)をインクルードします。
インクルード文を全てのページに書くことで、ブックマーク等は不可能になります。
インクルード用プログラム例:
pass_check.php
<?php
//会員期間をチェックするために利用
$today = date("Y-m-d");
//エラー初期化
$err = 1;
if($temp_id <> ""){//メールについたtemp_idで接続してきた場合
$sql_check_id = "SELECT * FROM mem WHERE temp_id = '$temp_id' AND (from_date <= '$today' AND to_date >= '$today')";
}elseif($id <> ""){//idとpassを入力してきた場合
$sql_check_id = "SELECT* FROM mem WHERE id='$id' AND (from_date <= '$today' AND to_date >= '$today')";
}
$result_check_id = mysql_query($sql_check_id);
$num_rows_check_id = mysql_num_rows($result_check_id);
$row_check_id = mysql_fetch_array($result_check_id);
if($num_rows_check_id > '0'){
$err = 0;
//このようにすることで、どのプログラムにおいても,$user_name_globalと書くと表示されるようになる。
$user_name_global = $row_check_id[user_name];
$user_adress_global = $row_check_id[adress];
$user_temp_id_global = $temp_id;
}else{
$err = 1;
}
?>
プログラム例:login_check.php
htmlは省いてあります。
<?
//ここで認証プログラムを読み込みます。
require_once('pass_check.php');
if($err == '1'){
//pass_check.phpで$err = 1だったら会員ではないので、はじく
echo "会員ではありません";
}else{
echo "こんにちは、".$user_name_global."さん<BR><BR>";
echo "1.<a href=./bbs.php?temp_id=$user_temp_id_global>掲示板</a><BR>";
echo "2.<a href=./chat.php?temp_id=$user_temp_id_global>チャット</a><BR>";
echo "3.<a href=./pr.php?temp_id=$user_temp_id_global>PR文編集</a><BR>";
}
?>
こんな感じでしょうか
セキュリティ万全にするとこれだけでは足りませんので承知ください。
参考URL:http://fixenmelody.com
この回答への補足
とてもご親切な回答ありがとうございます。
スミマセン、いくつか質問させてください。*多分超初歩的なことです。。
pass_check.php なのですが、データベース情報は入れなくて良いのでしょうか?
僕はおまじないのように必ず入れているのですが
//データベース関連のデータをインクルードします
require_once("dbini.php");
//MySQLに接続します
$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
//データベースを選択します
$selectdb = mysql_select_db($DBNAME, $con);
それから、ID と PASS はどこでチェックしているのでしょうか?
**私の場合はほとんどこちらだと思います。
お手数かけますが、宜しくお願いいたします。
No.3
- 回答日時:
basic認証の延長でmysqlによる認証が可能です。
dbの方でカレントページなど保持しておけば、
それなりのユーザーページも運営できると
おもいます。
参考URL:http://tsuttayo.sytes.net/apache/access/db/
No.2
- 回答日時:
先の方が答えている通り、設計次第です。
以下の条件により設計はかなり変わります。
1.IDとPASSはデータベースで管理するか、否か
2.ユーザー期間は管理するか、否か
3.認証を受けた後の全てのページでチェックするか、否か
(ユーザー期間が切れた後はどの箇所にもブックマークをしていても入れない)
4.ユーザー名のページは一人一人それぞれ作るのか、それとも「kiyomidesuyoのページ」のような表示だけでいいのか。
(せっかくPHPを使うならそれぞれ作るようなことは避けた方が無難)
その他色々あると思います。
また何を行いたいかによって感じも変わってくると思います。
簡単な認証でしたら、作成もしますのでよかったらどうぞ
この回答への補足
皆さんのご指摘通り、ちょっと甘えすぎていると思い
本を何冊も読むのですが、なかなか回答に行き着きません。
お言葉に甘えて、アドバイスをお願いします。
1 id pass は mysql で管理します。
2 携帯電話でも利用できるようにする(cookieの利用無し)
3 100名ほどの利用を考えています
4 認証を受けた後の全てのページでチェック
5 それぞれのユーザーが自分のPR分を編集できる
出来の悪い脳みそで一生懸命考えていますが。。
このテーブルだけ分けた方がいいのでしょうか?
現在は 'mem' と言うテーブルに id int(11) pass varchar(8)
**他にもユーザー名や住所なども入って居ます。
お手数かけますが、宜しくご指導お願いいたします。
No.1
- 回答日時:
こんにちは。
設計次第でいろいろあると思います。
それをココでどのように作るかは回答しきれないと思います。
手順としては、
ユーザ名とパスワードを受け取る
ユーザ名とパスワードでレコードが取得する
取得できたらユーザのページを表示する
取得できない場合はエラーページなりを表示する
ユーザのページでは認証されたユーザ名を使用して、必要な情報を取得し表示等を行う。
まずは、ログインのページと認証処理を行うスクリプトを作ってみてはいかがでしょうか。
この回答への補足
いつも回答ありがとうございます。
一つ一つやってみました。(SESSIONを利用)
ユーザ名 パスワードで認証したら特定のページへ
エラーはエラーを表示。
ここまでは出来るのですが、認証後に表示したページに
更新するページはこちらですとリンクを張りたいのですが
どのようにリンクを張ればいいのか仕組みが見当付きません、
(そのまま更新ページに飛んでもかまいませんが)
どうか、再度アドバイスをお願いいたします。
login.php
<?php
session_start();
$_SESSION['login'] = 0;
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>ユーザー認証</title>
</head>
<body>
<p>ユーザー認証</p>
<form action="login_check.php?<?=SID ?>" method="post">
<table>
<tr>
<td>ID: </td><td><input name="id" type="text"></td>
</tr>
<tr>
<td>PASS: </td><td><input name="pass" type="password"></td>
<tr>
<td colspan="2" align="center"><input type="submit" value="送信"></td>
</tr>
</tr>
</table>
</form>
</body></html>
login_check.php
<?php
session_start();
//データベース関連のデータをインクルードします
require_once("dbini.php");
//MySQLに接続します
$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
//データベースを選択します
$selectdb = mysql_select_db($DBNAME, $con);
$sql = "select name from members where uid = '{$_POST['id']}' and password = '{$_POST['pass']}'";
$rs = mysql_query($sql);
if (mysql_num_rows($rs) > 0) {
$_SESSION['login'] = 1;
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://" . $_SERVER["SERVER_NAME"] . dirname($_SERVER["REQUEST_URI"]) . "/list/111.php?" . SID);
exit;
}
mysql_close($con);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>認証失敗</title>
</head>
<body>
認証に失敗しました。<br />
<a href="login.php?<?=SID ?>">戻る</a>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで[]の使い方について
-
DBで検索結果に該当するデータ...
-
SELECT結果から動的にコンボボ...
-
htmlとphpの分離
-
WHERE句で一致しない場合を判断...
-
phpで複数の検索語を検索対象に...
-
実行時エラー3131 FROM 句の構...
-
VBAをつかってクエリの情報を抽...
-
テーブルの最後のレコードしか...
-
VBA ACCESS SQL...
-
テキストボックスに入れた内容...
-
csvをDBへ読み込んだら、NULLが...
-
【PHP】PDOでのMysqlから値を取...
-
会員登録したらメールが送られ...
-
<VB.NET>INSERT文でDBにデータ...
-
php postgres Insert と updat...
-
Pro*Cの構文エラー
-
値が「1」のカラム名を求めたい。
-
検索ワードを(1)クリアされない...
-
JAVA SQLServerException 列名 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで[]の使い方について
-
dbに登録したデータをphpのプル...
-
アラートでyes noを作りたいです。
-
phpでmysqlを使ってデータベー...
-
ヒアドキュメントについて
-
MySQLに保存した画像を表示したい
-
PHP 10件表示 "前へ" "次へ"
-
mysqlから取得した配列をカンマ...
-
DBで検索結果に該当するデータ...
-
PEAR DBでの行取得について
-
検索結果にラジオボタンを付加...
-
SELECT結果から動的にコンボボ...
-
検索結果をgoogleのように数件...
-
PHPでMySQLデータを呼び出し、w...
-
PHPでMySQLのデータを2次元配...
-
checkboxクリック時、SQLを実行...
-
php5.2.9に変更後に不具合について
-
PDOでLIKE検索
-
PHP+MySQLでの配列のinsert文に...
-
PHP・MySQL使用で、年齢制限を...
おすすめ情報