ColdFusion:在整个页面中使用相同的查询

时间:2015-01-27 22:31:28

标签: mysql coldfusion cfquery

这看起来应该很容易,但是男人,我对这些东西都是这样的新手。我觉得我已经看过它了,所以如果这是一个愚蠢的问题,请耐心等待。


我在页面上设置了多个cfif,以在提交表单时过滤掉特定的用户组。我想在多个地方使用相同的cfquery。查询将使用相同的表单数据更新相同的表,不同之处在于创建新数据或更新数据。

编辑:在表单提交的基础上包含更详细的常见查询代码,以及我希望它们在代码注释中呈现

<cfquery name="setnewuserinfo" datasource="db">
  INSERT INTO users (name,email)
  VALUES ("#form.name#","#form.email#","#form.password#")
</cfquery>

<cfquery name="setnewcustomerinfo" datasource="db">
  INSERT INTO customers (name,phone,address,city,state,zip)
  VALUES ("#form.customer_name#","#form.phone#","#form.address#","#form.city#","#form.state#",#form.zip#)
</cfquery>

<cfquery name="updateuserinfo" datasource="db">
  UPDATE users
  SET 
    name = "#form.name#",
    email = "#form.email#"
  WHERE email = "#session.userinfo.email#"
</cfquery>

<cfquery name="updatecustomerinfo" datasource="db">
  UPDATE customers
  SET 
    name = "#form.customer_name#",
    phone = "#form.phone#",
    address = "#form.address#",
    city = "#form.city#",
    state = "#form.state#",
    zip = #form.zip#
  WHERE id = "#session.customerinfo.id#"
</cfquery>

<cfif IsDefined('form.submit')>
  <!--check signin-->
  <cfif IsDefined('session.userinfo'>
  <cfquery name="checkowner" datasource="db">
    SELECT role
    FROM users
    WHERE id = #session.userinfo.id#
  </cfquery>
    <cfif checkowner.role EQ "1"><!--is the owner-->
        <!--UPDATECUSTOMERINFO--> 
        <!--UPDATEUSERINFO-->
    <cfelse><!--not owner-->
        <!--SETNEWCUSTOMERINFO--> 
        <!--UPDATEUSERINFO-->
    </cfif><!--/check owner-->
  <cfelse><!--not signed in-->
      <!--CHECK DUPLICATE-->
      <cfquery name="checkdup" datasource="db" maxrows="1">
        SELECT id,email
        FROM users
        WHERE email = #form.email#
      </cfquery>
      <cfif checkdup.recordcount GT 0><!--there is a duplicate-->
          <cfquery name="checkowner" datasource="db">
            SELECT role
            FROM users
            WHERE id = #session.userinfo.id#
          </cfquery>
          <cfif checkowner.role EQ "1"><!--is the owner-->
              <!--UPDATECUSTOMERINFO--> 
              <!--UPDATEUSERINFO-->
          <cfelse><!--not owner-->
              <!--SETNEWCUSTOMERINFO--> 
              <!--UPDATEUSERINFO-->
          </cfif><!--/checkowner-->
      <cfelse><!--not a duplicate-->
        <!--SETNEWCUSTOMERINFO--> 
        <!--SETNEWUSERINFO-->
      </cfif><!--/checkdup-->

  </cfif><!--/check signin-->

</cfif><!--/form submit-->

我喜欢把问题放在某个地方<cfif>说出来#嘿!称这个特定的查询!&#34;,但我不知道如何。

提前感谢帮助。

1 个答案:

答案 0 :(得分:1)

Big Mike,

您最适合使用FW / 1或Coldbox等MVC框架来帮助您解决此问题。我建议调查一下。

如果您不使用框架,我至少会使用包含您的查询代码的CFC。

以最简单的方式处理您的问题,您将使用UDF。

<cfif stuctKeyExists(form, "submit")>
    <cfif structKeyExists(form, "user1")>
        <cfif form.user1 IS A>
            <cfset setDatabase( value1 = form.value1 )>
        </cfif>
    </cfif>
    <!--- more if/else statements below --->
</cfif>

<cffunction name="setDatabase" output="false" returnType="void">
    <cfargument name="value1">

    <cfquery name="qSetInfo">
        UPDATE table1
        SET value1 = arguments.value1
    </cfquery>
    <cfquery name"qUpdateInfo">
        UPDATE table2
        SET value1 = arguments.value1
    </cfquery>
</cffunction>