【发布时间】: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。