多くのWebサイトでは、Web表示にPHP言語を使用している。
PHPはサーバーサイドのプログラムで、サーバー内で働き、HTMLで書かれたプログラムを作り出し、
それがユーザー側で表示される。HTMLのみで書かれたプログラム
は一通りの表示しかできないが、PHPは状況、条件により異なる
HTMLプログラムを作り出すから、柔軟で多様な表示が可能になる。
サーバーサイドのプログラムであるため、ユーザがPHPプログラムを書いても
自分のパソコン内でこれを実験してみる事はできない。
(仮想サーバをパソコン内に作る
ことによって、実験を可能にできるが、これは、PHPをある程度習得した後にトライすべきことである。)
そこで、PHP道場においては、PHP実験をできる場所を作った。自作のPHPプログラムを
投稿すれば、実験結果が表示されるようになっている。
PHP言語入門
1. |
PHPプログラムは、拡張子を .php とし、euc コードで書く。
|
2. |
PHPプログラム文は、<?php で始まり、?> で閉じる。
これをPHP文と呼ぶ。
|
3. |
html文中にPHP文を割り込ませることが出来る。
|
4. |
PHP文は一行ごとに、文末に、 ; をつける。途中で改行しても、
; が来るまで一行と見なす。
|
例文 0( PHPのみのプログラム、、 出力指示 echo を用いている。)
<?php
echo "現在の日時と時刻は 2022年09月29日 14時42分55秒です。";
?>
この白枠内の文をコピペして、 test_000.php 等という名で格納実行してみましょう。
その結果、下のようなHTML文が作られ表示されます。
<html>
<body>
現在の日時と時刻は 2022年09月29日 14時42分55秒です。
</body>
</html>
これでは、いつ見ても時刻は変わりません。見た瞬間の時刻を表示させたいと思えば、
PHPの機能に頼るしかありません。
例文 1( PHPのみのプログラム、、 出力指示 echo とPHP関数 date() を用いている。)
<html>
<body>
"現在の日時と時刻は ".date("Y年m月d日 H時i分s秒")."です。";
</body>
</html>
この白枠内の文をコピペして、 test_001.php 等という名で格納実行してみましょう。
今度は、いつ見ても見た瞬間の時刻を表示しているでしょう。
PHPの説明
echo: 文字列を出力 echo "文字列";
date(): 年月日時刻を出力 date("Y年m月d日 H時i分s秒");
関数date()の使い方は色々あります。「php date()」で検索してください。
例文 2(繰り返し文 for を用いる。)
HTML文の例として表を作成するプログラム test000.html を示した。表の行が多いと、HTMLでは
同じようなことを何度も繰り返さなくてはならない。PHP には繰り返し動作を行わせる for文が
用意されている。これは、非常によく用いられるものであり、効果は絶大である。
その構造から見てみよう。
<?php
for($i=1;$i<7;$i++){
?>
繰り返し部分
<?php
}
?>
解説
for文の()の中は、; で3つに区切られている。
最初の $i=1 は、繰り返し変数 $i の初期値が 1 であることを示す。
中間の $i<7 は、繰り返しの終了が6であることを示す。
最後の $i++ は $i=$i+1 の省略形で、繰り返し番号を1だけ増やす。
{ }は繰り返しの範囲をしめす。
表を作るプログラムは次のようになる。
<html>
<body>
<table width="100%" border="1px">
<?php
for($i=1;$i<7;$i++){
?>
<tr><td>
<?php echo $i;?>
</td><td></td<td></td><td></td><td></td></tr>
<?php
}
?>
</table>
</body>
</html>
上の緑地の部分をコピーし、test000.phpという名前で前にtest000.htmlを納めたフォルダ内に格納する。
html、 phpのどちらを実行しても同一の表示を得る。
例文 3(判断文 if を用いる。)
ユーザがWebを開いたとき、朝なら「おはよう」、昼は「今日は」、夜なら「今晩は」
とするにはどうするか? 開いたときの時刻は前述の date("H") で分かるが、時刻の分類には、
if文が使われる。
このように、分類、判断、場合分けなどが必要な場合は非常に多い。そのときに用いられる
if文について、その構造から見てみよう。
<?php
if(論理文){
?>
真の場合の処理
<?php
}else{
?>
偽の場合の処理
<?php
}
?>
解説
論理文(論理式)とは、真か偽かを判別できる、$x>0 $x==0 $name=="大谷" などの
二値論理文をいう。
ちなみに、論理文では「等しい」は == で表す。
また、 $x<-1 and $x>1 $x<=-1 or $x>=1
などの複合論理も論理文である。
また否定には ! を用いる。$x!=0
上に述べたことは二段判断である。朝昼晩のような三段判断の場合は、 else の部分が、
elseif なり、一段判断が増えるが、その
プログラムは次のようになる。
<html>
<body>
<?php
$h = date("H");
if ($h < 10) {
echo "おはよう";
} elseif ($h < 18) {
echo "こんにちは";
} else {
echo "こんばんは";
}
?>
</body>
</html>
上の緑地の部分をコピーし、test003.phpという名前で前に納めたフォルダ内に格納し、
実行してみよう。
例文 4( スーパーグローバル変数 $_GET() を用いる。)
[注意]この文は
セキュリティ上問題があります。後で、対策を示します。
Webを双方向のものにする重要なhtmlのタグが、 formタグである。このタグは、読者に入力を
促す Box を作る。ところが、入力データを扱えるhtmlプログラムはなく、データを受け取ることが
できるのは、PHPプログラムである。
<html>
<body>
書き入れ文字は「<?php echo $_GET['message']; ?>」です。
</body>
</html>
この白枠内の文をコピペして、 test_002.php 等という名で格納し、
test_002.php?message=Tom(半角) を実行してみましょう。
全角を書き入れると、文字化けします。 文字化けを避けるには、
3行目を
書き入れ文字は「
<?php echo mb_convert_encoding($_GET['message'],"EUC-JP"); ?>
」です。
と置き換えます。すると、文字化けはなくなります。
例文 3 ( 例文 2と同じ内容をhtml文の form文を使う。)
<html>
<body>
<?php
if(!isset($_POST["message"])){
?>
<form action="test_003.php" method="post">
<input type="text" name="message">
<input type="submit" name="submit" value="送信">
</form>
<?php
} else {
$str="書き入れ文字は「".mb_convert_encoding($_POST["message"],"EUC-JP")."」です。";
print ($str);
}
?>
</body>
</html>
この白枠内の文をコピペして、 test_003.php 等という名で格納実行してみましょう。
例文 4 ( 本格的formの例、htmlとphpとを使う。)
<html>
<body>
<h1>皆さんの声 ー掲示板ー</h1>
<form action="test_form.php" method="post">
苗字:<input type="text" name="myouji" size="10" required>
名前:<input type="text" name="name" size="10" required>
性別:<input type="radio" name="sex" value="male" checked>男
<input type="radio" name="sex" value="female">女 年齢
<select name="nendai">
<option value=10>10歳代</option>
<option value=20>20歳代</option>
<option value=30>30歳代</option>
<option value=40>40歳代</option>
<option value=50>50歳代</option>
<option value=60>60歳代</option>
<option value=70>70歳代</option>
<option value=80>80歳代</option>
<option value=90>90歳代</option>
<option value=100>100歳代</option>
</select>
<br>
<textarea name="koe" rows="4"cols="70">ここに皆さんの声を記入してください。</textarea><br>
<input type="submit" value="送信"><input type="reset" value="リセット">
</form>
</body>
</html>
この白枠内の文をコピペして、 test_form.html という名で格納実行します。
<?php
// D:\YWV\Apache\htdocs\www\Kanrisitu\School_PHP\test_form.html
//苗字と名前(必須)
if (($_POST["myouji"]==="")||($_POST["name"]==="")){
$errors[] = "空です。";
}else {
$myouji = $_POST["myouji"];
$myouji = mb_convert_encoding($myouji,'EUC-JP');
// $myouji = str_replace($space, "", $myouji);
// $myouji = trim(mb_convert_kana($myouji, "s", 'EUC-JP'));
$name = $_POST["name"];
$name = mb_convert_encoding($name,'EUC-JP');
}
$sex = $_POST["sex"];
$nendai = $_POST["nendai"];
//声
if (isset($_POST["koe"])){
$koe = $_POST["koe"];
$koe = mb_convert_encoding($koe,'EUC-JP');
} else {
$koe = "";
}
print($myouji."<br>");
print($name."<br>");
print($sex."<br>");
print($nendai."<br>");
print($koe."<br>");
?>
この白枠内の文をコピペして、 test_form.php 等という名で格納します。