0

ユーザーがセット全体から 4 つのレコードを選択して、特定の順序 (1 ~ 4) で表示できるようにするフォームがあります。フィールドには、blah1、blah2 などの名前が動的に付けられます。ただし、更新クエリは機能せず、結果を出力するとすべてデフォルト値の 1 になります。

<cfquery name="allRecipes" datasource="#request.db#">
    SELECT id, name, homepage_order
    FROM tblrecipes
    ORDER BY name
</cfquery>

<cfquery name="getOnlySelected" dbtype="query">
    SELECT *
    FROM allRecipes
    WHERE homepage_order > 0
    ORDER BY homepage_order
</cfquery>

<cfloop from="1" to="4" index="i">
            <li>
                Position <cfoutput>#i#</cfoutput>: Current recipe published: <strong><cfoutput>#getOnlySelected['name']["#i#"]#</cfoutput></strong><br />
                Choose New:
                <cfselect name="position#i#" query="allRecipes" value="id" display="name" queryPosition="below" selected="#getOnlySelected['id']['#i#']#">
                    <option value="">-Select-</option>  
                </cfselect>
            </li>

        </cfloop>

そして、フォーム送信クエリ:

<cfquery datasource="#request.db#">
        UPDATE tblrecipes
        SET homepage_order = 0
        WHERE 1=1
    </cfquery> //This query resets all the order values

    <cfif IsNumeric(form.position1)>
        <cfquery name="updateOrder1" datasource="#request.db#">
            UPDATE tblrecipes
            SET homepage_order = 1
            WHERE id = #form.position1#
        </cfquery>
    </cfif>

    <cfif IsNumeric(form.position2)>
        <cfquery name="updateOrder2" datasource="#request.db#">
            UPDATE tblrecipes
            SET homepage_order = 2
            WHERE id = #form.position2#
        </cfquery>
    </cfif>

    <cfif IsNumeric(form.position3)>
        <cfquery name="updateOrder3" datasource="#request.db#">
            UPDATE tblrecipes
            SET homepage_order = 3
            WHERE id = #form.position3#
        </cfquery>
    </cfif>

    <cfif IsNumeric(form.position4)>
        <cfquery name="updateOrder4" datasource="#request.db#">
            UPDATE tblrecipes
            SET homepage_order = 4
            WHERE id = #form.position4#
        </cfquery>
    </cfif>

フォーム データのダンプの例を次に示します。各位置の値は正しいです。

FIELDNAMES  POSITION1,POSITION2,POSITION3,POSITION4,SUBMIT
POSITION1   81
POSITION2   82
POSITION3   80
POSITION4   78
SUBMIT  Update Order 

クエリ結果は、フォーム送信の前後で同じように見えます

HOMEPAGE_ORDER  ID  NAME
1   81  Okonomiyaki
1   82  Apple Chutney Cubes
1   80  Asparagus for the Family
1   78  Coconut Curry Sauce Cubes
CACHED  false
EXECUTIONTIME   0
SQL     SELECT * FROM allRecipes WHERE homepage_order > 0 ORDER BY homepage_order 
4

1 に答える 1

0

やってみました:

  1. に送信されているページで。フォームの値が送信されているのか、サーバー側のコードが問題なのかを確認するだけです

  2. 同様に、更新コードの更新が実行されているかどうかを出力する何かを追加します。あなたは、それらはすべてデフォルトで 1 になっていると言っていますが、コードは実行されていると思います。

  3. Fiddlerをダウンロードしてインストールし、それを使用してブラウザーが送信する値を監視します。

  4. フォームが含まれているページのソースを読んでください。フォームの正しい部分に実際にタグがあり、期待するデータを送信していますか?

コードの外観から、更新クエリが 4 つの値すべてを 1 に設定できる唯一の方法は、それがクライアントが送信しているものであるため、生成されたページに何かがあると思われますが、再作成したばかりですあなたの例の骨はローカルにあり、すぐに何か問題があることはわかりません。

于 2012-05-18T06:03:41.737 に答える