ロゴをたっぷりアップロードできるフォームがあります。cftry/cfcatch
ステートメント内のファイル(空のフォームフィールド、間違った拡張子など)を検証しています。
でエラーを見つけたら、次のcftry
ようにします。
<cfthrow type="FileNotFound" message="#tx_settings_app_error_create_first#" />
そして私の「cfcatch」の中に
<cfcatch>
<cfoutput><script type="text/javascript">window.onload = function(){alert("#cfcatch.message#");window.location.href="hs_apps.cfm"; } </script></cfoutput>
</cfcatch>
これは正常に機能し、すべてのエラーをキャッチして、何が問題なのかをユーザーに警告します。
ここで、重複するユーザー名をチェックしているデータベース呼び出しで同じハンドラーを使用したいと思いました。まだ同じ:
<cfquery datasource="#Session.datasource#" name="duplicates">
SELECT a.app_alias
FROM apps AS a
WHERE a.iln = <cfqueryparam value = "#Session.loginID#" cfsqltype="cf_sql_varchar" maxlength="13">
AND a.app_alias = <cfqueryparam value = "#form.app_basic_alias#" cfsqltype="cf_sql_varchar" maxlength="50">
</cfquery>
<cfif duplicates.recordcount GT 0>
<cfthrow type="FileNotFound" message="#tx_settings_apps_error_dup#" />
</cfif>
cfcatch
も同じです。
でも。これでサーバーエラーページが表示され、アプリケーションからスローされます。
質問:何か
考えがありますが、なぜ私はcftry/cfcatch
ここで働くのに苦労しているのですか?私は無知です。
ありがとう!
編集:
ここに完全なコードがあります
<cfif isDefined("send_basic")>
<cfset variables.timestamp = now()>
<cfset variables.orderview = "1">
<cfif form.send_basic_type EQ "new">
<cftry>
<cfif module_check.recordcount GT 0>
<cfloop query="module_check">
<cfif module_check.module_name EQ "preorder">
<cfset variables.module_name = module_check.module_name>
<cfset variables.b2b_preord_ok = "true">
</cfif>
</cfloop>
<cfif form.app_basic_orderview EQ "preo">
<cfset variables.orderview = "0">
</cfif>
</cfif>
<!--- PROBLEM HERE: DUPLICATES --->
<cfquery datasource="#Session.datasource#" name="duplicates">
SELECT a.app_alias
FROM apps AS a
WHERE a.iln = <cfqueryparam value = "#Session.loginID#" cfsqltype="cf_sql_varchar" maxlength="13">
AND a.app_alias = <cfqueryparam value = "#form.app_basic_alias#" cfsqltype="cf_sql_varchar" maxlength="50">
</cfquery>
<cfif duplicates.recordcount GT 0>
<cfthrow type="FileNotFound" message="#tx_settings_apps_error_dup#" />
</cfif>
<!--- IF PASS, CREATE/UPDATE --->
<cfquery datasource="#Session.datasource#">
INSERT INTO apps ( ... )
VALUES( ... )
</cfquery>
<cfset variables.app_action = "Applikation erstellt">
<!--- success --->
<cfoutput><script type="text/javascript">window.onload = function(){alert("#tx_settings_app_cfm_create#");}</script></cfoutput>
<cfcatch>
<cfoutput><script type="text/javascript">window.onload = function(){alert("#tx_settings_app_err_create#");}</script></cfoutput>
</cfcatch>
</cftry>
<cfelse>
<cftry>
<!--- UPDATE --->
<cfquery datasource="#Session.datasource#">
UPDATE apps
SET ... = ...
</cfquery>
<cfset variables.app_action = "Applikation aktualisiert">
<!--- success --->
<cfoutput><script type="text/javascript">window.onload = function(){alert("#tx_settings_app_cfm_update#");}</script></cfoutput>
<cfcatch>
<cfoutput><script type="text/javascript">window.onload = function(){alert("#tx_settings_app_err_update#");}</script></cfoutput>
</cfcatch>
</cftry>
</cfif>
</cfif>
私が受け取ったエラーメッセージ私が指定したメッセージ=
<cfthrow type="FileNotFound" message="#tx_settings_apps_error_dup#" />
キャッチされた場合、背後のテキストに警告する必要がありますtx_settings_apps_error_dup
。cfcatch
指定したテキストであるをダンプするとcfcatch.message
、エラーが正常に検出され、サーバーエラーページとアラートが表示されます。ファイルのアップロードとフォームの送信にまったく同じハンドラーを使用しています。ここで機能しない理由がわかりませんか?
助けてくれてありがとう!
WORKAROUD:
いいことに注意してください、しかし十分です:
<cfif dups.recordcount NEQ 0>
<cfoutput><script type="text/javascript">window.onload = function(){alert("#tx_settings_apps_error_dup#"); location.href = "hs_apps_detail.cfm?create=newApp&id=none";}</script
</cfoutput>
<cfabort>
</cfif>
したがって、重複が見つかった場合は、ユーザーに警告し、まったく同じページをリロードしてcfabort
、古いページがそれ以上処理されないようにします。パッチです。