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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
チェックボックスによる複数の...
-
PHPで[]の使い方について
-
DBで検索結果に該当するデータ...
-
MySQLでデータベースにデータin...
-
<VB.NET>INSERT文でDBにデータ...
-
実行時エラー3131 FROM 句の構...
-
SQL文が実行できません
-
PHP+MySQLでの検索結果の横並び...
-
VB.NET エラーになる箇...
-
PHPエラーが出て困ってます
-
LocalのNotesメールDBをVBAで参...
-
テキストボックスに入れた内容...
-
VBAをつかってクエリの情報を抽...
-
ASPでRecordCountが使用でき...
-
phpのエラーについてです
-
テーブルに入っているデータと...
-
データベースに存在するデータ...
-
MySQLにHTMLタグを挿入したい
-
DB Error: no such field
-
時刻型にNULLでセットしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アラートでyes noを作りたいです。
-
dbに登録したデータをphpのプル...
-
PHPで[]の使い方について
-
checkboxクリック時、SQLを実行...
-
php ログインフォーム作成
-
php5のコンストラクタをphp4仕...
-
PHPでMySQLデータを呼び出し、w...
-
phpでmysqlを使ってデータベー...
-
checkboxで複数選択して,OR...
-
SELECT結果から動的にコンボボ...
-
mysqlから取得した配列をカンマ...
-
DBで検索結果に該当するデータ...
-
sortable ギブアップです…助け...
-
ラジオボタンをループすること...
-
[php]mysqlデータ配列取得について
-
エクセルVBAについて
-
チェックボックスによる複数の...
-
文字化けが解決できません。お...
-
PHP、SQLite3のデーターでログ...
-
PHPとSmartyを使い、データベー...
おすすめ情報