Coldfusion 8 делает и CFIf и заявление CFElse
Я делаю приложение для регистрации пользователей на сайте ecomerce, но столкнулся с очень странной проблемой. Когда я запускаю этот код:
<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 и добавляет пользователя, потому что у меня есть прямой доступ к базе данных, и после попытки зарегистрировать пользователя я удаляю его и пытаюсь снова (и замечаю, что когда я пытаюсь его создать, он действительно его создает), так что я знаю, что это проходит через cfquery. Я изменил cflocation для перенаправления в Google, но это не так, и я также показываю на странице, вошел ли я в систему, так что я знаю, что он пропускает к cfelse до cflogin.
1 ответ
Я бы предложил временно закомментировать все ваши места и посмотреть, будет ли ваше поведение таким же. Возможно, ваш процесс входа в систему не завершится до того, как начнется ваша cflocation.
Или, может быть, ваша страница отправляется сама правильно в первый раз, а затем во второй раз попадает в предложение else.
В вашем коде нет ничего, что явно не так для меня.