-1

これは、ページ 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は

http://site.com/purchase_form1_conf.php?id=54&time=1376047215&hash=cbaaabbcf8b20de044b9dd105cae60d1f1ab5b92

すべて良さそうです。

フォームを見て値を変更したい場合、編集をクリックすると、フォーム ページの前のページに移動し、URL は http://site.com/purchase_form1.php?id=54です。

両方のページで id =54 を参照してください。ここまではすべて完璧に見えます。

実際の問題として、このページ purchase_form1.php でフォームを編集して [送信] をクリックしても、URL は変更されず、DB も更新されず、何も起こりません。

代わりに何が起こるでしょうか?DB が更新され、ユーザーは新しいデータで次のページに再び移動します。そうではありません。

4

2 に答える 2

2

UPDATE ステートメントを実行している場所がわかりません。

    $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}'";
    **mysqli_query($conexionObj, $sql);**
于 2013-08-09T11:49:38.037 に答える
0

update ステートメントの where 句で次のコードを改善します。

     $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 ";
于 2013-08-09T11:39:06.897 に答える