PHP入門

配列とチェックボックス

全333コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
フォームで送信された値は「$_POST」や「$_GET」で受信できるというのは既に紹介しましたが、複数選ぶことができるチェックボックスは、普通の方法では受信することができません。そこで、「配列」を利用します。これまでのレッスンの組み合わせのテクニックとなります。
講師:
13:59

字幕

ここでは、チェックボックスと配列ということで、既に紹介していますが、チェックボックスというフォームのコントロールがあります。今、画面に表示されているこちらの「同意します」というのがチェックボックスですけれども、実は、このチェックボックス、複数並べることができます。しかし、その場合、通常通り今までに紹介した方法ではそのフォームの内容を受信することができません。そこで利用されるのが、配列というテクニック。これも既に紹介しました。この、配列とチェックボックスを組み合わせてフォームを受信するという方法を紹介していきます。それでは、ファイルを作っていきましょう。MAMP のアップロード先フォルダ、MAMP フォルダの htdocs の中に1つファイルを作成します。ここではフォルダ名としてloesson03-10 としまして、ここにテンプレートのファイル群をコピーしていきます。そして、今回は index.htmlそのままのファイル名で結構ですので、Dreamweaver で編集していきましょう。それでは title を付けまして、ここの内容に、まずはform を組み立てていきます。form は action 属性をまずは空にして、method 属性を post とします。 そして、ここに dl 要素でマークアップをしていきましょう。ここでは「購入する商品」ということで、オンラインショッピングの様なサイトを作ることにします。では、ここに label ということで、チェックボックスを1つ作っていきます。name としては item ですね。そして value として、例えば、ここでは「バナナ」としましょう。「バナナ」ですね。そして br / で続いて、input type は checkbox でname を...ここで、何にするかなんですけれども、実は、同じく item とします。そして value は「いちご」です。一応、もう1つ追加しておきましょう。input type を checkbox でname="item"value を「りんご」とします。さて、これで商品の一覧が作れました。あとは dl を閉じた後、input type を submit としまして、「送信する」ボタンを設置します。さて、これでフォームが出来上がっている様に見えるんですけれども実は、まず少し工夫しなければいけないところがあります。この様に、「購入する商品」という一連のチェックボックスが複数ある場合、PHP でそれを扱うためには、name 属性を必ずname の後に、この様に[ ] (大括弧)を並べて書く必要があります。 こうです。さあ、これでまずは画面の表示を見てみましょう。lesson03-10 という URL になります。こちらで画面を表示しますと、「バナナ」「いちご」「りんご」ということで賞品を選ぶことができます。では、こちらで「送信する」ボタンをクリックした時に受け取る方はどうなるでしょう?ファイルを1つ作ります。PHP で「レイアウト」は「< なし 」「ドキュメントタイブ」は適当で結構です。HTML をこの様にコピーしていただいて、貼り付けます。そして、コンテントの中を書き換えていくんですけれども、ここで、この item という name 属性が使われていることを覚えておきます。そして、例えば、ここに h2 ということで、「購入する商品」としましょう。そして、今、チェックボックスでチェックされた値を取得するには、どうしたら良いかと言いますと、この様になります。ちょっと ul でマークアップしていきたいと思うんですけれども、ここにはこうなります。for 構文としまして ($iこれは前のレッスンで紹介しましたが、index の頭文字を取って$i という変数をよく使うというのをご紹介しました。 この $i を繰り返しの変数として使っていきたいと思います。まず $i=0;そして $i<count( して、$_POST['item'] としてみます。この count というのは、今、初めて出て来ましたので、後ほど、詳しく紹介していきます。そして $i++$i++ というのは $i=$i+1 を短く書いた方法であるというのはすでにご紹介しましたが、「$i に 1 づつ加える」という内容のスクリプトです。後ほど、こちらも動きは詳しく説明していきましょう。そして、どのような繰り返しの処理になるかと言いますと、ここで print としまして、$_POST ['item'] の[$i] となります。さて、だいぶ複雑なスクリプトになっていますが、しっかりと動きを確認していけば、それほど難しくありません。最後に ul 要素を閉じて、これでプログラムは完成になります。それでは、ファイルを保存して、動きを確認してみましょう。lesson03-10 という所にここでは input_do.php というファイル名で保存をします。そして index.html からinput_do.php をaction 属性に指定して接続をします。 それではファイルを見ていきましょう。一度、こちらのフォームの HTML をリロード(再読み込み)して、「購入する商品」として、「バナナ」「いちご」「りんご」をそれぞれチェックします。「送信する」ボタンをクリックしますと、次の画面には「バナナ」「いちご」「りんご」と表示されました。では、一度戻って、今度は「いちご」は買わないということで「バナナ」と「りんご」だけをチェックしましょう。「送信する」ボタンをクリックすると、きちんと「バナナ」と「りんご」が受け取れていることが分かります。同じ様に「りんご」を外せば「バナナ」だけになるということで、これで、全てのチェックボックスの内容を受け取ることができました。では、実際にどの様に受け取っているのかというのを詳しく説明していきます。まず form の方でname 属性の所にitem という名前を付けましたが、その後、大括弧を2つ、この様に重ねました。これは、「この要素を配列として送信して下さい」という印です。これによって PHP はこの item という name 属性のフォームを配列として受け取るようになります。そして、受け取ったその配列となる form の要素というのはこちらの $_POST['item']と言うものになります。 ここで、例えば1つ目に選んだ商品というのをここにプリントするようにプログラムを改造してみましょう。その場合 ['item'][0] ということで、少し、この大括弧が重なっていますけれども、これは「$_POST['item'] というform 要素の中のインデックスが0番目のもの」という意味です。ちょっと、こちらのスクリプトは削除して、こちらで動きを確認してみましょう。1つ戻りまして、例えば、ここでは「バナナ」「いちご」「りんご」をそれぞれチェックします。「送信する」をクリックすると、1番最初に選ばれている「バナナ」というのが表示されました。では、例えば「バナナ」のチェックを外してみます。そうしますと、「いちご」が最初にチェックされたものになるので、こちらの $_POST['item'] の[0] というのは「いちご」になるということです。同じく「りんご」が一番最初にチェックされているものであれば、このまま送信すると、「りんご」が表示されるというわけです。さて、この時、複数チェックがされている場合に、「バナナ」と「りんご」両方表示するにはどうしたら良いかといいますと、例えば、1つの方法としてはこの様な方法があります。 print として、例えば、この様に ('<br');print($_POST['item'] [1]) とすれば、今度は、1番目と2番目に選択したものが表示されるようになりますので、「バナナ」と「りんご」をチェックすれば、「送信する」で「バナナ」「りんご」と表示されます。しかし今、この状態ですと、2つまでしか表示することはできませんので「バナナ」と「いちご」「りんご」全てチェックをしても「バナナ」と「いちご」までしか表示されません。そして、もし3つチェックされた時に3つとも表示したいのであれば、これを繰り返して、[2] としなければならないというわけです。ただ今度は、この様に全て書いてしまうと困った時がありまして、1個しかチェックしなかった時に今、ここでは正常に処理が行われている様に見えますが、実は中では、エラーというのが起こっています。というのは、この $_POST['item'] には1つしか要素が入っていないにも関わらず、1番目、2番目つまり2個目に選択されたもの3個目に選択されたものを取り出そうとしているので、これは正しい処理ではありません。そこで、ここでは繰り返しの処理を使って選択されているものだけを取得するというスクリプトを記述していく必要があります。 ここで活躍するのがcount というファンクションです。例えば、今書いたスクリプトを全て消して、print とします。そして、その中に count と書いて$_POST['item'] としてみましょう。これは何が表示されるかというと、例えば、「バナナ」「いちご」「りんご」全てにチェックを付けると、3 という数字が取得できます。では、「いちご」を外してみましょう。すると 2 と出ます。もう1つ外すと 1 と出て、全て外すと 0 が出るというかたちで実は、この count というファンクションは読んで字の通りですけれども、選ばれている個数を取得するというファンクションになります。そして print と組み合わせることで、今は選ばれた個数を画面に表示したというわけです。例えば、ここで for 構文を使って選ばれているものを画面に出すという場合、まず最初の条件としては0 であることが分かります。なぜなら、何個選ばれたとしても、0 番目というのは必ず1番最初にチェックされたチェックボックスになりますので、必ず 0 から始まります。しかし、終わりの数字は例えば、3つチェックされていれば012 になりますし、2つしかチェックされていなければ01 になります。 そして、1つしかなければ0 というかたちになりますので、最後の終了条件の所には例えば 3 が入ったり、2 が入ったり、 1 が入ったりという様なかたちで選ばれている個数によってここの数字は変わってきます。そこで、先ほどご紹介した count というファンクションと組み合わせることでこれによって終了の条件として、「選ばれている個数までの間」という繰り返しの構文を作ることができたわけです。あとは $i++ ということで、1ずつ加えるという条件を作ってあげれば、これによって、この様にfor 構文を組み立てて、この li という要素で商品の一覧を出すことができることになります。一応、動きを軽く確認しておきましょう。まず $i に 0 が入ります。これが、初期化処理と呼ばれるものでした。そして $i は 0 です。そのため item (選ばれているもの)の中の0番目のもの、つまり、1番最初に選ばれているチェックボックスの値、「バナナ」が表示されます。続いて $i++ ということで、1 が加わって、0+1 で 1 になります。その 1 というのと count の$_POST['item']これはつまり、 2 が取得できますが、2 と 1 を比べて、1 の方が小さいので、もう一度、実行がされます。 そして、この様に「いちご」が表示されるというわけです。続いて end for で戻った時に、$i++ で今度は 1+1 で 2 になります。そして count は2 が取得できますので、2 と 2 を比べて、大きくなってしまいましたので、li は出力されず、飛ばされて、25 行目にジャンプします。これによって、選ばれている商品の一覧というのを取得することができたということです。この様に、チェックボックスで複数選べるものというのは配列を使わないと受け取ることができません。そして、その配列を使う時にはfor 構文や while 構文といった繰り返し構文を使うというのも既に紹介してきました。この、前のレッスンのいくつかを組み合わせて様々な処理を組み立てるということは今度も良く出て来ますので、是非、前のレッスンもしっかり復習しながら次へ進むようにしてください。

PHP入門

このコースでは動きのあるWebサイトでショッピング、友人との写真を共有、キーワードによる情報検索など便利な仕組みを作るための技術であるPHPについて解説します。これまでプログラミングに触れたことがない方でも、ちょっとしたプログラムを自分で作ることができるようになります。

4時間56分 (29 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 3,990
発売日:2014年01月29日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。