• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セッションを使ったログインページでのエラー)

セッションを使ったログインページでのエラー

このQ&Aのポイント
  • セッションを使ったログインページでのエラーが発生しました。
  • 現在、某サイトのサンプルを使用して、セッションを使ってログインページを作成しています。
  • エラーの原因は、プログラムがPostgreSQLを使用しているため、MySQLを使用する場合にエラーが発生することです。

質問者が選んだベストアンサー

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.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
gsrbrk
質問者

お礼

ありがとうございます!! たしかにデーターベースに接続してませんでした。 ここについてはすでに勉強したのでなんとかなりました。 そしてちょっと質問の際に載せたプログラムも変えました。安全性という点では、おっしゃるとおり改善しないといけないですね。 ただなにゆえまだ初心者ですので、まずは簡単なプログラムを作成できるようにして、そこから、ご指摘されたとおり安全性の面でもその他の面でも改善できればいいなと思います。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • セッション

    phplibを使わないでユーザ認証を用いたwebサイトを作ろうと思います。 shinki.php => login.php => contents1.php=> contents2.php .... のような流れの構造で、直接contents1.phpなどに入られないようにセッションを使用したいと思います。 ユーザが持っているセッション名と、サーバー側のセッション名が一致するという条件だけでログインしたユーザと考えていいのでしょうか? 現在はこのような感じになっています。 まずshinki.phpでユーザー登録します。この時ユーザ情報と暗号化されたパスワードをDBに保存。 login.phpでユーザIDとパスワードを入力し、DBのデータと一致するとcontents1.phpに進む。この時セッションを発行し、idと暗号化されたパスワードをセッションに記憶させる。 contents(1 | 2).phpのコード <? session_start(); // PostgreSQL 接続 if (!($cn = pg_connect("dbname=****"))){die;} // SQL文 $sql = "select * from ***** where id='$_SESSION[id]'"; if (!($rs = pg_exec($sql))) {die;} $ct = pg_numrows($rs); for ($i = 0; $i < $ct; $i++) { $array = pg_fetch_array($rs, $i); } // セッションのパスワードとデータベースのパスワードが一致 if($_SESSION[pass] == $array['pass']){ login_html(); }else{ print "ログインしてください。"; } // PostgreSQL 切断 pg_close($cn); function login_html(){ print "<html><head><title><title></head><body>"; .... .... } ?> このような構造には、セキュリティー的な問題はあるのでしょうか? おそらくいろいろ問題があると思いますので、ご指導お願いします。 一般的なパスワード制のページではどのような処理をしているのでしょうか? よろしくお願いします。 os:linux httpd:apache1.3.27 postgreSQL php4.x.x

    • ベストアンサー
    • PHP
  • PHPとPostgreSQL接続 (スキーマ)

    いつもお世話になっております。 現在、PHP(5.3.1)とPostgreSQL(9.2)で開発をしております。 エラーが発生しており大変困っております。 こちらが発生するエラーです。 Warning: pg_exec() [function.pg-exec]: Query failed: ERROR: schema スキーマが見つからないとのことです。 そして、以下がコードとなります。 <?php // PostgreSQL Connect if (!($cn = pg_connect("host=*** port=*** user=*** password=*** dbname=***"))) { die; } // PostgreSQL Select $sql = "select * from t_test.na1"; if (!($rs = pg_exec($sql))) { die; } // PostgreSQL Get Records $ct = pg_numrows($rs); for ($i = 0; $i < $ct; $i++) { $item = pg_fetch_array($rs, $i); $txt = "${item[1]}"; } // PostgreSQL Disconnect pg_close($cn); ?> 現在のデータベースのスキーマについてですが「na1」と「public」の2つが存在しています。 試しに、na1とpublicのテーブルをまったく同じにして SQLの部分を「select * from t_test」に変更すると「public」側のテーブルが覗けます。 しかし、SQLの部分を「select * from t_test.na1」に変更すると「スキーマが見つかりません」 というエラーが発生してしまいます。 スキーマがあるにもかかわらずこのエラーがでてしまうため原因が分からず困っております。 もしお分かりになる方いらっしゃいましたら、教えていただければと思います。 何卒よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションとヘッダーの順序について

    session_name("WebID"); session_start(); を header("Content-Type: text/html; charset=UTF-8"); のあとに呼び出すとエラーになります。 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\php\index.php:56) in C:\xampp\htdocs\php\verify.php on line 3 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\php\index.php:56) in C:\xampp\htdocs\php\verify.php on line 3 やはりセッションを先に呼び出さないといけないのでしょうか? session_unsetというものを使えばこの順序でもうまくいきますか? index.phpからエラーが起きたファイルを表示させているので、 順序は変えにくいのですが、順序を変えなくてもクリアできる 方法があったら教えてください。

    • ベストアンサー
    • PHP
  • セッションをログインについて

    はじめまして。 今、セッションを使ったログインのページを作っています。 流れは、 1.ログインページでIDとパスワードを入力。 2.入力したID・パスワードがあらかじめMysqlに保存してあったのと一致していたら会員ページに移動。 3.セッションにID・パスワードを保存してブラウザを閉じない限り、次回はログイン無しで会員ページに直接いけるようにする。セッションに保存されてないときはログインページにもどす。 以上の流れにそってプログラムを作りました しかし1・2は上手くいったのですが3の部分がうまくいきません。セッションにIDとパスワードを保存することができてるようなのですが、ブラウザを閉じずに、いったん別にページに行き、もう一度会員ページにもどろうとすると、ログインページ戻されてしまい、もう一度ログインしなければいけません。 以下に今回のプログラムを書きました。このプログラムのどこを直せば、いいのかお分かりになる方いらっしゃいましたらアドバイスのほうよろしくお願いします。 使用環境は PHP 5.2.5(xampp使用) MySQL 5.0.51a register_globals = Onになっています。 /*ログインページは省略しました。パスワードとユーザーIDを入力してこのページに飛びます。*/ <?php function redirect($url) { header("Location: ".$url); exit; } session_start(); /*保存していたセッションが存在するか確認なければログインのページにもどす。$_SESSION['username']) の部分を$_POST…にしたのですがそれでも結果は同じでした。*/ if(empty($_SESSION['username']) || empty($_SESSION['password'])) redirect("loginpage.php"); $user = $_POST['username']; $pass = md5($_POST['password']); /*Mysqlへ接続。セッションの問題が解決したらMysql用のクラスを作る予定です。*/ $dbHost = "localhost"; $dbUser = "*****"; $dbPass = "******"; $dbDatabase = "mysql"; $db = mysql_connect("$dbHost", "$dbUser", "$dbPass") or die ("Error connecting to database."); mysql_select_db("$dbDatabase", $db) or die ("Couldn't select the database."); $result=mysql_query("select * from users where username='$user' AND password='$pass'", $db); $rowCheck = mysql_num_rows($result); /*ID・パスワードが間違ってたら、ログインページに戻す。*/ if(empty($rowCheck)) redirect("loginpage.php"); $row = mysql_fetch_array($result); /*IDとパスワードをセッションに保存*/ $_SESSION['username'] = $user; $_SESSION['password'] = $pass; if($rowCheck > 0) { while($row = mysql_fetch_array($result)) { } /*ログイン成功したら会員ページを表示。*/ echo "Login Succeeded!".$_SESSION['username'];/*←セッションに保存されてるかのテスト。ちゃんと表示されました*/ include("C:/xampp/htdocs/cvptoylibrary.com.au/assets/includes/link1.php"); include("C:/xampp/htdocs/cvptoylibrary.com.au/assets/includes/link3.php"); } else { /*ID・パスワードを間違えてたらログインページに戻す。*/ echo 'Incorrect login name or password. Please try again.'; redirect("loginPage.php" ); } ?>

    • ベストアンサー
    • PHP
  • 会員管理システムを作っているのですが、エラーが出て困っています。

    phpとsmartyで会員管理システムを構築しているのですが、以下のようなエラーが出て困っています。 エラー文 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\Login.class.php:1) in C:\xampp\htdocs\login.php on line 5 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\Login.class.php:1) in C:\xampp\htdocs\login.php on line 5 Warning: Smarty error: unable to read resource: "login.tpl" in C:\xampp\htdocs\Smarty.class.php on line 1092 このエラー文は何と言っているのですか? また、解決方法が分かる方、ご回答お願いします。

    • 締切済み
    • PHP
  • ZendFrameworlkでZend_Sessionがつかえません

    表題の通り、Zend_Sessionが使えません。 $session = new Zend_Session_Namespace('global'); と記述すると、下のエラーがでます。インスタンスを生成する部分を除けば 正常に動作し、他のZendFrameworlkコンポーネントは使える状態です。同じソースでもレンタルサーバ上では思い通りに動くので私のローカル環境の設定がおかしいと思うのですが、何を見たらいいでしょうか。 環境はWindowsVista、Apache 2.2.6、PHP 5.2.4(xampp)、ZendFramework1.0.3です。 Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'Session must be started before any output has been sent to the browser; output started in C:\xampp\htdocs\index.php/1' in C:\xampp\ZendFramework\library\Zend\Session.php:359 Stack trace: #0 C:\xampp\ZendFramework\library\Zend\Session\Namespace.php(116): Zend_Session::start(true) #1 C:\xampp\htdocs\index.php(22): Zend_Session_Namespace->__construct('global') #2 {main} thrown in C:\xampp\ZendFramework\library\Zend\Session.php on line 359

    • ベストアンサー
    • PHP
  • PHPで表示期間の指定がしたい

    PHPで表示期間の指定がしたい こんにちは、いつもお世話になっております。 数日間、PHPカテゴリでPHPの表示期間指定についてやり取りをさせていただいてました。 http://okwave.jp/qa/q6102388.html 質問の概要は、PostgreSQLのデータベースの情報を表示するPHPを今日以降の1ヶ月間分だけを表示したいというものです。 何度も回答をいただいてPHPを修正していたのですが、エラーが出てしまいます。 PostgreSQLのカテゴリで聞いたほうが良いのではないかと回答者様にアドバイスをいただき、こちらに伺いに参りました。 情報は以下の通りです。 (1)テーブルの構造と入ってるデータ ------------------------------------------------------------ ee 年月日(「20100811」の形式) ti 記事タイトル na 記事内容 ca カテゴリー ------------------------------------------------------------ (2)回答者様に修正していただいたソース =================================================== $sql = "SELECT ee,ti,na,ca FROM テーブル名 WHERE ca = 'カテゴリー名'"; if($ym != "")$sql .= " and TO_DATE(ee, 'YYYYMMDD') BETWEEN TO_DATE('{$ym}', 'YYYYMMDD') AND TO_DATE('{$ym}', 'YYYYMMDD') + '1 months' + '-1 days'"; $sql .= " ORDER BY ee ASC"; =================================================== (3)2で表示されたエラー =================================================== Warning: pg_exec(): Query failed: ERROR: operator is not unique: date + "unknown" HINT: Could not choose a best candidate operator. You may need to add explicit type casts. in PHPのアドレス on line 102 ------------------------------------------------ ▼101行目の内容 $result = pg_exec($sql); ------------------------------------------------ Warning: pg_numrows(): supplied argument is not a valid PostgreSQL result resource in in PHPのアドレス on line 103 ------------------------------------------------ ▼102行目の内容 $rows = pg_numrows($result); ------------------------------------------------ Warning: pg_freeresult(): supplied argument is not a valid PostgreSQL result resource in in PHPのアドレス on line 147 ------------------------------------------------ ▼146行目の内容 pg_freeresult($result); ------------------------------------------------ この後に、何も情報がなかった場合の規定のメッセージが表示されます=================================================== 以上です。 PHPもデータベースも恥ずかしながら無知のため、お力をお貸しいただけると助かります。 よろしくお願いします。

  • セッションを使ったログインページでのエラー

    前にもセッションを使ったログインページについて質問したものです。 上記の通りセッションを使ったログインページを作っております。 前回このソースを載せたときセキュリティー的にとても危険だというご意見をいただきました。何分まだ初心者ですのでどうかご了承ください。 ソース /*ログインのページは省略しました。ログイン後ID・パスワードが正しいか、そして訪問者がログインせずにこのページに直接アクセスした際にログインページにジャンプするようにするようにするプログラムです*/ <?PHP if (!isset($user) || !isset($pass)) { header( "Location: loginPage.php" ); } elseif (empty($user) || empty($pass)) { header( "Location: loginPage.php" ); } else { $user = addslashes($_POST['username']); $pass = md5($_POST['password']); $dbHost = "localhost"; $dbUser = "*****"; $dbPass = "*****"; $dbDatabase = "mysql"; $db = mysql_connect("$dbHost", "$dbUser", "$dbPass") or die ("Error connecting to database."); mysql_select_db("$dbDatabase", $db) or die ("Couldn't select the database."); $result=mysql_query("select * from users where username='$user' AND password='$pass'", $db); $rowCheck = mysql_num_rows($result); if($rowCheck > 0){ while($row = mysql_fetch_array($result)){ session_start(); session_register('username'); echo 'Success!'; header( "Location: checkLogin.php" ); } } else { echo 'Incorrect login name or password. Please try again.'; } } ?> このようなプログラムを作ったのですが、ちゃんとパスワードをいれても、ちゃんと認証されずに、ログインのページ戻されてしまいます。 おそらく if (!isset($user) || !isset($pass)) { header( "Location: loginPage.php" ); } elseif (empty($user) || empty($pass)) { header( "Location: loginPage.php" ); } の部分がおかしいのかと思いますがどう変えたら良いのかよく分かりません。また、おかしいと思った部分を削除したら普通にログインはできるのですが、今度は一度ログインしても他のページに移動した後もう一度このページに行くと、もう一度ログインしないとアクセスできなくなりました。 まとめると、お聞きしたいことは、2つです。 (1)紹介したのプログラムでログインしてもちゃんとログインが認証されない。これを解消するにはどうすればいいのか? (2)ユーザーがログインした後もう一度このページにアクセスした場合もう一度ログインさせなくてもいいようにすればどうすればよいのか。 もし可能でしたら、解決するためのプログラムを(さらに可能でしたら紹介したプログラムを生かした形で)添えてアドバイスしていただけないでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP初心者です。何処がエラーなのかさっぱり解りません。

    超初心者です。 PHPの勉強を始めたばかりで、いきなりつまずいています。 下記の表示になりエラーになっているのですが、何処がエラーなのか意味が解りません。 Parse error: syntax error, unexpected $end in C:\xampp\htdocs\phplesson\03\login.php on line 31 どなたか教えてください。 よろしくお願いします。 ----------------- <?php session_start(); $error_message = ""; //ログインボタンが押されたかを判定 if (isset($_POST["login"])) { if ($_POST["member_name"] == "php" && $_POST["password"] == "password") { //ログインが成功した証拠をセッションに保持 $_SESSION["login_name"] = $_POST["member_name"]; //管理者専用画面へWebブラウザをリダイレクトさせる $login_url = "http://{$_SERVER["HTTP_HOST"]}/phplesson/03/anq_result.php"; header("Location: {$login_url}"); exit; } $error_message ="メンバー名かパスワードを間違えています。"; } ?> <html> <body> <?php if ($error_message) { print '<font color="red">' .$error_message. '</font>'; } ?> <form action="/phplesson/03/login.php" method="post"> メンバー名:<input type="text" name="member_name" value="" /><br /> パスワード:<input type="password" name="password" value="" /><br /> <input type="submit" name="login" value="ログイン" /> </form> </body> </html>

    • ベストアンサー
    • PHP
  • OpenPNE3 ログイン画面がエラー

    OpenPNE3を実験的に導入しようとXAMPP上でインストールしてみましたが、インストールcmpleted!後、管理画面は正常なのですが、公開画面がhttp500の内部サーバエラーになりPHPログを見て、エラーになっているsfOpenPNESecurityUser.class.phpの中身見てもよくわかりません。対処法をおしえてください。 ・設定環境 Windows Server 2003 R2 OpenPNE-3.4.10 xampp 1.7.3 php 5.3.1 ・このサイトを見てインストール http://technology.rey-net.com/?eid=1155855 ・phpエラーログ [26-Apr-2011 15:06:01] PHP Fatal error: Cannot instantiate abstract class opAuthAdapter in C:\xampp\htdocs\OpenPNE3\lib\user\sfOpenPNESecurityUser.class.php on line 101