4.PHP_MySQL2
メモ:
・SQLの練習問題を出す。
xampp から mysql を起動し、管理ツールから SQLを入力して復習。
問題は、演習室のモニター上に表示。
・データ更新用ページの作成。
講義後半、ライブコーディングの予定。
・同一ネットワーク内の他のPCからXamppのApacheにアクセスできるように、設定を変更する。
設定方法)
・Webサーバを動かしているPC(演習用PC)のIPアドレスを調べる。
スタート → cmd
コマンドプロンプトから、
ipconfig
IPv4アドレス に記載の値を確認する。
上の画面では、192.168.2.104 がIPアドレス。
・ c:\xampp\apache\conf の
httpd.conf を修正する。
ServerName localhost:80
の部分で、
ServerName 192.168.2.104:80
など。
・ 他のPCからのアクセスを確認するには、
URL http://localhost/xampp/mypra.php の代わりに URL http://192.168.2.104/xampp/mpra.php
でブラウザから接続する。
■セッション管理の導入:
参考サイト: http://kaz.cyteen.nagoya-bunri.ac.jp/advprog2/mysql.html ※こちらに記載の 演習問題 は別の講義用のものです。今回使いません。
・ mypra.php にログイン用のページを用意する。 ファイル名 login.php
固定パスワードを適当に決め、phpコードで判定でOK
・ mypra.php を
データ表示用ページ、mypra_show.php
データ入力用ページ、mypra_ insert.php
データ削除用ページ、mypra_delete.php
に分割して、各ページに遷移用のリンクを作成する。
データ修正用ページ、mypra_update.php
を作成する。
セッション管理について
Webのアクセス方式(HTTP)には、ユーザとの通信の維持が必要なサービス、つまりセッション管理の仕組みが無いので、PHPでセッション管理用のコードを書く必要がある。
ユーザの行動:
・あるページAを見ている人が、別のページBへ進む
サーバ側の反応:
・ページAへのアクセス → データ送信
・ページBへのアクセス → データ送信
Webサーバは、ページAとBにアクセスしたユーザが同一人物であるか把握しない。
他にも、ブラウザを2つ起動し、それぞれのブラウザで、 ページAのURL と ページBのURLを直接入力して表示した場合、
サーバ側は、そのブラウザの利用者が誰であるか区別できない。
例えば、1~3ページに分かれたHTML文書を、同じ人が連続して読んでいるのかどうかを知ることは基本的にできません。
複数のページに分かれて入力された内容が、同一の利用者から入力されたものであることを保証する為には、サービスの利用中は、そのサービスの利用を終了するまでサービスのセッションを維持する仕組みが必要になります。
そこで、ある一定の処理の間は、同一の利用者が通信を維持していることを保証する、”セッション管理”というテクニックが必要になります。
下のプログラムで、連想配列、$_SESSION は、session_start() の実行後、同じ利用者が連続してアクセスしてきた場合、以前にアクセスしたときの値を記憶しています。
ブラウザを閉じたり、セッション終了コマンドが実行されるまで、セッション変数 $_SESSION に保存した値は、PHPのプログラムの終了後も保存されています。
ファイル名 session_test.php
<?php session_start(); // セッションの開始を通知。必ず先頭に書く $c = $_SESSION["count"]; // セッション変数の取り出し $c++; $_SESSION["count"] = $c; // セッション変数の格納 ?> <html> <body> <?php print $c; ?> 回目のアクセスです。 </body> </html>
・何回か session.php を再読込みして、アクセス回数の増加を確認する
・ブラウザを閉じて、session.phpを表示した場合、 セッション変数がリセットされることを確認する
ログイン画面の作成
セッション変数を利用した、ログイン画面の作成
セッション変数を利用して、正しいパスワードが入力された場合に、セッション変数 login に ok と記録し、
ログインが必要な各ページに、 セッション変数 login が ok であるか判定する部分を追加する。
ファイル名: login.php
ログインチェック用コードの例)
<?php session_start(); if(array_key_exists('password',$_REQUEST)) { echo "bb"; $password = $_REQUEST['password']; //入力フォームで入力された値の取り出し } else { echo "aa"; $password = ""; } //エラー抑制演算子@ //$password = @$_REQUEST['password']; //入力フォームで入力された値の取り出し ?> <html> <body> <?php if( $password == "1234" ) { $_SESSION["login"] = "ok"; // ログイン成功 // mypra_show.php へ移動 ?> <a href="http://localhost/xampp/mypra_show.php">データ表示画面</a> <?php } else { // ログインメッセージとパスワード入力欄を表示 ?> <form action="login.php"> パスワードを入力してください。<br> <input type="password" name="password"><br> <input type="submit" value="送信"> </form> <?php } ?> </body> </html>
mypra_show.php に以下を追加
1.パスワード入力無し、または、誤入力の場合の処理を追加
<h1>練習データベース</h1>
<?php
session_start();
$login = $_SESSION["login"]; //入力フォームで入力された値の取り出し
if($login != "ok") {
?>
※ログインしてください※<br>
<a href="http://localhost/xampp/login.php">ログイン画面</a>
<?php
} else {
if(!mysql_connect("localhost","root",""))
{
echo "<h2>".$TEXT['cds-error']."</h2>";
die();
}
mysql_select_db("mypra");
mysql_query("SET NAMES utf8");
}
?>
2.パスワードが正常入力された場合のみ、データを表示するように修正
<?php
if($login == "ok") {
?>
<h2>プロフィール表</h2>
・・・・テーブルのヘッダを表示するコード・・・・
・・・・テーブルのデータ表示、追加、削除のコード・・・・
?>
</table>
<h2>プロフィール追加</h2>
・・・・データ入力フォーム用コード・・・・
<?php
}
?>
</body>
</html>
※上記のプログラムのテストをするときの注意点:
・ブラウザを閉じるなどで、セッションを終了しないと、セッション変数の値は初期化されない
・ログアウトの処理:
セッションを終了して、セッション変数を初期化するために、関数
session_destroy( )
が利用できる。
このコマンドを実行する
logout.php
を作成して、セッション処理中のページからリンクを張れば、ログアウトページを作成できる。