2012-05-18 24 views
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 
+1

**在查詢中使用[cfqueryparam](http://cfdocs.org/cfqueryparam)!** –

+0

+100 for cfqueryparam!切勿將用戶提交的數據直接放入查詢中,而無需以某種方式清除它(這是cfqueryparam的一部分)。這只是要求一個SQL注入攻擊。 – Sharondio

+0

你是對的,我通常會這樣做。 –

回答

0

你試過:

  1. 正在被提交到頁面上。只是爲了確認它是發送的表單值還是代碼服務器端是問題

  2. 同樣,添加一些內容以輸出更新代碼中的更新是否正在運行。你說他們都默認爲1,這讓我認爲代碼正在運行。

  3. 下載並安裝Fiddler並使用它來觀察瀏覽器正在發送什麼值。

  4. 閱讀頁面的源代碼。實際上標籤是否在表單的右邊,因此它提交了您期望的數據?

從您的代碼,只有這樣的更新查詢可能是所有四個值設置爲1的外觀是如果多數民衆贊成什麼客戶端發送,所以我懷疑在生成網頁的東西,雖然我剛剛在本地重新創建了您的示例的骨骼,但無法立即看到任何錯誤。

+0

向處理頁面添加一個cfdump var =「#FORM#」以準確查看傳入數據的內容。我的直覺還在於確認正在構建的表單正是您期望的,因此請查看前端生成的HTML源代碼。 – Sharondio

+0

我用這些信息更新了帖子。但是,我不能轉儲更新查詢,說他們是未定義的(但他們每個都相應地命名)。 –

+0

我會在您擁有的每個語句。如果查詢未定義,那麼這意味着查詢沒有運行。而且,在CF調試開啓的情況下,CF會說什麼查詢呢?這現在看起來很莫名其妙! – barnyr