「レジや金庫内のお金を数えるための計算フォーム」をPHP8に対応させてみた。

2023年03月13日 12時00分 正午の月齢:21.2  月名:二十二日月  潮汐:小潮 月齢:21.2[二十二日月] 潮汐:小潮
1年前に投稿 | ウェブ・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']とほぼ同じ動作になります。

$_SERVER['PHP_SELF']は危険?

ということらしいので、

<form action="" method="post">

という、超シンプルな形に落ち着きました。もちろんちゃんと動くし、何の問題もありません。

古い記事・新しい記事

古い記事 [2023年02月27日]
新しい記事 [2023年04月12日]

コメントはありません

ごめんなさい、コメントフォームは閉鎖しています。

Translate »