AN HTTPD ゲストブック/コメント集(2003年2月26日18:18)


bon3 bon3@hotmail.com 2003/03/08 00:09

中田さん、ありがとうございました。
私は、C:\php\php.iniのみ編集し、C:\WINNTにコピーしたphp.ini
の編集をしていませんでした。ご迷惑をおかけしました。
やっと接続できました。
また、変数の場合のクォートも理解できましたが、下記のような
ホスト名=localhost、user名=japan、password=abcd、db名=staff
の場合
1.
mysql_connect(localhost,japan,abcd);
mysql_select_db(staff);
2.
mysql_connect('localhost','japan','abcd');
mysql_select_db('staff');
3.
mysql_connect("localhost","japan","abcd");
mysql_select_db("staff");
どれが正解なのでしょうか。私はケース1で処理してきました。(レンタルサーバですが)
私には、文字列そのものを表すのですから、全部正解のように思えるのですが
どうなんでしょうか。
いつもすいません。ご指導を賜りたいのです。


中田昭雄 nakata@st.rim.or.jp 2003/03/07 21:00

bon3 さん、
その trace.log は、シングルクォート(')にした場合のログですね。
エラーメッセージで、ユーザ名が '$adm_id@localhost'になっていることからもわかりますが、シングルクォートでは、「$adm_id」 という文字列そのものになるのです。 つまり一文字目が $ になり、二文字目が a ということです。"$adm_id" や $adm_id だと変数adm_id ということで、その中身の意味になります。
ですからエラーメッセージがそのように変わるのは当たり前です。

さて本題で、trace.log を見るとちゃんと POST リクエストで adm_id=xxx で adm_pass=xxxxx となっているのに「正しい情報を入力してください。」と出ているので、 $adm_id や $adm_pass が空になっていることがわかります。
繰り返しになりますが、これは register_globals = Off の時の症状なので、どうもおかしいですね。

register_globals = On にしたいう php.ini はどこに置いてあるのですか?
Windowsフォルダ(C:\windows や C:\winnt) にあってそれを編集していますか?
よくわからなければ、
http://homepage1.nifty.com/yito/anhttpd/faq/php.html
を見て正しく設定してください。


A 2003/03/07 00:17

mysql_connect("localhost",$adm_id,$adm_pass);
でどうでしょう?MySQLはちゃんと動いてますよね?(^^;


bon3 bon3@hotmail.com 2003/03/06 22:49

中田さん、いつもご指導ありがとうございます。
ご指摘どおりやった結果(register_globals = On )のtrace.logは以下のとおりです。

---------------------------------------------------------------------------- 
<<< s=472: Thu Mar 06 22:35:55 2003 <<<
GET /staff/admin.html HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Referer: http://192.168.1.11/staff/menu.html
Accept-Language: ja
Accept-Encoding: gzip, deflate
If-Modified-Since: Wed, 29 Jan 2003 07:04:00 GMT
If-None-Match: "3e377ce0-2d9"
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)
Host: 192.168.1.11
Connection: Keep-Alive

>>> s=472: Thu Mar 06 22:35:55 2003 >>>
HTTP/1.1 304 Not Modified
MIME-Version: 1.0
Server: AnWeb/1.40d
Date: Thu, 06 Mar 2003 13:35:55 GMT
Content-Type: text/html
Accept-Ranges: bytes
Content-Length: 729
ETag: "3e377ce0-2d9"
Last-Modified: Wed, 29 Jan 2003 07:04:00 GMT

<<< s=376: Thu Mar 06 22:36:02 2003 <<<
POST /staff/admin01.php HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Referer: http://192.168.1.11/staff/admin.html
Accept-Language: ja
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)
Host: 192.168.1.11
Content-Length: 63
Connection: Keep-Alive
Cache-Control: no-cache

adm_id=xxx&adm_pass=xxxxxx&but_loginxxxxxxxx
>>> s=376: Thu Mar 06 22:36:02 2003 >>>
HTTP/1.1 200 OK
Transfer-Encoding: chunked
>>> s=376: Thu Mar 06 22:36:02 2003 >>>
Content-type: text/html
X-Powered-By: PHP/4.2.3

>>> s=376: Thu Mar 06 22:36:02 2003 >>>
B3
>>> s=376: Thu Mar 06 22:36:02 2003 >>>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta name="robots" content="noindex">
<title>社員名簿・管理者用ページ</title>
</head>
>>> s=376: Thu Mar 06 22:36:02 2003 >>>

>>> s=376: Thu Mar 06 22:36:02 2003 >>>
A0
>>> s=376: Thu Mar 06 22:36:02 2003 >>>


<b>Warning</b>: Access denied for user: '$adm_id@localhost' (Using password: YES) in <b>C:\httpd\Documents\staff\admin01.php</b> on line <b>8</b>

>>> s=376: Thu Mar 06 22:36:02 2003 >>>

>>> s=376: Thu Mar 06 22:36:02 2003 >>>
BA
>>> s=376: Thu Mar 06 22:36:02 2003 >>>


<b>Warning</b>: MySQL Connection Failed: Access denied for user: '$adm_id@localhost' (Using password: YES)
in <b>C:\httpd\Documents\staff\admin01.php</b> on line <b>8</b>

>>> s=376: Thu Mar 06 22:36:02 2003 >>>

>>> s=376: Thu Mar 06 22:36:02 2003 >>>
1E
>>> s=376: Thu Mar 06 22:36:03 2003 >>>
正しい情報を入力してください。
>>> s=376: Thu Mar 06 22:36:03 2003 >>>

>>> s=376: Thu Mar 06 22:36:03 2003 >>>
12
>>> s=376: Thu Mar 06 22:36:03 2003 >>>
</body>
</html>
>>> s=376: Thu Mar 06 22:36:03 2003 >>>

>>> s=376: Thu Mar 06 22:36:03 2003 >>>
0
---------------------------------------------------------------------------
8行目のmysql_connect(localhost,'$adm_id','$adm_pass');のように(')をつけるのとつけないのと
warningがちがいます。このことは当問題と関係あるのでしょうか。
長くなって申し訳ございません。
よろしくご教授をお願いいたします。


中田昭雄 nakata@st.rim.or.jp 2003/03/06 21:14

bon3 さん、
ちょっとはっきりわかりませんが、register_globals = Off になっていたのですよね?
本当に register_globals = On にしてもだめだったのですか? ブラウザのキャッシュを見たのではありませんか?

というのは、register_globals = Off の場合の典型的なエラーだと思うのです。
admin01.phpのそのやり方では register_globals = Off の場合は正常に動作しないということはPHPユーザの間では有名な話です。
とりあえず、
http://homepage1.nifty.com/yito/namazu/gbook/20020524.1808.html
や、その中にもありますが、
http://ns1.php.gr.jp/pipermail/php-users/2001-December/004262.html
http://ns1.php.gr.jp/pipermail/php-users/2002-April/006600.html
あたりも参考にしてください。
つまり、register_globals = Off の場合、$adm_id, $adm_pass は空になります。
それに加えて、admin01.php では mysql_connect の後でID,パスワードが空かどうか調べているので、それではそのエラー(警告)になって当然だと思います。
admin01.php の8行目(line 8)が mysql_connect の行なのですよね(?)。

Linux/Apache/PHP で動くからいいはずだと思いこむのは(この場合は)考え違いでしょう。
PHPのバージョンが古い場合はデフォルトで register_globals = On になっているからです。PHPのバージョンやphp.ini(/etc/php.ini かな?)の中身を確認してください。
また、そのままでも ID,パスワードを空にしてログインしてみれば同様なエラーになるでしょう。それは admin01.phpでは、空かどうかを確認する前に mysql_connect を実行しているからです。

話をWindowsの場合に戻すと、register_globals = On にしてから、AN HTTPD と IE を両方とも立ち上げ直して確認してみてください。本当にそれでもだめなら、その時のトレースログ(trace.log)を送ってください。
あるいは、admin01.php で mysql_connect の前に $adm_id, $adm_pass が空かどうかチェックしてもらうのでもいいのですが。


bon3 bon3@hotmail.com 2003/03/05 22:54

中田さん、いつもお世話になります。レスが遅くなり申し訳ございません。
2/26付け、管理者ログイン専用画面が動作しないという件ですが、
「php.ini で register_globals = Off になっているのではありませんか?」
ということで、On,Off両方ためしましたが

Warning: Access denied for user: 'ODBC@localhost' (Using password: NO) in C:\httpd\Documents\staff\admin01.php on line 8  
Warning: MySQL Connection Failed: Access denied for user: 'ODBC@localhost' (Using password: NO) in C:\httpd\Documents\staff\admin01.php on line 8
の結果です。
なお私が書いたadmin01.phpは以下のとおりです。
<?
$access = mysql_connect("localhost","$adm_id","$adm_pass");
#IDもしくはパスワードが空欄の場合
if($adm_id == "" || $adm_pass == "")
{
echo "正しい情報を入力してください。";
}
#mysqlの接続が成功すると1が返ってくる。失敗した場合表示するメッセージ
elseif($access != "1")
{
echo "パスワードもしくはIDが違っています。";
}
else{
?>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<center>
<h2>管理画面 </h2>
<p>
<a href="admin02.php"><? echo date("Y 年 m 月 d 日 H 時 i 分 s 秒"); ?>の社員一覧表が表示されます。</a><br>
<br>
また、レコードの追加・更新(変更)・削除画面へのリンクがあります。
</p>
</center>
<?
}
?>

2/26にもかきましたが、RedHat Linux/Apache/MySQL/PHPでは動作いたしております。
お気づきの点がありましたなら、是非ご指導をお願いいたします。


中田昭雄 nakata@st.rim.or.jp 2003/02/28 20:25

bon3 さん、
php.ini で register_globals = Off になっているのではありませんか?
admin01.php で $adm_id や $adm_pass を使っているのではないかと思います。

http://homepage1.nifty.com/yito/namazu/gbook/20020524.1808.html
あたりも参考にしてください。


bon3 bon3@hotmail.com 2003/02/26 23:53

中田さん、いつもお世話になります。

(1) admin.html→admin.phpにてログイン成功としたいのですが、、

<h2>管理者ログイン専用画面</h2> 
<form action="admin01.php" method="post" name="adm01" id="adm01">
ログインID:<input name="adm_id" type="text">
パスワード:<input name="adm_pass" type="password">
<input name="but_login" type="submit" value="ログイン">
</form>
以下が結果です。
Warning: Access denied for user: 'ODBC@localhost' (Using password: NO) in C:\httpd\Documents\staff\admin01.php on line 8 
Warning: MySQL Connection Failed: Access denied for user: 'ODBC@localhost' (Using password: NO) in C:\httpd\Documents\staff\admin01.php on line 8
正しい情報を入力してください。
以上が一例です。その他ご指導して頂きたいerrorもありますが、次回に回したいと
おもいます。よろしくお願いいたします。


中田昭雄 nakata@st.rim.or.jp 2003/02/26 21:31

bon3 さん、
いとさんの
http://homepage1.nifty.com/yito/anhttpd/faq/php.html
は見ていますよね(?)。
本を読むというより、何がどう動かないのかを調べていく方が早いと思います。
今わかっている不具合は、ユーザ認証や PHP_SELF を使っている場合などでしょう。
AN HTTPD で使う場合の話を詳しく説明している本はないでしょうし。。。
動かないプログラム(のうち一番簡単そうなもの)は何ですか?


bon3 bon3@hotmail.com 2003/02/26 18:18

いつもお世話になります。
web dbを始めたところです。
私の契約しているレンタルサーバ(Linux・RedHat/Apache/MySQL/PHP)では作動するプログラムも、私が作ったWEB SERVER(Win2000pro/an httpd/MySQL/PHP)では動かないことが多いのです。
どうしてもWin2000proとan httpdは使いたいのですが、どなたか参考書籍をご紹介願えませんか。
宜しくお願いいたします。