2015-03-11 6 views
0

Я могу отображать состояния флажка из SQL-запроса, но я не могу их обновить. Я использую бит как тип данных. Я уверен, что проблема в том, как я использую cfif для проверки значений флажков. Если я их прокомментирую, любые значения, которые у меня есть в таблице, будут перезаписаны по умолчанию cfparam, и я получаю небольшое подтверждающее сообщение на странице действия. Я пробовал cfif, cfif isDefined и т. Д. Я читал и работал над этим с прошлой недели, просто не могу обернуться вокруг него. Вот пример кода из моего тестового сервера: (FYI Я использую ту же страницу действий для просмотра и обновления записи.)Обновление SQL с флажковыми значениями

<cfif isDefined ("form.update")> 

<cfparam name="checkbox1" default=0> 
<cfparam name="checkbox2" default=0> 
<cfparam name="checkbox3" default=0> 
<cfparam name="checkbox4" default=0> 


<cfif #form.chkbox1# EQ checked> 
<cfset checkbox1=1> 
</cfif> 

<cfif IsDefined (form.chkbox2)> 
<cfset checkbox2=1> 
</cfif> 

<!--- <cfif IsDefined (form.chkbox3)> 
<cfset checkbox3=1> 
</cfif> 

<cfif IsDefined (form.chkbox4)> 
<cfset checkbox4=1> 
</cfif> ---> 

<cfquery name="update" datasource="HHSCIntra"> 

    UPDATE tbl_checkbox 
    SET chkbox1 = #checkbox1#, chkbox2=#checkbox2#, chkbox3=#checkbox3#, chkbox4=#checkbox4# 
    WHERE RecID = #user# 

</cfquery> 

<cfoutput>Record number: #user# Updated.</cfoutput> 

<cfelse> 

<cfquery name="checkboxview" datasource="HHSCIntra"> 

    SELECT * FROM tbl_checkbox WHERE RecID = #form.nameselect# 

</cfquery> 

<cfif #checkboxview.chkbox1# EQ 1> 
<cfset chkbox1checked="yes"> 
<cfelse> 
<cfset chkbox1checked="no"> 
</cfif> 

<cfif #checkboxview.chkbox2# EQ 1> 
<cfset chkbox2checked="yes"> 
<cfelse> 
<cfset chkbox2checked="no"> 
</cfif> 

<cfif #checkboxview.chkbox3# EQ 1> 
<cfset chkbox3checked="yes"> 
<cfelse> 
<cfset chkbox3checked="no"> 
</cfif> 

<cfif #checkboxview.chkbox4# EQ 1> 
<cfset chkbox4checked="yes"> 
<cfelse> 
<cfset chkbox4checked="no"> 
</cfif> 

<cfform action="checkboxaction.cfm" method="post"> 

<cfoutput query="checkboxview">#name#</cfoutput> 

<cfinput name="user" type="hidden" value="#checkboxview.RecID#"><br> 


     Checkbox 1: <cfinput type="checkbox" name="chkbox1" checked="#chkbox1checked#" value=1><br> 
     Checkbox 2: <cfinput type="checkbox" name="chkbox2" checked="#chkbox2checked#" value=1><br> 
     Checkbox 3: <cfinput type="checkbox" name="chkbox3" checked="#chkbox3checked#" value=1><br> 
     Checkbox 4: <cfinput type="checkbox" name="chkbox4" checked="#chkbox4checked#" value=1><br> 

<br> 

<cfinput type="submit" name="update" value="Update"> 

</cfform> 

</cfif> 

Mahalo

+1

Флажок должен быть возвращен как «включен» из вашей формы. Независимо от того, какое значение вы установили для отмеченной переменной, не должно быть «включено». Также вырезайте cfinput и cfform и используйте регулярные формы и теги ввода. –

+1

Это потому, что вы используете разные имена для своих операторов 'cfparam' и полей флажков. Таким образом, вы не назначаете значения по умолчанию - вы фактически создаете совершенно новые переменные. Имена должны совпадать. – Leigh

+1

Кроме того, есть много мест, где вы можете очистить/улучшить код. Вы можете отправить его на [codereview] (http://codereview.stackexchange.com/), чтобы получить обратную связь. – Leigh

ответ

2

Я предпочитаю использовать cfparam, как:

<cfparam name="form.chkbox1" default="0" overwrite="false" /> 

И затем использовать значение переменной в вашем cfquery:

SET chkbox1 = <cfqueryparam value="#form.chkbox1#" cfsqltype="CF_SQL_BIT" /> 

Ваше мнение установка значение 1, если отмечено. Если он не установлен, он не будет передан в области формы.

+1

(Изменить) Согласовано с переменными диапазона. (Хотя причина получает значение по умолчанию каждый раз, потому что имена полей ввода не соответствуют именам, используемым в операторах cfparam, то есть 'chkbox1' по сравнению с' checkbox1'.) +1 для области видимости и cfqueryparam. – Leigh

+0

Спасибо, пытаясь получить ответ Стива на работу, но холодный синтез бросает всевозможные ошибки на тег cfparam. Ошибка проверки атрибута для тега CFPARAM. Не позволяет атрибут (ы) VALUE. Допустимыми атрибутами являются DEFAULT, MAX, MIN, NAME, PATTERN, TYPE. Контрольный сервер ColdFusion 9, эти атрибуты не поддерживаются в 9? Также была сброшена ошибка в атрибуте cfsqltype. Это бросает ошибку на View, не уверен, почему она это делает, поскольку весь этот код вложен в тег cfif isDefined form.update. Не следует ли пропустить этот код, когда я просто нажимаю «Просмотр»? Mahalo. – toleolu

+0

Это работает: \t UPDATE tbl_checkbox \t SET chkbox1 = #form. chkbox1 #, chkbox2 = # form.chkbox2 #, chkbox3 = # form.chkbox3 #, chkbox4 = # form.chkbox4 # \t WHERE RECID = # пользователь # ---> Был я то недоразумение в ответ Стива? – toleolu

Смежные вопросы