隠しフィールドを使い入力欄にない値をPOSTする
ECサイトからのご購入は20% OFFになります!
入力フォーム
<!-- 戻るボタンで初期値に個数を入れる -->
<?php
if (isset($_POST['kosu'])) {
$kosu = $_POST['kosu'];
} else {
$kosu = "";
}
?>
<!-- 割引の初期値 -->
<?php
$discount = 0.8;
$off = (1 - $discount) * 100;
if ($discount > 0) {
echo "<b>ECサイトからのご購入は{$off}% OFFになります!</b>";
}
$tanka = 1250;
$tanka_fm = number_format($tanka);
?>
<!-- 入力フォーム -->
<form method="POST" action="discount.php">
<input type="hidden" name="discount" value="<?php echo $discount; ?>">
<input type="hidden" name="tanka" value="<?php echo $tanka; ?>">
<ul class="nolist">
<li><label>単価:<?php echo $tanka_fm; ?>円</label></li>
<li><label>個数:<input type="number" name="kosu" value="<?php echo $kosu ?>"></label></li>
<li><input type="submit" value="計算する"></li>
</ul>
</form>
計算ボタンでPOSTで渡された値で計算する
<?php
require_once("es.php"); //フォーム~入力データのチェック~で参照してね
if (!checkEn($_POST)) { //文字エンコードの検証
$encoding = mb_internal_encoding(); //PHPが使うエンコードを調べる
$err = "Encoding Error! The espected encoding is" . $encoding;
exit($err); //エラーメッセージを出してコードのキャンセルする
}
$_POST = es($_POST); //HTMLエスケープ(xss対策)
?>
<?php
$errors = [];
if (isset($_POST['discount'])) {
$discount = $_POST['discount'];
if (!is_numeric($discount)) {
$errors[] = "割引率の数値エラー";
}
} else {
$errors[] = "割引率が未設定";
}
if (isset($_POST['tanka'])) {
$tanka = $_POST['tanka'];
if (!ctype_digit($tanka)) {
$errors[] = "単価の数値エラー";
}
} else {
$errors[] = "単価が未設定";
}
?>
<?php
if (isset($_POST['kosu'])) {
$kosu = $_POST['kosu'];
if (!ctype_digit($kosu)) {
$errors[] = "個数は正の数で要入力";
}
} else {
$errors[] = "個数が未設定";
}
?>
<?php
if (count($errors) > 0) {
echo '<ol class = "error">';
foreach ($errors as $value) {
echo "<li>", $value, "</li>";
}
echo "</ol>";
} else {
$price = $tanka * $kosu;
$discount_price = floor($price * $discount);
$off_price = $price - $discount_price;
$off_per = (1 - $discount) * 100;
$tanka_fm = number_format($tanka);
$discount_price_fm = number_format($discount_price);
$off_price_fm = number_format($off_price);
echo "単価:{$tanka_fm}円、", "個数:{$kosu}個", "<br>";
echo "金額:{$discount_price_fm}円", "<br>";
echo "割引:{$off_price_fm}円、", "{$off_per}% OFF", "<br>";
}
?>
<!-- 戻りボタン -->
<form method="POST" action="hidden.php#shop">
<!-- hiddenで個数を設定して戻った時にPOSTする -->
<input type="hidden" name="kosu" value="<?php echo $kosu; ?>">
<ul class="nolist">
<li><input type="submit" value="戻る"></li>
</ul>
</form>