1

フォームに可変数のフィールドがあります。テキスト フィールドの数は jquery の関数を使用してユーザーが定義しますが、フォームの最終的なコード (例) は次のとおりです。

<form id='form_educ' name='form_educ' method='post' action='form/educ.php'>   
  <div id='educ'>
    <input type='text' name='date1' id='date1'/>
    <input type='text' name='date2' id='date2'/>
    <input type='text' name='date3' id='date3'/>
    <input type='text' name='date4' id='date4'/>
    ....   
  </div> 
  <input type='submit' name='form_educ' value='Refresh'/>
</form>

INSERT TOユーザーがこれらのテキスト フィールドを追加すると、 (別のファイルに) SQL が作成されます。

$date = clean($_GET['date']);

"INSERT INTO educ (index_of_form, date, email) VALUES('$index', '', '" .mysql_real_escape_string($_SESSION['SESS_EMAIL']). "')";

$datedate1、またはdate2、またはdate3またはdate4です(例)。

ファイルeduc.phpで、mysql データベースのすべてのテキスト フィールドを更新します。

通常、それは

$example = clean($ _POST ['example']);

テーブルで更新を行うことができ、解決されました。

しかし、私の場合、$_POSTフィールドの数が可変 (date1、date2、date3、date4 の可能性がある) の場合、フォームのテキスト フィールドのすべての値を取得し、var を設定するにはどうすればよいでしょうか?

4

2 に答える 2

2

フォームフィールド名が不明な変数である理由は考えられません。繰り返し可能なフィールドを扱っている場合を除いて、その場合は、のような配列を使用dates[]し、プロセススクリプトで何を期待できるかがわかります。

追加情報については、例を参照してください:http ://www.web-design-talk.co.uk/58/adding-unlimited-form-fields-with-jquery-mysql/

将来への警告の言葉。フィールドを繰り返し可能にするときは、ユーザーが誤って挿入した可能性のあるフィールドも削除できるようにします。プロセススクリプトで配列キーが欠落していることに注意してください(ユーザーが送信前に一部のフォームフィールドを削除した場合、0〜10の数値インデックスが一部の値を欠落している可能性があります)。array_merge関数を使用して配列キーをリセットできます。同期化されたものとしてデータベースに追加しようとしている2つのアレイがある場合、キーの欠落が問題になります。


コメントに答えるために更新されました。

申し訳ありませんが、私はあなたの質問を理解していません。必ずしも隠しフィールドを使用する必要はありません。必要なのは、フォーム機能に一致するデータベース構造です。1対多の関係をサポートするためです。結局のところ、1人の人物、特定のイベントタイプ、またはその他に関連する複数の日付を挿入していることになります。1人のユーザーが世界で自分の好きな3つの日付を追加したいとします。フォームのソースコードは次のようになります。

<input type="text" name='dateLover' id='dateLover'/>

<input type="text" name="dates[]" id="date1" /> //you need a increasing variable for these id numbers (or dont't put the id at all)
<input type="text" name="dates[]" id="date2" />
<input type="text" name="dates[]" id="date3" />

さらに、などのフィールドを増やすことができます<input type="text" name="extra" />。送信された配列に$_POSTは、、、、、、のような変数と配列$_POST['dateLover']があります。繰り返し不可能な値を配列から直接取得しますが、dates配列を処理するには(または他のループ)が必要です。$_POST['date'][0]$_POST['date'][1]$_POST['date'][2]$_POST['extra']$_POSTforeach

データベースには2つのテーブルが含まれている必要があります(構造が簡略化されています)。

  1. personiddateLover
  2. dateiddateLoverFKからperson.dateLover、date

プロセススクリプトでは、次のことを行う必要があります。

  1. dateLoverに新しいを挿入し、彼を取得するためにperson使用しますlast_insert_idid
  2. aを使用しforeachて新しいdatesをテーブルに挿入しますdatedateLover'sidをFKとして)

これはすべて、以前に提供したリンクでかなりよく示されています。今のところ、実際の問題を理解せずに完全な例を示すことは困難です。


アップデート2。

div'ではなく、フォームをシリアル化しています。したがって、(動的に生成された)は次のようになります。

<form id="form_educ" name="form_educ" method="post" action="form/educ.php">
<div id="educ">   
    <div><!--This is for layout only-->
        <input type="text" name="dates[]" id="date0" />
        <input type="text" name="names[]" id="name0" />
    </div>
    <div>
        <input type="text" name="dates[]" id="date1" />
        <input type="text" name="names[]" id="name1" />
    </div>
    <div>
        <input type="text" name="dates[]" id="date2" />
        <input type="text" name="names[]" id="name2" />
    </div>
  </div> 
  <input type="submit" name="form_educ" value="Refresh" />
</form>​

そして、プロセスファイルで、これらの配列を配列から取得$_POSTし、データベースに次のように挿入します(もちろん、適切にエスケープされ、チェックされた値を使用します...):

//dynamic part of the query
$qEnd = '';
$i = -1;

//this is static part of the query
$qBeginning = "INSERT INTO `date` (`id`, `date`, `name`) VALUES ";

foreach ($_POST['dates'] as $key => $date){
  $i++;
  $qValues[$i] = "(null, '{$date}', '{$_POST[names][$i]}')"; //never do this, always check values...

  //value sets are concatenated one after another to the $qEnd
  $qEnd .= $qValues . ',';
}

//combine the query parts and remove extra "," from the end
$q = $qBeginning . rtrim($qEnd, ',');

//now the (single) query ($q) is ready to be executed, echo it just for the fun of it

id自動インクリメントフィールドである必要があります。そうしないと、この種のものはその場で機能しません。

繰り返しますが、これはjQueryリンクの例ですべて明確になっているはずなので、注意深く読んでください。

于 2012-04-14T17:48:31.543 に答える
1

事前に更新できる可能性のあるすべての列を知っておく必要があります。それらが$_POST変数に設定されているかどうかを確認してから、それらの値を挿入または更新ステートメントに追加しているかどうかを確認してください。

危険:すべてのパラメータを調べて$ _POST変数をループするだけで、データベースに関連しないPOSTフィールドが挿入ステートメントに挿入されて破損する可能性があります。

また、これらのメソッドを使用する場合は、SQLインジェクションに注意し、パラメーター化されたクエリを使用し、POST変数の名前または値をSQLステートメントに直接挿入しないでください。

于 2012-04-14T17:01:33.690 に答える