PHPを学ぼう!

▼PHPを学ぶチャプターです。


フリーランスの求人サイト

 

素材メニュー

 ◆Chapter 1

 ◆Chapter 2

 ◆Chapter 3

 ◆Chapter 4

 

制作ヒント

 ◆制作のヒント

 

レッスンメニュー

 ◆Chapter2 練習問題

 ◆Chapter3 DB練習問題

 

サイト運営者がPHPを学んだ
お勧めの書籍です!
これ一冊で基本的なPHPの仕組み、簡単なプログラムの作成、SQLiteを使ったデータベースなどかなり学べる要素が詰まっています!

↓↓↓ ↓↓↓

PHPレッスンブック―PHP5対応

新品価格
¥2,520から
(2013/2/24 04:38時点)

 

 

サイバーテロの技法について書かれた書籍です!
ハッカーの手法を知ることでご自身のサイトがハッカーに攻撃されたときそれを防ぐ手法を紹介しています。

↓↓↓ ↓↓↓

PHPサイバーテロの技法―攻撃と防御の実際

新品価格
¥1,890から
(2013/11/5 10:09時点)

 

 

★初年度100円! サブドメインやメールアカウントを無制限に設置できます。
PHPやCGIは勿論、WordPress、Movable Type Open Source、掲示板、ブログ、ショッピングサイトなどが簡単に導入できるので複数サイトを運営したい場合に便利なサービスです。

↓↓↓ ↓↓↓

 

PHPが動作するサーバー

 

はじめてのHP | 無料素材 | タグ辞典 | CSSガイドEX | PHPを学ぼう!

◆Answer! - 練習問題9の答え

【解答例】

01|<?php
02|  $name = isset($_POST['name']) ? $_POST['name'] : "";
03|  $age = isset($_POST['age'])? $_POST['age'] : "";
04|  $mail = isset($_POST['mail'])? $_POST['mail'] : "";
05|  $submit = isset($_POST['submit'])? $_POST['submit'] : "";
06|
07|  if($name == ""){
08|    $name = '<font color="red">未入力</font>';
09|  }else{
10|    $name = htmlspecialchars($name);
11|  }
12|  if($age == ""){
13|    $age = '<font color="red">未入力</font>';
14|  }else{
15|    $age = htmlspecialchars($age);
16|  }
17|  if($mail == ""){
18|    $mail = '<font color="red">未入力</font>';
19|  }else{
20|    $mail = htmlspecialchars($mail);
21|  }
22|?>
23|<html>
24|<head><title>練習問題9 / PHPを学ぼう!</title></head>
25|<body bgcolor="#FFFFFF">
26|<?php
27|  if($submit != "送 信"){
28|    echo '▼情報を入力してください。<br />
29|<form action="lesson9.php" method="post">
30|【お名前】<br />
31|<input type="text" name="name" maxlength="8" size="12"><br />
32|【年 齢】<br />
33|<input type="text" name="age" size="4" maxlength="2"><br />
34|【メールアドレス】<br /> 35|<input type="text" name="mail" size="20" maxlength="10"><br /> 36|<br />
37|<input type="reset" value="リセット">
38|<input type="submit" name="submit" value="送 信">
39|</form>
40|';
41|  }else{
42|    echo '▼入力された情報です。<br />';
43|    echo '<br />';
44|    echo '【お名前】<br />';
45|    echo '  ' .$name. '<br />';
46|    echo '【年 齢】<br />';
47|    echo '  ' .$age. '<br />';
48|    echo '【メールアドレス】<br />';
49|    echo '  ' .$mail. '<br />';
50|    echo '<form action="lesson9.php" method="post">';
51|    echo '<input type="submit" name="submit" value="戻 る">';
52|    echo '</form>';
53|  }
54|?>
55|</body>
56|</html>

 

このコードの動作確認をしてください。
サンプルページ より確認できます。

 

サンプルページ で動作確認をすると、お名前、年齢、メールアドレスに値を入れて送信すると値が受け渡されているのがわかりますね。
では、いずれかの値をブランクにして送信してみてください。
値が無いものは、 "未入力" と表示します。
このコードでは、文字や数字の入力制限を設けていません。
だから年齢にアルファベットなどを入力することができます。
通常は、確認するようなプログラムを追加することをお勧めします。

 

では、コードについて説明していきます。

 

2行目の

$name = isset($_POST['name']) ? $_POST['name'] : "";

ですが、ここで三項演算子を使っています。
三項演算子の書式は次のとおりです。

(式1) ? (式2) : (式3);

三項演算子とは、式1が "TRUE" なら式2を実行し、 "FALSE" なら式3を実行します。
if 構文にとても近い存在ですが、大きな違いは簡単な書式で "TRUE" か "FALSE" を返しそのまま変数を宣言し代入できるところです。
2行目では、 $name の変数に結果を代入しています。
結果、 $name の変数が宣言されたことになります。

 

isset( ) 関数はその値が存在するかどうかを判定する関数です。
これら踏まえたうえで2行目を説明すると、式1にあたる isset($_POST['name']) で "POST" から 送信された name の値($_POST['name'])が存在するかどうかの条件となっています。
その条件により式2の場合(TRUE)は、 " $_POST['name'] " の値、 式3の場合(FALSE)は、"" (ブランク)の結果を $name に返しています。

 

さて、この三項演算子って必要なのでしょうか?
PHP バージョンが 5.0 以下のサーバーでは宣言されていない変数は無視してくれたので三項演算子を書く必要もなかったのですが、最近では殆どのサーバーが 5.0 以上となりました。
このバージョンアップにより、宣言されていない変数が突然登場するとエラーを出すようになったのです。
その為、三項演算子でわざわざ値があれば値を入れて値が無ければブランクにする必要があるのです。
セキュリティ面でそうした方が良いということでしょうね・・・。

 

$age、 $mail、 $submit も、 $name 同様の処理をします。
ところで $submit の変数が増えているのに気づきましたよね。

これは、 form の送信ボタン( type="submit" )の name 属性で submit を指定し、パラメーター値として "送 信" を送っているのです。
何故、そのように指定しているのかというと送信ボタンを押したかどうかの判定をする為です。

 

7行目からの if 構文では、 $name 、 $age 、 $mail に値が存在しなければ、未設定の文字を表示させ、そうでなければ値を表示させるようにしています。

値をページに表示する際、セキュリティ向上のため htmlspecialchars 関数を使っています。
htmlspecialchars 関数は、特殊文字をHTMLエンティティに変換する処理をします。
例えば、次のような悪意のあるコードを form から送信したとします。

<script>危険なスクリプト</script>

受け取ったパラメーター値をこのまま表示させた場合、スクリプトが実行されてしまうのです。
それを防ぐのに HTML エンティティに変換する処理をさせます。
その結果が次のとおりです。

&lt;script&gt;危険なスクリプト&lt;/script&gt;

HTML エンティティに変換されると、ホームページ上見た目は同じでも内部的には文字列と同じ扱いになります。
危険なスクリプトを書き込まれても、動作を制限することができるのです。

 

27行目の if 構文では、送信ボタンが押されたかどうかを判定しています。
値が存在すれば、41行目の else の処理を実行します。

 

if($submit != "送 信"){ .... }

条件式の $submit != "送 信" の " != " は、この条件でなかったらという条件です。
" = " の前に " ! " が付くことで反対の意味になるのです。
この条件下では、条件が "FALSE" なら内容を実行し、 "TRUE" なら else 内を実行するということになります。

 

ところで、このコードでは echo の使い方が違うのに気づいたでしょうか?
最初の echo では、複数行にかけて使用しています。
後者では、1行1行に echo を使用しています。
筆者は、面倒くさがりなので前者を使っていおり、こういうことプログラマーの曲とでもいうのでしょう。
見た目(内部的)は、後者の方が綺麗に見えます。
どちらを使うかは、貴方次第です(笑)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ex-mode.net | ツールEX | 素材EX | アフィモール | 初級者向 初めてのホームページ作り | Htmlタグ辞典 | 初めてのプランター菜園 | リンク・ボード
気のみ気のままなブログ | CSSガイドEX | ホビ★コレ | 班長日記!

▲UP

Copyright (C) ex-mode.net 2018. All Rights Reserved.