2014-10-04 46 views
0

我在从ColdFusion表单获取信息到操作页面并显示所需内容方面遇到了一些麻烦。基于从表单中选择的产品,我必须显示此产品的选定产品和公司名称。ColdFusion SELECT通过表单中的INNER JOIN

这里是我的表单页面的代码:

<form action="productinfo.cfm" method="post"> 
    <cfoutput query = "getProducts"> 
    ... 
    <input type="radio" name="prods" value="#getProducts.productname#"> 
    #getProducts.productname# 
    ... 
    </cfoutput> 
    <input type="submit" value="Submit"> 
</form> 

这里是我的行动网页代码:

<cfset prodname = form.prods> 

<cfquery name = "JoinProdSupp" datasource = "jeb48_northwind"> 
    SELECT Products.ProductName, Suppliers.CompanyName 
    FROM Suppliers INNER JOIN Products 
       ON Suppliers.SupplierID = Products.SupplierID 
    WHERE (((Products.ProductName)='#prodname#')); 
    </cfquery> 

我不完全知道如何输出查询的内容。

回答

1

我敢肯定,我想通了这一点......如果任何人有任何意见,我所有的耳朵。这是我结束了。

 <cfoutput query = "JoinProdSupp"> 
     #JoinProdSupp.ProductName#<br> 
     #JoinProdSupp.CompanyName#<br> 
    </cfoutput> 
+1

当您运行查询时,出于各种原因,您应该使用查询参数。在你的输出代码中,由于你的cfoutput标签中有一个查询属性,因此不需要使用查询名称来限定变量。 – 2014-10-04 09:19:10

+2

@DanBracuk是正确的,并要清楚,他的意思这样.. WHERE(((Products.ProductName)= ))。 CFQueryParam是针对sql注入的关键防御。 http://help.adobe.com/livedocs/coldfusion/8/htmldocs/help.html?content=Tags_p-q_18.html。还要注意标记周围缺少引号,cfqueryparam根据所选的cfsqltype指定添加引号。 – 2014-10-04 16:09:03

+2

查询名称确实是不必要的,但如果该cfoutput块增长并且变得更加复杂,那么将它放在那里真的很不错,尤其是当其他人出现并试图找出变量来自何处时。 – Barry 2014-10-08 16:26:04

1

作为参考..

你想了解任何CF变量的内容的任何时间,(数组,结构,查询,任何那些嵌套在任何那些的,嵌套在任何这些的)你可以使用CFDUMP。

<cfdump var="#MyQuery#"> 

(注意周围的变量名的哈希值,这些都是很重要的。)

关注,如果你执行这个脚本会发生什么。 (此脚本使用语法从CF 8或以上)

<cfscript> 
    s_struct = {}; // Create an empty structure. 
    s_struct.sample_array = ["sample","array","data"]; // Create an array with three elements 
    s_struct.sample_array[4] = {one = 1,banana = "yellow"}; // Add a fourth element to the same array, whose content is a struct with two elements. 
    s_struct.second_array = [{cat = "dog", red = "blue", big = "small"},{cat = "feline", dog = "canine", big = "large"}]; 
    s_struct.FirstArraySize = ArrayLen(s_struct.sample_array); 
</cfscript> 

<cfdump var="#s_struct#"> 

一个cfdump的输出基本上教你如何访问一个变量,它可与记录不完整的网络服务,或表有帮助的内容,即你不能直接访问。只记得总是清理生产中的cfdumps。