電子書籍の厳選無料作品が豊富!

現在某サイトのサンプルを使用して、
セッションを使ってログインページを作っています。ソースは以下です。

ファイル名loginPage.php
<?
session_start();
?>
//一部省略
<form action="loginExe.php" method="POST">
ログインID:<input type="text" size="15" name="fLoginID"><br>
パスワード:<input type="password" size="8" name="fPassword"><br>
<input type="submit" value="ログイン">
//以下省略

ファイル名loginExe.php
<?php
session_start();
$sql = "select password from userLogin where uid='$fLoginID'";
$r = pg_exec($SessDBConn, $sql);
if( pg_numrows($r) != 1 )
{
print "アカウントが違う、もしくはユーザ登録されていません。";
print '<a href="regForm.php">こちらから登録してください。</a>';
session_destroy();
exit;
}
if( pg_result($r, 0, "password") != $fPassword ) {
print "パスワードが違います。";
session_destroy();
exit;
}
session_register("sLoginID");
session_register("sPassword");
$sLoginID = $fLoginID;
$sPassword = $fPassword;
?>
//以下省略

これで実行してみたのですが
Warning: pg_exec(): supplied argument is not a valid PostgreSQL link resource in C:\xampp\htdocs\loginExe.php on line 6
Warning: pg_numrows(): supplied argument is not a valid PostgreSQL result resource in C:\xampp\htdocs\loginExe.php on line 7


「$r = pg_exec($SessDBConn, $sql);
if( pg_numrows($r) != 1 ) 」

エラーが出てしまいました。調べてみたところ、このプログラムはPostgreSQLを使用した際に使うものであって、私のようにMySQLを使うとエラーが出てしまいます。
今回質問したいのはではエラーの出た部分をどのようにかえればMySQLを使ったプログラムとして実行してくれるのかということです。

ご存知のかたがいらっしゃいましたら、アドバイスの方よろしくお願いいたします。

ちなみにいろいろサイトを調べて、エラーのところを
$r = $db->getOneRow($sql);
if( $r->password != $fPassword || !$r ) {
に変えてみたのですが、
Fatal error: Call to a member function getOneRow() on a non-object in C:\xampp\htdocs\loginExe.php< on line 6と「$r = $db->getOneRow($sql);」 の部分がエラーになってしまいました。

A 回答 (1件)

まず、データベースを使うには、データベースへの接続が必要です。


後、$fLoginIDは、$_POST['fLoginID']ですね。

データベース使用に関して、もう少し基礎を勉強してください。
リンクは、MySQL関数のリファレンスです。

まず、接続してそれからSQLを実行、結果を取得します。
生のRDBMSの関数を使うのもいいのですが、RDBMSごとに色々違いますので、PEAR:DBか、PHP5でしたら、PDOを使ったほうが良いかもしれません。

何を使うにしろ、まずは接続です。

このソースの某サイトはどこか知りませんが、SQLインジェクション攻撃できそうですね。
セキュリティ的にかなり、やばいサイトです。

ユーザーからの、入力をそのままSQLに組み込むと、SQLインジェクション攻撃ができることもあります。
あまり、参考としてはいいサイトじゃないでしょう。
RDBMSの種類にもよりますが、複数SQLを一回のクエリーで実行できるようなRDBMSですと、ユーザーテーブル全件削除できそう・・

参考URL:http://www.php.net/manual/ja/ref.mysql.php
    • good
    • 0
この回答へのお礼

ありがとうございます!!
たしかにデーターベースに接続してませんでした。
ここについてはすでに勉強したのでなんとかなりました。
そしてちょっと質問の際に載せたプログラムも変えました。安全性という点では、おっしゃるとおり改善しないといけないですね。

ただなにゆえまだ初心者ですので、まずは簡単なプログラムを作成できるようにして、そこから、ご指摘されたとおり安全性の面でもその他の面でも改善できればいいなと思います。
本当にありがとうございました。

お礼日時:2008/04/02 12:17

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