これは、ページ purchase_form1 の私の php コードです
<?php
include_once("includes/form_functions.php");
$id = 0;
if (isset($_GET['id']) && ($_GET['id'] != ''))
{
$id = (int)htmlspecialchars($_GET['id']);
}
$query = "SELECT * from db_purchase_form where id = $id";
$result = mysql_query($query);
$has_data = false;
while($row = mysql_fetch_row($result))
{
$has_data = true;
$product_name = $row[1];
$choice_actor = $row[2];
$user_name = $row[3];
$user_email = $row[4];
$vdo_script = $row[5];
$hrt_msg = $row[6];
$portApproval = $row[7];
$delivery = $row[8];
$net_price = $row[9];
}
if(isset($_POST['submit']))
{
if ($has_data == true)
{
$sql = "UPDATE db_purchase_form SET ";
$sql .= "db_product_name = '" . $product_name . "', ";
$sql .= "db_actor = '" . $choice_actor . "', ";
$sql .= "db_user_name = '" . $user_name . "', ";
$sql .= "db_user_email = '" . $user_email . "', ";
$sql .= "db_vdo_script = '" . $vdo_script . "', ";
$sql .= "db_hrt_msg = '" . $hrt_msg . "', ";
$sql .= "db_port_approval = '" . $portApproval . "', ";
$sql .= "db_delivery = '" . $delivery . "', ";
$sql .= "db_price = '" . $net_price . "', ";
$sql .= "db_date_time = NOW() ";
$sql .= "WHERE id = '{$id}'";
}
else
{ // validation for form purchaseform and insert into DB if all is good.
if(empty($message)) // $,message i used for errors. This line means if all validations above are okay
{
$insert = // INSERT INTO MYSQL DB
$result = mysql_query($insert);
if($result)
{
$lastInsertedId = mysql_insert_id();
$timestamp = time();
header('Location:purchase_form1_conf.php?'.http_build_query(array('id' => $lastInsertedId,'time' => $timestamp,'hash' => sha1('some-generated-key'.$timestamp.$lastInsertedId))));
}
else
{
$message = "The data cannot be inserted.";
$message .= "<br />" . mysql_error();
}
}
ページの下にあるのは、このフォームの HTML コードです。
<?php //here i display errors
if(!empty($message))
{
echo "<p style='color:red; font-weight:bold;'>" . $message . "</p>";
}
?>
<form id="PurchaseForm" name="PurchaseForm" method="post" action="purchase_form1.php?id=<?php echo $id;?>"> //this is starting of form.
// actual html form, set for fields using php, the form is very long
<input type="submit" name="submit" value="Buy Now" class="button3">
</form>
ここで、データを purchase_form1_conf.php に送信します。purchase_form1_conf.php は表示ページです。フォーム データが表示され、ユーザーが編集ボタンをクリックすると、 purchase_form1.php に戻ります。
purchase_form1_conf.php の PHP コード
<?php require_once("includes/connection.php"); ?>
<?php
$id = isset($_GET['id']) ? $_GET['id'] : null;
$time = $_GET['time'];
if($_GET['hash'] != sha1('some-generated-key'.$time.$id))
die('URL was tampered with');
//if(time() - $time > 300)
//die('URL was only valid for 5 minutes');
//}
//if (isset($_GET['id']))
//{
//$lastInsertedId = $_GET['id'];
//}
//$id = $_SESSION['last_id'];
//$query = "SELECT * FROM db_purchase_form WHERE id=$lastInsertedId";
//$result = mysql_query($query);
//while($row = mysql_fetch_row($result))
if ($id)
{
$query = "SELECT * FROM db_purchase_form WHERE id=$id";
$result = mysql_query($query);
while($row = mysql_fetch_row($result))
{
$product_name = $row[1];
$choice_actor = $row[2];
$user_name = $row[3];
$user_email = $row[4];
$vdo_script = $row[5];
$hrt_msg = $row[6];
$portApproval = $row[7];
$delivery = $row[8];
$net_price = $row[9];
}
}
?>
// ここで、DB から取得した値を $row[1] として表示します。2 など、このページには 2 つのボタンがあります。1 つは編集ボタンで、もう 1 つは PAYPAL ですが、フォームではありません。 DB からプルされた値を表示する DIV だけです。
編集ボタンのコードは
<a href="purchase_form1.php?id=<?php echo $id; ?>" class="button4">Edit</a>
ユーザーが purchase_form1.php に移動します。
今問題は何ですか?
ユーザーが purchase_form1.php ページにアクセスすると、新しいフォームが表示されます。今回のURLは http://site.com/purchase_form1.php
送信元に入力し、送信をクリックします。エラーの場合は、エラーのメッセージが表示されます。エラーを削除し、送信を再度クリックすると、次のページ、つまり purchase_form1_conf.php に移動します。
次のページのURLは
すべて良さそうです。
フォームを見て値を変更したい場合、編集をクリックすると、フォーム ページの前のページに移動し、URL は http://site.com/purchase_form1.php?id=54です。
両方のページで id =54 を参照してください。ここまではすべて完璧に見えます。
実際の問題として、このページ purchase_form1.php でフォームを編集して [送信] をクリックしても、URL は変更されず、DB も更新されず、何も起こりません。
代わりに何が起こるでしょうか?DB が更新され、ユーザーは新しいデータで次のページに再び移動します。そうではありません。