朝活資料

php講座 復習の巻 PDF版で見る

phpの基本

今日はphpの復習をしてみましょう。まずは、リハビリから

phpとは?

phpはハイパーテキスト プロセッサーの略です。Webサーバーでphpモジュールとして組み込まれ、サーバー側で実行され、その結果がHTMLソースとしてブラウザーに帰ってくる仕組みです。

phpの仕組み Webサーバーの代用品xampp

インターネット上のWebサーバーに公開する前の状態でテストするために、代用品としてxamppツールがあります。みなさんのパソコンにはxamppがインストールされていますので、xamppのapacheをstartしましょう。

xamppのコントロール画面

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>				
フォームデータをphpで受け取る

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));							

さて、セッション渡しはうまくできましたか?

では、次回からは、授業でやらなかった部分などをやっていってみましょう。