【问题标题】:Coldfusion 8 doing both CFIf and the CFElse statementColdfusion 8 同时执行 CFIf 和 CFElse 语句
【发布时间】:2012-03-07 22:47:53
【问题描述】:

我正在为电子商务网站制作用户注册应用程序,但遇到了一个非常奇怪的问题。当我运行这段代码时:

<cfif isValid("email", form.email)>
    <cfquery name="check_user" datasource="#request.dsn#">
        SELECT var_username, var_password
        FROM tbl_users
        WHERE var_username = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FORM.EMAIL#"> 
        AND var_password = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FORM.PASSWORD#"> 
    </cfquery>
    <cfif check_user.recordcount LT 1>
        <cfquery datasource="#request.dsn#" name="insertuser">
            INSERT INTO tbl_users (var_username, var_password) 
            VALUES
            (<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FORM.EMAIL#">,
            <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#FORM.PASSWORD#">)
        </cfquery>


        <cflogin idletimeout="1800">
        <cfloginuser 
                name = "#FORM.email#"
                password ="#FORM.password#"
                roles = "0">

        </cflogin>
        <cflocation addtoken="No" url="#request.secure_url#checkout.cfm">
    <cfelse>
        <cfset client.error_message = "Your Email Address is already registered.">
        <cflocation addtoken="No" url="#request.site_url#New-Account.html">
    </cfif>

<cfelse>
    <cfset client.error_message = "Your Email Address is not Valid.">
    <cflocation addtoken="No" url="#request.site_url#New-Account.html">

</cfif>

这段代码应该做的是检查电子邮件是否已经在数据库中,如果没有,则将电子邮件/密码添加到数据库中,然后将它们登录并将它们移动到安全结帐站点. 代码实际上在做什么,但完全不同。它正在检查它们是否在数据库中,然后添加它们,但是,在将它们添加到数据库后,它会跳过登录和 cflocation 并转到 cfelse,返回原始页面“New-Account”并显示 client.error_message。

代码如何运行 cfif check_user.recordcount,然后通过它的一部分跳到 cfelse?

我已经做了一些尝试缩小发生的事情的范围-

它正在通过 check_user 语句并添加用户,因为我可以直接访问数据库并且在尝试注册用户后,我将其删除并重试(请注意,当我尝试创建它时,它确实创建它),所以我知道它通过了 insertuser cfquery。我已将cflocation更改为重定向到google,但它没有,并且无论我是否登录,它都会显示在页面上,所以我知道它在cflogin之前跳到cfelse。

【问题讨论】:

  • 你会被重定向到 checkout.cfm 吗?
  • 不,对于这个 cfCase,它不会将我重定向到结帐,但是在我在页面上的其他 cfCase 中(IE 以访客身份结帐,以及登录和结帐)这两个都可以顺利运行并且将您传递给 checkout.cfm。

标签: coldfusion coldfusion-8


【解决方案1】:

我建议暂时注释掉你所有的 cflocations,看看你的行为是否相同。可能是您的登录过程在您的 cflocation 开始之前没有完成。

或者,可能是您的页面第一次正确提交给自己,然后第二次点击 else 子句。

你的代码中没有什么对我来说显然是错误的。

【讨论】:

  • 这听起来对我来说也是最有可能的罪魁祸首。代码在我看来是正确的。
  • 同意。我不认为这个代码是问题所在,问题是如何在这个页面(以及“新帐户”页面)之间进行路由,这可能是罪魁祸首。您是否检查过诸如任何意外的 HTTP 重定向之类的事情?
  • 我取出了 CFLocations 但离开了 cfLogin,它仍然无法登录,但会将电子邮件添加到数据库中。然后我取出 CfLogin 并离开 CFLocation,它仍然会添加电子邮件但不会更改 cfLocation。此外,该代码被包装在一个 CFCase 中,除非提交隐藏的表单值,否则该代码不会运行,所以我认为代码不可能被第二次点击。
  • @BrandonAllison,我很乐意提供帮助。如果我的回答对您有所帮助并导致了您的回答,请不要犹豫,将我的答案标记为正确答案。此外,对于第一次问题海报,您的问题做得非常出色。期待在未来帮助你,得到你的帮助!
  • 一般来说,奇怪的行为只是一种误解。我确信它正在做你告诉它做的事情。你只是在某个地方有一些错误的逻辑。把它拆开。把它重新组合起来。你会发现问题并解决它——最终。继续提问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
相关资源
最近更新 更多