0

基本的に、誰かがこのフォームに記入する前に、「部門」の入力に応じて一定数の「出版物の種類」を生成するフォームがあります。(認識される部門固有のパブリケーションタイプ。)各パブリケーションタイプに対応するフィールドがいくつかあります...(これらは同じフィールドであるため、各タイプには...たとえば3つのフィールドがあります。)私はこのデータを読み取り、データベースに配置するループ。ただし、フィールドの1つが入力されていない場合、その特定のフィールドの値は完全にスキップされ、データの入力が破棄されます。

例:ユーザーには3つのフィールドがあり、これらの3つのフィールドが3回繰り返されます。ユーザーは、最初の行に3つ、2番目の行に2つ、3番目の行に3つ入力します。それで:

  • 最初のフィールド配列:1、1、1
  • 2番目のフィールド配列:1、1
  • 3番目のフィールド配列:1、1、1

リストに表示されるように、2番目のフィールド配列でその空のフィールドをマークする方法を理解する必要があります。フィールドにデフォルト値を設定することはできますが、誰かがそのデータを簡単に削除する可能性があり、名前/タイトルフィールドに「なし」などがあると厄介に思えます...

何か案は?

編集:コードスニペット(注:重要でないスタイルタイプのものをすべて切り取りました...)

<cfoutput query = "getType_PUB">
Publications: #rName# <br />
<input type = "hidden" name = "scholarActivities" value = "#rName#" />
<input type="text" name="inpress09"  size = "8"/><br />
<input type="text" name="published09" size = "8"/><br /> 
<input type="text" name="published08" size = "8"/><br />
<input type="text" name="published07" size = "8"/><br />
</cfoutput>

<cfoutput><input type = "hidden" name = "recordcountPub" value = "#getType_PUB.recordcount#" /></cfoutput>


//////////////DB/////////////

<cfif #form.recordcountPUB# EQ 1>
<cfquery name = "insertSActivities" datasource="cas_evaluation">
  INSERT INTO scholar_publications (faculty, scholarActivities, submit09, inpress09, published09, published08, published07)
  VALUES ( '#form.name#', '#form.scholarActivities#', '#form.submit09#', '#form.inpress09#', '#form.published09#', '#form.published08#', '#form.published07#')
  </cfquery>
<cfelse>
<cfloop from="1" to="#form.recordcountPUB#" index="i">
  <cfquery name = "insertSActivities" datasource="cas_evaluation">
  INSERT INTO scholar_publications (faculty, scholarActivities, submit09, inpress09, published09, published08, published07)
  VALUES ( '#form.name#', '#ListGetAt(form.scholarActivities, i, ',')#', '#ListGetAt(form.submit09, i, ',')#', '#ListGetAt(form.inpress09, i, ',')#', '#ListGetAt(form.published09, i, ',')#', '#ListGetAt(form.published08, i, ',')#', '#ListGetAt(form.published07, i, ',')#')
  </cfquery>
</cfloop>
</cfif>
4

2 に答える 2

2

(私のコメントを詳しく説明します。)一意のフィールド名を作成する方が安全です。そうしないと、ユーザーがフォームフィールドの1つにコンマを入力すると、INSERTコードが破損する可能性があります。すでにクエリループを使用しているため、フィールドの各セットに#currentRow#を追加して、名前を一意にすることができます

<cfoutput query = "getType_PUB">
    Publications: #rName# <br />
   <input name="scholarActivities#CurrentRow#" ... />
   <input name="inpress09#CurrentRow#" ... />
   <input name="published09#CurrentRow#" ... />
</cfoutput>

<cfoutput>
   <input name="recordcountPub" value="#getType_PUB.recordcount#" .. />
</cfoutput>

アクションページで、配列表記を使用して値をループして抽出するだけです。追加のCFIFは必要ありません。CFPARAMまたはstructKeyExistsを使用して、存在しない可能性のあるフィールド(チェックボックスまたはラジオボタンなど)を処理できます。

<cfloop from="1" to="#form.recordcountPUB#" index="i">
   <!--- extract the values ...--->
   <cfset scholarActivities = FORM["scholarActivities"& i]>
   <cfset submit09 = FORM["submit09"& i]>
   ... 
  <cfquery ....>
        Do the INSERT 
  </cfquery>
</cfloop>
于 2010-10-21T20:16:44.300 に答える
1

これらはどのフィールドタイプですか?チェックボックス?その場合は、アクションページでデフォルト値を設定できます。値は0、または回答がないことを示すその他の値です。次に、その非回答値を確認してスキップします。

または、値が空白として渡され、ループコードがそれをリスト/配列に追加しないだけですか?

あなたからの簡単なコード例は、人々があなたにより良い方向性を与えるのを助けます。

于 2010-10-21T14:22:50.283 に答える