フォームの隠しフィールド

PHPのシンタックス

  1. HOME
  2. フォーム~hidden~

隠しフィールドを使い入力欄にない値を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>