ColdFusion Массивы и Переменные - PullRequest
1 голос
/ 15 октября 2010

Эй, ребята, я действительно застрял здесь.Я продолжаю получать сообщение об ошибке в этом коде, и я понятия не имею, почему.По сути, я пытаюсь проверить форму для поля с именем amount_ #, где # - число.Если он найдет его, я хочу просмотреть все эти поля и добавить их в двухмерный массив, чтобы я мог сохранить фактическое значение этого поля и число, которое было в конце.Я попробовал свой код ниже, и он не работает, выдавая ошибку:

При использовании именованных параметров для функции каждый параметр должен иметь имя.

Я понятия не имею, почему этоне работает, может кто-нибудь помочь, пожалуйста?Мой код ниже, спасибо.

      <!--- Check if there are multiple quantities --->
  <cfif ListContains(form.fieldnames, "quantity_")>
    <cfset quantities = ArrayNew(2)>
    <cfloop index="i" list="form.fieldnames">
      <cfif i contains "quantity_">
        <cfset product = ArrayNew(1)>
        <cfset product = ArrayAppend(product, form.[i])>
        <cfset product = ArrayAppend(product, ListGetAt(i, 2, "_"))>
        <cfset product = ArrayAppend(quantities)>
      </cfif>
    </cfloop>
    <cfset form.quantity = quantities>
  <cfelse>
    <!--- Make it so if the quantity is blank we set it to 0 so it passes validation --->
    <cfif form.quantity EQ "">
      <cfset form.quantity = 0>
    </cfif>
  </cfif>

Ответы [ 6 ]

4 голосов
/ 15 октября 2010

Атрибут list в CFLOOP также должен быть литералом списка, а не именем переменной.Вам нужны знаки фунта:

...

1 голос
/ 15 октября 2010

Это делает то, что я думаю, что вы хотите. В начале есть некоторые тестовые данные, а в конце - дамп массива количеств, чтобы вы могли запустить его без формы.

Я удалил внешний файл. Проверять, содержит ли список что-то, так же дорого, как обходить его, так что просто сделайте это один раз.

Использование содержимого для проверки на «количество_» ненадежно, так как оно выглядит где угодно в строке, а не только в начале. Это может привести к неожиданным ошибкам на трассе.

Вам не нужно инициализировать двумерный массив для количеств, потому что вы собираетесь поместить в него массив.

форма. [I] должна быть формой [i]

Плюс несколько ошибок с arrayAppend.

<!--- test data --->
<cfset form.quantity_1 = 5>
<cfset form.quantity_2 = 1>
<cfset form.quantity_3 = 10>
<cfset form.fieldnames = "quantity_1,quantity_2,quantity_3">

<!--- Check if there are multiple quantities --->
<cfset quantities = ArrayNew(1)>
<cfloop index="i" list="#form.fieldnames#">
  <cfif left( i, 9 ) eq "quantity_">
    <cfset product = ArrayNew(1)>
    <cfset ArrayAppend(product, form[i])>
    <cfset ArrayAppend(product, ListGetAt(i, 2, "_"))>
    <cfset ArrayAppend(quantities, product)>
  </cfif>
</cfloop>

<cfset form.quantity = quantities>

<cfif arrayLen( quantities ) eq 0>
  <!--- Make it so if the quantity is blank we set it to 0 so it passes validation --->
  <cfset form.quantity = 0>
</cfif>

<!--- check results --->
<cfdump var="#quantities#">
1 голос
/ 15 октября 2010

Кроме того, вы вызываете arrayAppend (values), но arrayAppend () принимает 2 параметра.

1 голос
/ 15 октября 2010

ArrayAppend возвращает true / false при завершении - не сам массив.

Попробуйте вместо этого:

<cfif i contains "quantity_">
    <cfset product = ArrayNew(1)>
    <cfset ArrayAppend(product, form.[i])>
    <cfset ArrayAppend(product, ListGetAt(i, 2, "_"))>
  </cfif>
0 голосов
/ 16 октября 2010

спасибо за всю помощь, и я принял ваш совет, и вот что я получил на работу:

  <!--- Check if there are multiple quantities --->
  <cfif ListContains(form.fieldNames, "QUANTITY_") neq 0>
    <cfset quantities = ArrayNew(1)>
    <cfloop index="i" list="#form.fieldnames#">
      <cfif i contains "QUANTITY_">
        <cfset product = ArrayNew(1)>
        <cfset product_id = ListGetAt(i, 2, "_")>
        <cfset ArrayAppend(product, evaluate("form.PAGETITLE_#product_id#"))>
        <cfset ArrayAppend(product, evaluate("form.#i#"))>
        <cfset ArrayAppend(product, "#product_id#")>
        <cfset ArrayAppend(quantities, product)>
      </cfif>
    </cfloop>
    <cfset form.quantity = quantities>
  <cfelse>
    <!--- Make it so if the quantity is blank we set it to 0 so it passes validation --->
    <cfif form.quantity EQ "">
      <cfset form.quantity = 0>
    </cfif>
  </cfif>

Еще раз спасибо, и я надеюсь, что мои ржавые навыки ColdFusion станут блестящими.

0 голосов
/ 15 октября 2010

Хорошо .. С информацией, которую вы дали, я пытался сделать то, что, как я думаю, вы пытаетесь достичь.

<cfset form.fieldnames = "">
<cfloop from="1" to="10" index="j">
 <cfset "form.quantity_#j#" = j*10>
 <cfset form.fieldnames = listAppend(form.fieldnames, "quantity_#j#")>
</cfloop>

<cfset Product = ArrayNew(1)>

<!--- Check if there are multiple quantities --->
<cfif ListContains(form.fieldnames, "quantity_")>
 <cfloop index="i" list="#form.fieldnames#">
  <cfif i contains "quantity_">
   <cfset Product[ListGetAt(i,2,"_")] = evaluate(i)>
  </cfif>
    </cfloop>
</cfif>

<cfdump var="#Product#">

Это берет всю информацию из формы и затем помещает ее в массив, но, возможно, структура будет более подходящей для того, чего вы пытаетесь достичь.

Fred

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...