1

「戻る」または「次へ」を押すと、その部分が送信されてデータベース(MySQL)に保存されるマルチパートフォームがあります。唯一の違いは、次のフォームまたは前のフォームに移動するかどうかです。

後続の部分(2番目の部分以降)は、最初の部分のテーブルの子テーブルであることに注意してください。それらは外部キーとして「ePARno」を持っています。

最初の部分はこのスニペットを実行します:

if( isset( $_SESSION[ 'eparno' ] ) ) { //if it's an edit, replace
        $eparno = $_SESSION[ 'eparno' ];
        $insert_query_0 = mysql_query ("
            REPLACE INTO form 
                (ePARno, caseno, accomplishedby)
                VALUES 
                ('$eparno', '$caseno', '$accomplishedby')
        ");
}
else { //otherwise, it's a fresh insert
    $insert_query_0 = mysql_query ("
        INSERT INTO form 
            (caseno, accomplishedby)
            VALUES 
        ('$caseno', '$accomplishedby')
    ");
     $eparno = mysql_insert_id();
}

私の問題は、2番目のフォームを押し戻して最初のフォームに移動し、次に押すことでそのフォームに戻るときに発生します。これを行うと、2番目のフォームの挿入された行が挿入されますが([戻る]を押すと)、最初のフォームから[次へ]を押すとテーブルから消えます。(私はphpmyadminを介してデータベースを表示し、同時に戻ると次のボタンを押します)

これは、親行を置き換える最初のフォームと関係があると思います。REPLACEを実行すると、2番目のフォームなど、すでに存在する子行が削除されている可能性があります。

また、戻らなければ順調に進んでいると言わざるを得ません。行が消えることはありません。

私の疑惑には何かメリットがありますか?もしそうなら、どうすればこれを修正できますか?そうでない場合、何が問題になる可能性がありますか?

4

1 に答える 1

1

REPLACEDELETEとを行いますINSERTDELETEは子テーブルにカスケードされていると思います。

INSERT...ON DUPLICATE KEY代わりに試してください。

'caseno'は主キーですか?もしそうなら、多分それはこれです:

INSERT into form (caseno, accomplishedby) values (?,?)
ON DUPLICATE KEY UPDATE eparno = values(eparno), accomplishedby = values(accomplishedby)
于 2012-09-17T16:53:34.977 に答える