プロが教えるわが家の防犯対策術!

商品の出荷記録を作成しています。
しかし、phpで自動計算した値をデータベースに登録する方法が分かりません。

データ記入のindex.phpとindex.phpから受け取ったデータを計算するcheck.phpを作成しています。
一番下[実際の入力]の★部分が分からないです。

商品種目によって単価×数量で価格が決まるものと、
単価×重量、単価×容量で価格が決まるものの三種類があります。

例えば、スーパーでお肉が1kgあたり80円の商品と、
お菓子で1個100円の商品と、お水が1L当たり120円の
モノがあるという感じです。

例1)
1.単価円×数量(商品の個数)=価格
2.単価円×重量(kg)=価格
3.単価円×容量(L)=価格

そして、今回データベースに記録したいのが、
1.日付、2.商品名、3.個数、4.重量or容量、5.価格です。

重量(kg)と容量(L)に個数が必要なのは、そのkgを抽出するのに
何個、または何羽原材料に使ったか?を記録するため、結局は
全商品個数を入力する必要があります。

例えば、1羽の鳥から100gの重量肉が取れたや、
100個のオレンジから10Lの果汁が抽出できた等です。

今回【index.php】は入力画面となり、
上記 例1)価格の値は空白にしています。

【index.php】
<tr><th>価格</th><td><span class="yo">円</span></td></tr>

次の【check.php】にて計算して出力しようと考えました。

$kakaku=$jyuryo*$tanka;
⇒$jyuryoの変数には重量(kg)と容量(L)のどちらかの値が入っています。
 例1)の2と3の場合の価格になります。

$tkakaku=$kosu*$tanka;
⇒$kosuの変数には商品の数量値が入っています。
 例1)の1の場合の価格になります。

そして、【check.php】のテーブルに価格の計算結果を表示させています。
$syouhinで商品1をセレクトした場合は、例1)の1の計算をして、
それ以外の商品は例1)の2と3の計算をして表示させるというものです。

print "<tr><th>価格</th><td>";
switch($syouhin){
case '1': print $tkakaku;break;
default: print $kakaku;
}
print "円</td></tr>

この計算結果を変数に入れる方法が分からないのです。
データベースに計算結果を登録するには変数が必要と考えています。

もし、変数がなくてもデータベースに登録する方法がございましたら、
教えて下さい。

[実際の入力]
【index.php】
<form action="check.php" method="post" accept-charset="utf-8">
<table border="2" align="center">
<caption>出荷記録</caption>
<tr><th>日付</th><td><input name="hiduke" type="date" value="yyyy-mm-dd"></td></tr>
<tr><th>商品名</th><td><select name="syouhin">
<option value="1">商品1</option>
<option value="2">商品2</option>
<option value="3">商品3</option>
</select>
</td></tr>
<tr><th>個数</th><td><input name="kosu" type="text" size="10"><span class="yo">個</span></td></tr>
<tr><th>重量orリットル</th><td><input name="jyuryo" type="text" size="10"><span class="yo">kg・L</span></td></tr>
<tr><th>単価</th><td><input name="tanka" type="text" size="10"><span class="yo">円</span></td></tr>
★<tr><th>価格</th><td><span class="yo">円</span></td></tr>★
</table>
</form>

【check.php】
<?php

$dsn='mysql:dbname=kaka;host=localhost';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->query('SET NAMES UTF-8');

$hiduke=$_POST['hiduke'];
$syouhin=$_POST['syouhin'];
$kosu=$_POST['kosu'];
$jyuryo=$_POST['jyuryo'];
$tanka=$_POST['tanka'];
$kakaku=$jyuryo*$tanka;
$tkakaku=$kosu*$tanka;

if($hiduke==''){print '<table border="2" align="center" width="450"><caption>出荷記録</caption><tr><th>日付</th><td class="ng">日付が入力されていません。</td></tr>';}
else{print '<table border="2" align="center" width="450"><caption>出荷記録</caption><tr><th>日付</th>'; print "<td>$hiduke</td></tr>";}

print "<tr><th>商品名</th><td>";
switch ($syouhin){
case '1': print '商品1';break;
case '2': print '商品2';break;
case '3': print '商品3';break;
default: print '商品が指定されていません。<br />';
}
print "</td></tr>";

if($kosu==''){print "<tr><th>個数</th><td>個数が入力されていません。</td></tr>";}
else{print "<tr><th>個数</th><td>$kosu 個</td></tr>";}

if($jyuryo==''){print '<tr><th>重量orリットル</th><td>重量が指定されていません。</td></tr>';}
else{print "<tr><th>重量orリットル</th><td>$jyuryo";
switch($syouhin){
case '1': print 'L';break;
default: print 'kg';
}
print "</td></tr>";

if($tanka==''){print "<tr><th>単価</th><td>単価が入力されていません。</td></tr>";}
else{print "<tr><th>単価</th><td>$tanka 円</td></tr>";}
★print "<tr><th>価格</th><td>";
switch($syouhin){
case '1': print $tkakaku;break;
default: print $kakaku;
}
print "円</td></tr></table>";}★

if($hiduke==''||$syouhin==''||$kosu==''||$jyuryo==''||$tanka==''){print '<form accept-charset="utf-8"><div class="botan"><div class="data1"><input type="button" onclick="history.back()" value="戻る"></div></div></form>';}
else{
print '<form method="post" action="index.php" accept-charset="utf-8"><div class="botan"><div class="data1"><input type="button" onclick="history.back()" value="戻る"></div>
<div class="reset1"><input name="nyryoku" type="submit" value="入力確定"></div></form>';}

$sql='INSERT INTO shipping (hiduke,syouhin,kosu,jyuryo,tanka) VALUES("'.$hiduke.'","'.$syouhin.'","'.$kosu.'","'.$jyuryo.'","'.$tanka.'")';
$stmt=$dbh->prepare($sql);
$stmt->execute();

$dbh=null;
?>

A 回答 (1件)

>データベースに計算結果を登録するには変数が必要と考えています。



いまいち何を言いたいかわかりません。

>1.日付、2.商品名、3.個数、4.重量or容量、5.価格です。

を入れたいのにINSERT文が

>INSERT INTO shipping (hiduke,syouhin,kosu,jyuryo,tanka)

になっているのは何か意味があるのでしょうか?
tankaに価格をいれるとは思えませんが・・・

仮にjyuryoが0より大きいときはjyuryo*tanka、
kosuが0より大きいときはkosu*tanka
をkakakuの定義とすれば・・・

$kakaku=0;
if($jyuryo>0) $kakaku=$jyuryo*$tanka;
if($kosu>0) $kakaku=$kosu*$tanka;
$data=array($hiduke,$syouhin,$kosu,$jyuryo,$kakaku);
$sql='INSERT INTO shipping (hiduke,syouhin,kosu,jyuryo,tanka) VALUES(?,?,?,?,?)';
$stmt=$dbh->prepare($sql);
$stmt->execute($data);

的な処理を想定しているのでしょうか?
    • good
    • 0
この回答へのお礼

返信いただきありがとうございます。

私の未熟な質問で語弊を招いてしまいすいません。
結果から申し上げますと解決しました!

yambejpさんから回答いただいたこの部分$kakaku=$kosu*$tanka;を参考にして、switch文にそのまま計算式を入れ、その結果をprintで出力すれば・・・。

私の中ではswotcj文に$kakakuの変数をそのまま入れるという発想がなかったのが苦しんだ原因でした。

ありがとうございました。

【変更前】
switch($syouhin){
case '1': print $tkakaku;break;
default: print $kakaku;
}
print "円</td></tr></table>";}

【変更後】
switch($syouhin){
case '8': $kakaku=$kosu*$tanka;break;
default: $kakaku=$jyuryo*$tanka;break;
}
print "$kakaku";

お礼日時:2015/10/28 21:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!