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されたらポストされた一意の値でクエリを実行して、他のページのボタンに影響しない独立したボタンとして実行できる。

