index.php-detail.php?id=というようにindex.phpに配列でいくつかのdetail.phpにアクセスできてそこから商品一覧が表示されてそこでフォームのinput submitを押すと注文確定できるが押すと別のdetail.php?id=からのconfrim.phpでのボタンも押されてしまう。これを防止する方法です。
全体像
<?php
detail.php
<input type="hidden" name="mail_id" value="<?php echo $order['mail_id']; ?>">
// 仮にデータベースから商品情報を取得したとします。
confirm.php
//一意のmail_id
$mail_id = isset($_POST['mail_id'])?$_POST['mail_id']:null;
//if (isset($_POST['submit'])) {
// POSTリクエストの処理
$mailId = $_POST['mail_id'];
$stmt = $dbh->prepare("UPDATE sales_product SET = :order_number WHERE mail_id = :mail_id");
$stmt->bindParam(':order_number', $orderNumber, PDO::PARAM_STR);
$stmt->bindParam(':mail_id', $mailId, PDO::PARAM_STR);
}
?>
//confirm_view.php
<form method="POST" action="confirm.php">
<input type="hidden" name="mail_id" value="<?php echo $mail_id; ?>">
<input type="submit" name="submit" value="発注する">
</form>
説明
detail.php
<input type="hidden" name="mail_id" value="<?php echo $order['mail_id']; ?>">
まず前のページdetail.phpで渡したい一意の値をポストする
confirm.php
//一意のmail_id
//フォーム内のvalueに渡す
$mail_id = isset($_POST['mail_id'])?$_POST['mail_id']:null;
//if (isset($_POST['submit'])) {
// POSTリクエストの処理
$mailId = $_POST['mail_id'];
$stmt = $dbh->prepare("UPDATE orders SET = :order_number WHERE mail_id = :mail_id");
$stmt->bindParam(':order_number', $orderNumber, PDO::PARAM_STR);
$stmt->bindParam(':mail_id', $mailId, PDO::PARAM_STR);
}
confirm_view.php
<form method="POST" action="complete.php">
<input type="hidden" name="mail_id" value="<?php echo $mail_id; ?>">
<input type="submit" name="submit" value="発注する">
</form>
サーバーでdetail.phpでポストされた値を次のページで受け取り、HTMLフォームのvalueからnameに渡して、hiddenでサーバーサイドにポストしてsubmitされたらポストされた一意の値でクエリを実行して、他のページのボタンに影響しない独立したボタンとして実行できる。