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