サポート » 使い方全般 » UPDATE が2回繰り返されてしまう問題

  • 解決済 nspenchan

    (@nspenchan)


    使用プラグイン Exec-PHP (.html on PAGES)
    受験問題の学習サイトを構築中です。学習者の学習履歴をデータベースに登録するために、以下のコードを使っていますが、UPDATE が2回繰り返される問題に悩まされています。
    send.html で正解不正解を配列rireki に入れて、recive.html に送ってから、データベースに登録しようとすると、データが2回繰り返して、登録されてしまいます。
    これはWordPress の仕様なのでしょうか? 対策はありますでしょうか?

    send.html
    `登録テスト<br />問題1=>1<br />問題2=>2<br />
    <form action="recive.html" method="post">
    <input type="hidden" name="rireki[1]" value="1">
    <input type="hidden" name="rireki[2]" value="2">
    <input type="submit" value="登録">`

    recive.html
    `<?php
    global $user_ID;
    get_currentuserinfo();
    $rireki = $_POST['rireki'];
    mysql_connect('localhost', 'xxxxx', 'xxxxxxxx');
    mysql_select_db('mydb');
    mysql_query('SET NAMES UTF8');
    /////////////データベースに追記する
    foreach ($rireki as $key => $value) {
    $a1 = a . $key;
    $result = mysql_query("SELECT $a1 FROM rireki WHERE ID=$user_ID");
    $result = mysql_fetch_assoc($result);
    $v = $ref[$a1] . $value;
    mysql_query("UPDATE rireki SET $a1='$v' WHERE ID=$user_ID");
    }
    ?>`

    ////rireki のカラム名
    ////ID user_login a1 a2 a3 a4……….

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • <input type="hidden" name="rireki[1]" value="1">
    <input type="hidden" name="rireki[2]" value="2">

    と、rireki が要素2個の配列になっているので
    $rireki = $_POST['rireki'];
    の代入で
    $rireki[1]=1, $rireki[2]=2
    となって、ループ
    foreach ($rireki as $key => $value) {〜}
    で、`
    1回目:$key=1, $value=1, $a1=a1, $v=$ref[a1].1
    2回目:$key=2, $value=2, $a1=a2, $v=$ref[a2].2`
    の2回分UPDATEされます。

    トピック投稿者 nspenchan

    (@nspenchan)

    早速のご返答ありがとうございます。
    ご指摘のように、ループforeach で2回アップデートをさせたいのですが、なぜか、4回(2回ずつ)UPDATEされるので困っています。
    このコードを実行すると、データベースは
    ID user_login a1 a2 a3 a4…………
    1 admin 11 22 0 0…….
    となり,
    a1 = 11
    a2 = 22
    2回づつ書き込まれてしまいます。3日ずっと悩んでいます。
    試しに、配列$rireki の要素を1つに変えて、やってみましたが、
    a1 = 11
    となり、2回繰り返して書き込まれてしまいました。

    追記)失礼しましたコードが間違っていました。下から2行目は
    $v = $result[$a1] . $value;

    テーブルの初期値と、更新した後の値を教えてもらえませんか?

    テーブルの初期値

    id   | user_login | a1 | a2 | a3 | a4 |
    =====|============|====|====|====|====|
        1|       admin|   0|   0|   0|   0|

    更新後のテーブルの想定値(こうなったらOK!)

    id   | user_login | a1 | a2 | a3 | a4 |
    =====|============|====|====|====|====|
        1|       admin|   1|   2|   0|   0|

    実際に更新した後のテーブルの値(こうなってしまっている!)

    id   | user_login | a1 | a2 | a3 | a4 |
    =====|============|====|====|====|====|
        1|       admin|  11|  22|   0|   0|

    こういうことで良いですか?

    だとしたら、このコードで自分で文字列連結をしているので、そのせいです。

    $v = $result[$a1] . $value;

    正しくはこうではありません?

    $v = $result[$a1] + $value;

    トピック投稿者 nspenchan

    (@nspenchan)

    アドバイスありがとうございます。
    私の説明不足で申し訳ありません。UPDATE が2回かかってしまうとは、
    sigeyama 様の書かれている通りの問題です。コードを繰り返し、実行してみると、
    (更新前)a1=0, a2=0
    (更新一回目)a1=11, a2=22
    (更新2回目)a1=1111, a2=2222
    (更新3回目)a1=111111, a2=222222
    (更新4回目)a1=11111111, a2=22222222

    このように更新のたびに、2回づつ数字が書き込まれます。なぜでしょう? どこをいじったか覚えていませんが、以前は一回づつ登録できていました。

    ちなみに数字の和を登録するのではなく、文字列の連結して、正解不正解の履歴を残していきたいのです(正解=1, 不正解=2 として)。
    $v = $result[$a1] . $value; のコードがやりたいことです。

    トピック投稿者 nspenchan

    (@nspenchan)

    お騒がせして申し訳ありませんでした。テストのWordPress を新規にインストールして、同じコードを試したところ、問題が再現できませんでした。

    本体のWordPress のプラグインが悪さをしていたようです。プラグインを一つづつON/OFF してみたら、「Wordbooker」が怪しいことがわかりました。ちなみにすべてのプラグインは最新にしてあります。「Wordbooker」が問題の原因なのか、他のプラグインとの相性の問題なのかは、わかりません。

    疑問は残りますが(「Wordbooker」のどこが原因か? コードを一部修正して使い続けられるのか? など)、わたしの力は及ばない領域のようです。
    とりあえず、「Wordbooker」なしの運用を考えます。ありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「UPDATE が2回繰り返されてしまう問題」には新たに返信することはできません。