Создать две переменные из проанализированной строки

Я пытаюсь разобрать строку на две переменные. Источником является SQL-запрос, который заполняет значения для нескольких флажков. Количество флажков зависит от результатов запроса. Флажки кодируются:

<input type="checkbox" name="Listname" value="#RecID#:#DistListName#" ID="ListName#ListID#">

Используя код, который я нашел здесь, я удаляю :, разделяющий RecID и DistListName, с помощью:

<cfset PreParseList = #form.Listname#>    
<cfset ParseList = ListToArray(PreParseList, ":", false, true)>

Вывод ParseList выглядит так:

627 Corporate IT Desktop Team DL,629 Corporate IT Helpdesk Team DL,607 HMC Behavioral Health DL,257 Kauai Region HR

Мне нужно создать две переменные, одну для RECID, которая может содержать от 1 до 3 цифр, и одну для имени. RecID записывается в соединительную таблицу, которая определяет, к каким спискам рассылки будет иметь доступ пользователь. Имя просто отображается на странице подтверждения.

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


person toleolu    schedule 01.05.2015    source источник
comment
Прокрутите переменную как список и используйте ListFirst и listRest   -  person Matt Busche    schedule 02.05.2015
comment
Лучшее решение — нормализовать структуру таблицы, а не хранить списки.   -  person Matt Busche    schedule 02.05.2015


Ответы (1)


<cfset recIds = []>
<cfset distListNames = []>
<cfloop list="#form.Listname#" index="checkboxValue">
  <cfset arrayAppend(recIds, listFirst(checkboxValue, ':'))>
  <cfset arrayAppend(distListNames, ListRest(checkboxValue, ':'))>
</cfloop>

должен ли я изучить другой способ передачи RecID и имени?

Логично было бы установить только значение чекбокса в RecID, так как "имя просто отображается на странице подтверждения". Затем вы бесплатно получаете список RecIDs из области form, готовых к использованию. Является ли страница подтверждения страницей CFM? Если да, не могли бы вы отобразить имя (имена), которые снова извлекаются из БД по идентификатору (ам)?

person Henry    schedule 01.05.2015
comment
Спасибо, Генри, я как раз собирался опубликовать, потому что разобрался с циклом, но у меня возникли проблемы с установкой переменной, я мало работал с массивами, ваше предложение сработало отлично. И да, я думал о том, чтобы просто передать RecID и использовать его в SQL-запросе для перечисления имен, я мог бы сделать это легко, вы бы так поступили? Просто подумал, может быть, это был ненужный вызов SQL, так как у меня уже были данные. Но если это не проблема, у меня нет проблем с этим. Мэтт, мне не хватает места, я отвечу на твой комментарий после того, как опубликую это. - person toleolu; 02.05.2015
comment
Мэтт, что касается нормализации SQL, дай мне знать, если я делаю это неправильно. У меня есть одна таблица, содержащая моих пользователей, у меня есть другая таблица, содержащая мои списки рассылки, затем у меня есть третья таблица, я называю ее соединительной таблицей, она имеет идентификатор пользователя из пользовательской таблицы и идентификатор записи из списка рассылки. table, которая определяет, какие списки может редактировать конкретный пользователь. Конечно, я получаю один и тот же идентификатор пользователя и идентификатор списка рассылки, появляющиеся в этой таблице много раз, но я думал, что именно так вы сделали отношения многие ко многим. Можете ли вы предложить лучший способ? Спасибо. - person toleolu; 02.05.2015
comment
(Правка) RE: Просто подумал, может быть, это ненужный вызов SQL Нет, совершенно нормально запустить другой запрос. Хранение обоих значений просто добавляет ненужную сложность IMO. Как Генри упоминал выше, обычно вы сохраняете идентификатор (только) в качестве значения флажка. Этот метод имеет ряд преимуществ по сравнению с вашим текущим методом. - person Leigh; 02.05.2015
comment
Какую пользу выполняет массив? Разве это не просто еще одна переменная? - person Dan Bracuk; 03.05.2015
comment
Вероятно, потому что Array[i] легче читать и писать, чем ListFirst(ListGetAt(list,i),":"), а также ListRest(). - person Regular Jo; 03.05.2015
comment
Еще раз спасибо всем, отличные предложения. Чтобы упростить ситуацию, я собираюсь сделать второй вызов SQL, чтобы получить имя списка из RecID для страницы подтверждения. люблю просто!! Теперь мне нужно выяснить, как отображать результаты в трех столбцах, а не в одном длинном столбце. Как бы я ни был плох в этом, я еще хуже с html. Спасибо еще раз. - person toleolu; 05.05.2015