php講座 復習の巻 PDF版で見る
今日はphpの復習をしてみましょう。まずは、リハビリから
phpとは?phpはハイパーテキスト プロセッサーの略です。Webサーバーでphpモジュールとして組み込まれ、サーバー側で実行され、その結果がHTMLソースとしてブラウザーに帰ってくる仕組みです。
Webサーバーの代用品xamppインターネット上のWebサーバーに公開する前の状態でテストするために、代用品としてxamppツールがあります。みなさんのパソコンにはxamppがインストールされていますので、xamppのapacheをstartしましょう。
xamppのapacheは最初からphpモジュールが組み込まれています。レンタルサーバーでphp対応のところはphpモジュールが組み込まれていますので、phpを実行することができます。
htdocsがドキュメントルートxamppにphpソースを置く場合は、c:\xamppフォルダーの直下のhtdocsがドキュメントルートになりますので、そのフォルダー以下にソースを置きます。
C:\xampp\htdocs\birthdaystar\index.php に置いた場合、ブラウザーから
http://localhost/birthdaystar/index.php でアクセスすることができます。
これが、chobi.net等レンタルサーバーの場合には、public_htmlフォルダーがドキュメントルートになりますので、
/public_html/birthdaystar/index.php に置いた場合は、ブラウザから
http://ドメインアドレス/birthdaystar/index.php でアクセスできます。
htdocsやpublic_htmlはブラウザーでは記述しません。注意してください。
では、今度は少しプログラムを作成してみましょう。phpのプログラムはhtmlのソース中に <?php と ?>でサンドイッチして宣言します。
変数の復習英数字の頭に$をつけると変数として使えます。変数にはいろいろなデータを保存できます。
- 課題1:htdocsの配下にasakatuフォルダーを作り、その中にsample1フォルダーを作ります。その中で変数 $nameに自分の名前を設定し、画面に表示するindex.phpを作成しましょう
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>課題1</title> </head> <body> <h1> <?php $name = '(自分の名前)'; print($name); ?> </h1> </body> </html>
HTMLでは以下のようなformを作ると、サーバーにデータを送ることができます。
<form action="index.php" method="get"> <input type="text" name="abc" id="abc"> <input type="submit" value="送信"> </form>
この場合、GET方式でデータがサーバーに送られます。GET方式はURLに付加して送る方法です。渡されるのは、カレントフォルダーのindex.phpです。
index.phpでは$_GETで変数を受けます。
$abc = htmlspecialcharas($_GET['abc'],ENT_QUOTES);
- 課題2:sample2フォルダーを作成、index.htmlからsample2.phpへ名前をGETで渡すプログラムを作りましょう
index.html
<!DOCTYPE html> ・・・・・ <form action="sample2.php" method=”get”> <input type="text" name="myname" id="myname"/> <input type="submit" value="送信"> </form>
sample2.php
<!DOCTYPE html> ・・・・・ <?php $name = htmlspecialchars($_GET['myname'],ENT_QUOTES); print($name); ?>
今回はGET方式でデータを送りました。ですから、実行した時、URLが次のようになります。
http://localhost/asakatu/sample2/sample2.php?myname=hisanaga
このGET方式では、渡すことができるデータ量に制限があります。そこでPOST方式を使ってみましょう。Method=”POST”とするだけで、POST方式に変わります。
- 課題3:sample3フォルダーを作成、index.htmlからsample3.phpへ名前をPOSTで渡すプログラムを作りましょう
index.html
<!DOCTYPE html> ・・・・・ <form action="sample3.php" method="post"> <input type="text" name="myname" id="myname"/> <input type="submit" value="送信"> </form>
sample3.php
<!DOCTYPE html> ・・・・・ <?php $name = htmlspecialchars($_POST['myname'],ENT_QUOTES); print($name); ?>
actionで他のソースを指定すれば、次にデータを渡すだけですが、actionを省略すると、自分自身に渡すことができます。
- 課題4:sample4フォルダーを作成、index.phpから自分へ名前をPOSTで渡すプログラムを作りましょう。1回目は空白、2回目以降は入力された名前が表示されます。
index.php
<?php error_reporting(E_ALL ^ ~E_NOTICE ^ ~E_DEPRECATED); ?> <!DOCTYPE html> ・・・・・ <form action="" method="post"> <input type="text" name="myname" id="myname" value="<?php htmlspecialchars($_POST['myname'],ENT_QUOTES); ?>"/> <input type="submit" value="送信"> </form>
1回目の起動と2回以降の起動を区別する必要がでてくる場合があります。
1回目とは、そのフォームが初めて起動された時で、初期化等をする場合があります。2回目以降は自分から自分へフォームデータを渡しているので、そのデータの処理が必要になります。
ちなみにソースの先頭のerror_reportingは、エラー出力の制御です。
If (empty($_POST) { 1回目 } else { 2回目以降 } <!DOCTYPE html> ・・・・・ <form action="" method="post"> <input type="text" name="myname" id="myname"/> <input type="submit" value="送信"> </form>
フォームに入力された値をチェックする場合は2回目以降でチェックする必要があります。1回目はデータがないのでチェックしようがありません。
- 課題5:sample5フォルダーを作成、index.phpから自分へ名前をPOSTで渡すプログラムを作りましょう。名前が入力されたらsample5.htmlに移動します。
index.php
if(!empty($_POST)) { if($_POST['myname']!='') { header('Location: sample5.html'); exit(); } } <!DOCTYPE html> ・・・・・ <form action="" method="post"> <input type="text" name="myname" id="myname"/> <input type="submit" value="送信"> </form>
sample5.html
<!DOCTYPE html> ・・・・・ 名前が入力されました
ここまでで、GETとPOSTを勉強しました。
GETやPOSTは、1回受け取ってしまえば、それでおしまいです。次に同じものを渡したいのであれば、そのたびにformを作って、INPUT領域を作って渡していかなければなりません。
それだと、複数の場面で共通で使用するログインIDなどのような変数を渡していくのは面倒です。
そのようなときにはセッション変数に保存すると、接続したブラウザを閉じるまでは、変数を保持することができます。
セッション変数を使用するときは、session_start()関数を使って、セッションの使用を宣言する必要があります。
- 課題6:sample6フォルダーを作成、課題5を改造して、名前をsample6.phpに渡すように変更しましょう。
index.php
session_start(); error_reporting(E_ALL ^ ~E_NOTICE ^ ~E_DEPRECATED); if(!empty($_POST)) { if($_POST['myname']!='') { $_SESSION['myname']=$_POST['myname']; header('Location: sample6.html'); exit(); } } <!DOCTYPE html> ・・・・・ <form action="" method="post"> <input type="text" name="myname" id="myname"/> <input type="submit" value="送信"> </form>
sample6.php
<!DOCTYPE html> ・・・・・ session_start(); print(htmlspecialchars($_SESSION['myname'],ENT_QUOTES));
さて、セッション渡しはうまくできましたか?
では、次回からは、授業でやらなかった部分などをやっていってみましょう。