サーバサービス/データ入出力と演算
提供: Internet Web School
サーバサービス(PHP等) > データ入出力と演算
目次[非表示] |
概要
ここでは前章に続いて、PHPによるデータ入出力処理の例をあげ、PHPでの演算の例を示します。
データ入出力と演算
PHPの書き方について、便宜のために前章と同じ資料を再び挙げておきます。
- 英語版:http://www.plus2net.com/PHP_tutorial/PHP_introduction.php
- 日本語版:http://www.scollabo.com/banban/PHP/
商品の売り上げ個数から売上合計を計算するシステム
前章のシステムを少し複雑にすると、インターネットでの簡単な販売システムを作ることができます。3種の商品(ケーキ1、ケーキ3、ケーキ3)のそれぞれの注文個数を入力させます。その後計算と記録用のPHPプログラムを呼び、金額の小計や合計を計算させ、それらの結果をサーバ上にあるテキストファイルに記録させるのです。
この仕組みも前章と同様、2つの要素からなります。一つはデータ入力用のHTMLファイルです。もう一つはその入力されたデータを受け取り金額を計算しサーバーに置かれたあるテキストファイルにデータを記録する記録用PHPファイルです。
入力用HTMLファイルで表示されたWebページに個々の人が注文個数のデータを入力し、そこにあるcalculateボタンを押すと、計算と記録用PHPファイルが自動的に呼ばれ、計算され記録が取られます。
データ入力用のHTMLファイルによる、各商品の注文個数を入力させる画面(図1)。そのあとcalculateボタンを押すと次の画面に移ります。
3種の商品(ケーキ1、ケーキ2、ケーキ3)、それぞれの個数の入力はプルダウンメニューの形式で入力するようになっています(図2)。
計算記録用PHPファイルによる画面。この画面は上の画面でcalculateボタンが押されると表示されます(図3)。このときはテキストファイルへの書き込みは完了しています。ここで下のreturnボタンを押すと、一番上の画面に戻り、新しい商品数を入力することができます。
記録用PHPファイルにより書き込まれた、サーバー上のテキストファイルの内容。これはエクセルなどのスプレッドシートにCSVファイルとして読み込みが可能なものになっています。
quon.txt
1,3,2,2,9,3,14
データ入力用のHTMLファイルの内容
HTMLファイルはデータを記録用ファイルに保存するような機能は無いが、それができるPHP ファイルを読み出すことができます。あらかじめデータを入力するのはHTMLファイル中のform というタグを使います。
データ入力用のHTMLファイル(buy.html)の内容
<html>
<head>
<title>Input Form</title>
</head>
<body>
<form action="calc.php" method="post">
Product name Unit price Quantity <br>
Cake#1 $2.0 nbsp;
<SELECT NAME="q1" size="1">
<option> 0
<option> 1
<option> 2
<option> 3
</select><br>
Cake#2 $3.0 <SELECT NAME="q2" size="1">
<option> 0
<option> 1
<option> 2
<option> 3
</select><br>
Cake#3 $1.5 <SELECT NAME="q3" size="1">
<option> 0
<option> 1
<option> 2
<option> 3
</select><br><br>
<input type="submit" name="submit" value="calculate">
</form>
</body>
</html>
上のHTMLファイルの説明
これは通常のHTMLファイルで、前章の入力用HTMLファイルと基本的には同じです
やはり6行目にPHPファイルとの連携ができる第一の鍵があります。<form>...</form> の間でデータ入力をするが、そのデータはcalc.phpというphpプログラムに渡されること、その渡し方はpost という方式であること(getという方式もありますが)を指定しています。
次の7行目から14行目までが一つの商品の入力に関するところです。個数の入力の方法はプルダウンメニューによるもので選択できる値は,<select>...</select> の間で<option> というタグで指定します。上から列挙された値がこの順序で表示されます。従って特に選択しなければ一番最初に列挙された値(この場合は0)が指定されます。
最初の<select の跡にNAME="q1"という記述がありますが、php プログラムに値が送られるときq1という名前をつけて送られるということを指定します。なおこれらの記述の中に というのが何度も現れますが、これは半角のスペースを画面に表示させるためのものです。半角のスペースはキーボードから直接入力してもhtmlの文法によると1個以外は無視されてしまうことに対する工夫です。売り上げの表を画面に出すとき縦の位置を合わせるためです。本当はというタグを使ったほうがいいのですが、ここでは簡単のためにこのような記法をとりました。 最後から4行目は入力されたデータを一括してcalcu.phpに渡すタイミングを指定するものです。submit というタイプで指定したとき、calculate というボタンを押した瞬間それまでに各変数に入力された値(=データ)がcalc.phpに送信されるのです。計算記録用PHPファイルの内容
計算記録用PHPファイル(calc.php)の内容
<html>
<head>
<title>Sample of data receiving and saving by PHP</title>
</head>
<body>
<?php
$a1=$_POST['q1'];
$a2=$_POST['q2'];
$a3=$_POST['q3'];
$s1=2*$a1;
$s2=3*$a2;
$s3=1.5*$a3;
$sum=$s1+$s2+$s3;
echo "Product name Unit price Quantity Small sum<br>";
if ($a1 !=0) echo "Cake#1 $2.0  ".$a1." "." $ ".(2.0*($a1)."<br>");
if ($a2 !=0) echo "Cake#2 $3.0  ".$a2." "." $".(3.0*($a2)."<br>");
if ($a3 !=0) echo "Cake#3 $1.5  ".$a3." "." $".(1.5*($a3)."<br>");
echo "------------------------------------<br>";
echo "Total $".$sum."<br>";
$fp=@fopen('quon.txt','a');
fwrite($fp,$a1.",".$a2.",".$a3.",".$s1.",".$s2.",".$s3.",".$sum."\n");
fclose($fp); //output data
?>
<br>
<a href="buy.html">return to input page</a>
</body>
</html>
上のPHPファイルの説明
このPHPファイルも前章のPHPファイルと似ています。前章ではデータを画面に表示することと、サーバ上にあるテキストファイルに書くことがそのPHPプログラムの仕事でしたが、今度は単価と個数を掛けて、小計を計算します。さらに小計同士を足して全体の合計も計算します。このように計算ができることがPHPプログラムの大きな特徴です。
またこのプログラムでは15行目にあるように、if文というものを使っていて、もし数量が0だったときに画面に表示しない、という指定をしています(0でない場合のみ表示させる)。
6行目の<?phpはこれからphp プログラムの記述が始まる、ということを示します。最後から5行目の ?> がその部分の終了を表します。
7行目から9行目は、入力用HTMLからq1,q2,q3という変数に入れてbuy.htmlから送られてきたデータを別のこのphpプログラム独自の変数 a1,a2,_POSTというのが送られてきた変数からデータを取り出すためのphpの関数です。
次の10-13行目は小計と合計を求めるものです。掛け算や足し算は演算子で用意されていますので容易に理解できるでしょう。
次の14行目はそれらを画面に表示させるためのものです。echo というのもphpの関数で次の文字列や変数をそのまま表示させるためのものです。
15行目はif文で、個数が0でないときのみ商品の内容や小計を表示させるものです。
最後から9,6行目はそれらのデータをサーバ上にある quon.txt という名のテキストファイルに書き出すためのもので、前章と同様です。
最後から4行目以降は通常のHTMLファイルと同様です。PHPファイルの考え方はHTMLファイルとして展開され、それが新しいwebページとして表示させる、というものです。上のPHPファイルでは最後にまたさきほどの入力用HTMLファイルに戻るためのリンクを作っています。そこのリンクをクリックすると次の注文数を入力できることを想定しています。