カテゴリー : 2013年 8月

関数練習問題(配列)

  1. $data_1 = array(“PHP”,”図書館”,”のサンプルです”); $data_2 = array(“配列”,”同士を”,”結合します”);  という二つの配列型変数があります。これを結合して、ひとつの文字列にしてください。 ヒント → array_merge() , implode()
  2. 以前使用した$_SERVER[‘REQUEST_URI‘]で取得した文字列を文字列をexplode()関数で/で区切りファイル名のみを取得してください。 ヒント→array_slice()
  3. $data = (array(‘tenis’,'swimming’,'soccer’,'baseball)); という配列型の変数があります。 配列の要素をABC順で並び変えてください。実行結果 Array ( [0] => baseball [1] => soccer [2] => swimming [3] => tenis ) →ヒント sort()

サンプルファイル(メール送信プログラム)

サンプルファイルをダウンロードしてください。→sendding

このプログラムはフォームからの受け渡し。メール送信のプログラムが記述されています。

  • ここでは、データの受け渡しの基本的な部分を学習します。
  • サンプルファイルの必要な部分(BODY内の部分)のみを現在練習しているサイトに流用してください。(お問い合わせページを作成してください)inquiry.htmlもPHPファイルにしておくこと
  • →見本

メール送信プログラム解説

各ファイルのPOINT

inquiry.html(phpファイルに変更してください。)

action=”データの送信先” method=”送信方法”

name=”データの識別名”

check_inquiry.php

htmlspecialchars()  … サニタイズ →PHPマニュアル

ENT_QUOTES …. htmlspecialchars()の第二引数 シングルクォートをエスケープさせる

$_POST[''] … POSTメソッドで受け取ったデータの受け取り []の中は送信元でのname属性値

type=”hidden” 隠しデータとして扱う。

nl2br() … 改行部分にBRを埋め込む

send_inquiry.php

mb_encode_mimeheader() …MIMEヘッダの文字列をエンコードする

mb_send_mail() … メール送信関数 →PHPマニュアル

  • 成功した場合はtrueを返します。失敗した場合はfalseを返します。

 

ユーザー定義関数その1

前回のサンプルファイルで使用されている関数htmlspecialchars()ですが、関数名が長くて間違えの元となりそうですね。非常に使う関数なのですが、長いのが難点です。

たとえば、これをe()という関数名にできたら楽だとはおもませんか?

それをやってみましょう!そのためには、ユーザー定義関数を作るのです!

その前に、check_inquiry.php ファイルの$title = htmlspecialchars($_POST['title'], ENT_QUOTES);をコメントアウトして、$title = $_POST['title']; に書き換えてください。その後、お問い合わせページのお問い合わせタイトルに下記のコードを入力してお問い合わせボタンを押してみてください。

どうなりましたか?
このようにサニタイズを行わなければ、サイトに対して第三者からいろいろな攻撃が可能になるのです。
それを防ぐためのhtmlspecialchars()関数なのです。

では、check_inquiry.phpファイルを元に戻しておいてください。

次にfunctions.phpファイルを新たに作成しておきましょう。
そこに、下記コードを書いてください。

そして、header.phpにfunctions.phpをrequireさせてください。
これで、htmlspecialchars関数を使用する場合は、e()でつかえるようになります。
ためしにcheck_inquiry.phpで動作確認を行ってみてください。

解説======

ユーザー定義関数を作っています。

function = ユーザー定義関数を作成する場合の命令文

e = ユーザー定義関数の名前(好きな名前)

() = 引数設定

  • 今回の場合は、引数に渡されるものは、第一引数$str(名前は任意)=文字列
  • 第2引数 オプション扱い(デフォルトで値を設定していますので、呼び出し元で引数を渡さなくても、$charsetの値はUTF-8になっています。)

処理の中身 =htmlspecialchars()関数を使用

  • 第一引数にe関数に渡された引数の$strを渡しています。
  • 第2引数は、ENT_QUOTESを設定、
  • 第3引数は、charsetを渡しています。
  • 参考 htmlspecialchars()マニュアル→

今回は、htmlspecialchars()を楽に使おうという目的のもとにユーザー定義関数の基本ヲ学習しましtら

POINT!==

  • ユーザー定義関数を作る場合にはfunction命令を使う。
  • ユーザー定義関数の名前は好きに決めれる。
  • 引数の数や、データ型も好きに決めれる。
  • 引数にデフォルト値を設定することで、オプション設定を作れる。

 

練習問題(データの受け渡し1)

お問い合わせフォームに、メールアドレスを入力する欄を追加してください。、さらにフォームから送信したときにcheck_inquery.phpやsend_inquery.phpにデータが受け渡しできるようにしてください。

練習問題(データ引渡し2)

1,お問い合わせフォームに GET通信用のフォームを作成して、GETで送れるようにしてみましょう。
必須要件


$catID = array(’001′,’005′,’004′,’003′,’002′); このような配列があります。この配列の各要素がGET通信時のパラメーターになるリンクを作成してください。下記例

001 005 004 003 002

リンクの先はcheck_inquery.phpです。 受け取ったパラメーターは表示できるようにしておきましょう。

ゆーざー定義関数 練習問題1

問題1

三角形の面積を求める関数を作ってください。

 

問題2

ひし形の面積を求める関数を作ってください。

問題3

グローバルナビを生成するファイルに記述してあるコードと、パンくずリストを生成するファイルに記述してあるコードをfunctions.phpにコピーをして、それぞれ関数化してください。

 

問題4 商品価格pの消費税(5%)の税込み価格を求めるユーザー定義関数 shouhiを作ってください。
その時、商品価格148円の税込み価格を求めてください。

問題5 所得m円の税率t%の所得税を求めるユーザー定義関数 shotokuを作ってください。
その時、所得500万円、所得税率15%の時の所得税額を求めてください。

問題6 所持金と買い物をして余ったお金を計算するユーザー定義関数 kaimono を作りましょう!

変数の有効範囲

 

このコードを実行したとき
5行目のprint checkScope(); と 6行目のprint $x; の実行結果を答えてください。

では、

この場合はどうなるでしょう?

global命令を使用して、関数内の$xをグローバル変数$xとして扱うこととして命令しています。

変数のスコープは関数内で宣言をした変数はその関数内でのみ使用~破棄というライフサイクルを持っています。なので、

というコードはまったく意味がありませんね。
ところが、関数内で宣言したローカル変数の値を保持し続けられる命令文 staticが存在します。

可変長引数の関数

引数をの数を何個でも増やせる関数の使い方もあります。

クラスの基本1

みなさんの練習サイトに、「クラス」というページを作って置いてください。 ファイル名はなんでもいいです。あと、classesフォルダも作っておいてください。

クラスを学習する上で、一般的な記法また、ルールを最初に覚えてください。

  • クラス名は、頭大文字にする。 →class Namae{ }
  • 作成したクラスはクラス名と同じ名前のPHPファイルを作成してそこで管理をする。 →上記のクラスを作成する場合はNamae.phpファイルを作成し記述をしていく。

では早速ひとつクラスを作ってみます。

これで終わりです。記述する場所は? 上記のルールに照らし合わせて作ってくださいね。
そして、サイトのクラスページからこのクラスを呼び出していくのです。

このままだとPersonクラスはなにもおきませんが、これから記述していきますので心配なさらずに。
$p = new Person();の部分はインスタンス化といいます。
インスタンス用の変数 = new演算子 クラス名()  でクラスを使えるようにするのです。