mysql - Coldfusion 输出变量作为数据库中的图像

标签 mysql sql coldfusion

此功能将照片上传到我们网络的 map 中。之后它设置照片的路径并将源放入 imagepath 中。

    <cffunction name="uploadphoto" access="public" output="false" returntype="any">

            <cfif isDefined("myForm.Submit")>
                <returnvariable="imagePath">
            </cfif>

        <cfparam name="form.fileUpload" default="">

        <cfif len(trim(form.fileUpload))>
            <cfset LOCAL.imagePath = 'img/profiles/' />
            <cfset strPath = ExpandPath( "./" ) & LOCAL.imagePath /> 

            <cffile action="upload"
             fileField="fileUpload"
             destination="#strPath#"
             nameconflict="overwrite">

          <p>Thankyou, your file has been uploaded.</p>
        </cfif>
        <cfset form.filename = CFFILE.serverfile>


        <cfreturn LOCAL.imagePath & form.filename/>

        </cffunction>  

This function update's the database and puts the img source path (imagePath) in the database.



    <cffunction name="savephoto" access="public" output="false" returntype="any">
                    <cfargument name="dbname"   type="any" required="no" default="#SERVER.cfc.core.getDBName()#" />
                    <cfargument name="myForm" type="Struct" required="yes">
                    <cfargument name="imagePath" type="any" required="yes">

                    <cfquery name="upload" datasource="#SERVER.cfc.core.getDSN()#">

                    UPDATE logboek.tbl_users SET photo=<cfqueryparam cfsqltype="cf_sql_varchar" value="#ARGUMENTS.imagePath#"/>
                    WHERE Users_id=<cfqueryparam value="#SESSION.Login_logboek.User_id#" cfsqltype="cf_sql_integer">
                    </cfquery>

        </cffunction>

    <cffunction name="checkavatar" access="public" output="false" returntype="any">
                <cfargument name="dbname"   type="any" required="no" default="#SERVER.cfc.core.getDBName()#" />

                <cfquery name="checkavatar" datasource="#SERVER.cfc.core.getDSN()#">

This function checks if the right user is logged in to see the photo.

                    SELECT photo FROM logboek.tbl_users WHERE Users_id=<cfqueryparam value="#SESSION.Login_logboek.User_id#" cfsqltype="cf_sql_integer"> 
                </cfquery>

    <cfif checkavatar.RecordCount eq 1>
        <cfreturn checkavatar.photo />
    </cfif>


    </cffunction>

我的问题在于我想使用图像源从数据库中的路径在屏幕上输出图像VARIABLES.checkavatar需要从数据库返回“照片”,如下所示:

<cfoutput>
#VARIABLES.checkavatar#
</cfoutput>

最佳答案

这里有几个地方出了问题。

首先,也是最重要的,在函数 checkavatar 内,您正在重新分配变量 checkavatar到一个查询结果。实际上,这会在第一次调用函数时破坏该函数。由于 CF 奇怪的作用域规则,您需要首先包含类似 <cfset var checkavatar = -1> 的行。在执行查询之前的函数中。我进一步建议不要将变量命名为与其所在函数相同的名称。

您对该函数的调用最终应该类似于

<img src="#checkavatar()#"/>

因为该函数返回路径。在区分本地文件路径和可通过网络访问的文件路径之间的差异时,您可能会遇到其他问题,但这很难远程调试。

接下来,去掉 <cfif checkavatar.RecordCount eq 1>检查或修改它以处理这种情况。如果你只是<cfreturn checkavatar.photo />如果什么也没找到,你得到的最糟糕的结果就是一个空字符串。目前,您将不会返回任何内容,这将使调用它的页面崩溃。因此,要么显式抛出,要么返回默认头像图像。

最后,仅使用传递到函数中的变量作为参数(而不是像现在那样通过 session 传递变量)。这是更好的设计,并且以后更容易重用。

关于mysql - Coldfusion 输出变量作为数据库中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36056097/

相关文章:

用于维护修改历史记录的 SQL 触发器

javascript - Node.js - 根据客户端请求将 sql 数据传递到模块

cookies - 高效、安全的 cookie 身份验证和使用

mysql - 复合关键索引是否可以提高 or 子句的性能

php - 考虑到性能,我应该如何将 XML、JSON 与 MYSQL DB 混合使用

mysql - 如何格式化mysql中的数字以缩写形式输出?

Coldfusion,oauth_signature 无效

mysql - 查询不会在本地主机上运行

php - mysql如何将同一个表的一个字段的数据复制到另一个字段

html - 如何从服务器上的 img src 属性记录 url 变量(查询字符串)