2016-04-06 7 views
0

Ich versuche eine Abfrage durchzuführen, die meiner trans_location-Spalte mit den Formulardaten entspricht, die der Benutzer eingibt. Ich habe ein Dropdown-Feld, in dem der Benutzer mehrere Standorte auswählen kann. Wenn sie mehrere auswählen, werden Kommata zwischen den einzelnen Orten eingefügt. Wenn ich nur einen Standort auswähle, werden die Ergebnisse korrekt mit dem richtigen Standort angezeigt. Aber wenn ich mehr als einen Ort auswähle, findet er keinen der Orte. Bilden die Kommas nur einen Namen und es wird nicht nach jedem Ort gesucht?CF-Abfragen mit Formularvariablen, die von einem Benutzer eingegeben wurden

enter image description here

<cfset result = {} /> 
<cftry> 
    <cfset date1 = #CREATEODBCDATETIME(form.StartDate & '00:00:00')#> 
    <cfset date2 = #CREATEODBCDATETIME(form.EndDate & '23:59:59')#> 

    <cfquery datasource="#application.dsn#" name="GetLocationInfo"> 
     SELECT * 
     FROM cl_checklists 
     WHERE date >= #date1# AND date <= #date2# 
     AND trans_location = '#form.Location#' 
    </cfquery> 

<cfoutput>#date1#</cfoutput> 
<cfoutput>#date2#</cfoutput> 

<cfdump var="#GetLocationInfo#"> 

    <cfcatch type="any"> 
     <cfset result.error = CFCATCH.message > 
     <cfset result.detail = CFCATCH.detail > 
    </cfcatch> 
</cftry> 

Ich habe auch versucht, so etwas wie dies zu tun:
AND trans_location = <cfqueryparam value='#form.Location#' />

+0

Nicht zu Ihrer Frage, aber ich finde ausgewählte Steuerelemente, die mehrere Auswahlen zu wirklich leicht zu vermasseln erlauben. Sie könnten stattdessen Checkboxen in Betracht ziehen. –

+0

Randnotiz, wenn Sie nach ganzen Daten filtern müssen, ist der richtige Vergleich 'WHERE Col> = {startDateAtMidnight} UND Col <{dayAfterEndDateAtMidnight}']. Unter [this thread] (http://stackoverflow.com/a/27062906/104223) finden Sie weitere Details und den richtigen cf_sql_type. – Leigh

Antwort

3

Sie benötigen die INoperator in Verbindung mit cfqueryparam mit dem list="true" Attribut zu verwenden. (Hier ist ein kurzes hilfreiches Tutorial für cfqueryparam: https://www.petefreitag.com/item/677.cfm)

Schließlich: immer, immer, immer Verwendung cfqueryparam wenn Parameter an die Datenbank senden.

<cfset result = {} /> 
<cftry> 
    <cfset date1 = CREATEODBCDATETIME(form.StartDate & '00:00:00')> 
    <cfset date2 = CREATEODBCDATETIME(form.EndDate & '23:59:59')> 

    <cfquery datasource="#application.dsn#" name="GetLocationInfo"> 
     SELECT * 
     FROM cl_checklists 
     WHERE date >= <cfqueryparam value="#date1#" cfsqltype="cf_sql_timestamp" /> 
       AND date <= <cfqueryparam value="#date2#" cfsqltype="cf_sql_timestamp" /> 
       AND trans_location IN (<cfqueryparam value="#FORM.location#" cfsqltype="cf_sql_varchar" list="true" /> ) 
    </cfquery> 

<cfoutput>#date1#</cfoutput> 
<cfoutput>#date2#</cfoutput> 

<cfdump var="#GetLocationInfo#"> 

    <cfcatch type="any"> 
     <cfset result.error = CFCATCH.message > 
     <cfset result.detail = CFCATCH.detail > 
    </cfcatch> 
</cftry> 
Verwandte Themen