「レジや金庫内のお金を数えるための計算フォーム」をPHP8に対応させてみた。
2023年03月13日 12時00分 月齢:21.2[二十二日月] 潮汐:小潮
2年前に投稿 | ウェブ・IT関係 | コメントはありません
5分ぐらいで読めます。
自分がラクをするために、プログラミングの真似事としてつくった「レジや金庫内のお金を数えるための計算フォーム」ですが、PHPのヴァージョンを8にすると動作しないことがわかりました。
とくに凝ったことは何ひとつしていないのになぜか計算されない。原因がわかるまでに1日くらい考えたところ、どうやらPHP8はパラメータの型が厳格になっているらしい。空データと数字の足し算や掛け算はできないってことなのかな。
言いたいことはわかるのですが、じゃあどうすればいいのかよくわからないので、ifを使って空データのときは0をぶち込むようにしてみました。
<?php
//PHP8対策として、nullや空なら0を入れる
if (empty($_POST['u1'])) { $u00001 = 0; } else { $u00001 = $_POST['u1'] * 50; }
if (empty($_POST['u5'])) { $u00005 = 0; } else { $u00005 = $_POST['u5'] * 250; }
if (empty($_POST['u10'])) { $u00010 = 0; } else { $u00010 = $_POST['u10'] * 500; }
if (empty($_POST['u50'])) { $u00050 = 0; } else { $u00050 = $_POST['u50'] * 2500; }
if (empty($_POST['u100'])) { $u00100 = 0; } else { $u00100 = $_POST['u100'] * 5000; }
if (empty($_POST['u500'])) { $u00500 = 0; } else { $u00500 = $_POST['u500'] * 25000; }
if (empty($_POST['c1'])) { $c00001 = 0; } else { $c00001 = $_POST['c1'] *1; }
if (empty($_POST['c5'])) { $c00005 = 0; } else { $c00005 = $_POST['c5'] * 5; }
if (empty($_POST['c10'])) { $c00010 = 0; } else { $c00010 = $_POST['c10'] * 10; }
if (empty($_POST['c50'])) { $c00050 = 0; } else { $c00050 = $_POST['c50'] * 50; }
if (empty($_POST['c100'])) { $c00100 = 0; } else { $c00100 = $_POST['c100'] * 100; }
if (empty($_POST['c500'])) { $c00500 = 0; } else { $c00500 = $_POST['c500'] * 500; }
if (empty($_POST['b1000'])) { $b01000 = 0; } else { $b01000 = $_POST['b1000'] * 1000; }
if (empty($_POST['b2000'])) { $b02000 = 0; } else { $b02000 = $_POST['b2000'] * 2000; }
if (empty($_POST['b5000'])) { $b05000 = 0; } else { $b05000 = $_POST['b5000'] * 5000; }
if (empty($_POST['b10000'])) { $b10000 = 0; } else { $b10000 = $_POST['b10000'] * 10000; }//計算してnumber_formatでカンマを打って表示する
$result = $u00001 + $u00005 + $u00010 + $u00050 + $u00100 + $u00500 + $c00001 + $c00005 + $c00010 + $c00050 + $c00100 + $c00500 + $b01000 + $b02000 + $b05000 + $b10000;
echo ("<h1>" . number_format($result) . "円</h1>");
?>
もっと洗練された書き方があるとは思うけれど、DIYのプログラミングということでそっとしておいてください。
あと、フォームからデータをPOSTするのに
<form action="<?php print($_SERVER['PHP_SELF']); ?>" method="post">
って書いていたんですけど、これは危ないっていうことで、
<?php echo $_SERVER['SCRIPT_NAME']; ?>
と書けばいいらしくこの書き方を検討したところ、自ファイルにデータを渡すのだったら
そもそも表示させない
そもそも渡された値をそのまま表示させるのが問題になるということから、自ページから自ページへの遷移なら
Aタグに使う場合
<a href="">
FORMタグに使う場合
<form method="post" action="">
このようにURLに何も書かないことで、$_SERVER['PHP_SELF']とほぼ同じ動作になります。
ということらしいので、
<form action="" method="post">
という、超シンプルな形に落ち着きました。もちろんちゃんと動くし、何の問題もありません。
古い記事・新しい記事
- 古い記事 [2023年02月27日]
- ← iOSのブラウザで発生する、スクロールの端でびよーんとなるのを抑える。
- 新しい記事 [2023年04月12日]
- → FirefoxでAVIFとWebPを無効化する。
他にも「ウェブ・IT関係」カテゴリの記事はいかがですか。
- PHPでQRコードをシンプルに(Composerを使わずに)作成する。
- Windows10 64bitでFUJITSU ScanSnap S510を使う。
- SSDを120GBから500GBに換装するのを完走したので感想を。
- ダウンロードリンク作成用のPHPフォームを作った。
- 日本語と英数字の間のスペースが嫌い。
- EeePC1005HAを分解して、HDDをSSDに交換してみた。
- PHP QR Codeで「&」以降の値が渡されない問題を解決できた。
- Firefoxで、ウェブフォントの表示と「Webページが指定したフォントを優先」しないことを両立させる。
- EASEUS Partition Master Home Editionで、パーティションのサイズを変えてみた。
- 新しいおもちゃ「富士通 LIFEBOOK S936/P」を入手した。