1

「値」テキスト フィールドしかない HTML フォームがありますが、ユーザーは 1 つの送信ボタンに対して任意の数の「値」テスト フィールドを生成できます。これが私のテーブルです

  CREATE TABLE IF NOT EXISTS `insert` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `insert_operation` int(11) NOT NULL,
    `value` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
   PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

ユーザーが 4 つの「値」テキスト フィールドを生成し、(a、b、c、d) のような4 つのデータを入力すると、4 つの挿入クエリが実行されますが、送信ボタンのクリックごとにinsert_operationが追跡されます。

以下のようになります

 Id Insert_operation 値
  1 1 a
  2 1 b
  3 1 c
  4 1 日
  5 2×
  6 2a       

私のhtmlフォームには、名前が値である値のテキストフィールドと、名前が保存されている送信ボタンがあります。

私のphpコードがわかりません。挿入クエリが PHP ループ内にある必要があることはわかっています。しかし、どうすれば実行できますか?

4

3 に答える 3

1

valueフィールドの名前がす​​べて同じであると仮定します。<input name="value[]" ... />

このようなことを試してください -

for($i=0;$i<count($_POST['value']);$i++){
   $value = mysql_real_escape_string($_POST['value'][$i]);
   if($i == 0){  // if the first increase MAX(insert_operation) by 1
       mysql_query("INSERT INTO `insert` SELECT null, IFNULL((SELECT MAX(insert_operation)+1 from `insert`), 1), '{$value}'");
   }
   else {   // if not the first use MAX(insert_operation)
      mysql_query("INSERT INTO `insert` SELECT null, IFNULL((SELECT MAX(insert_operation) from `insert`), 1), '{$value}'");
   }
}

最初のものMAX(insert_operation)はすでにテーブルにある を取得し、null の場合はそれを 1 に設定し、それ以外の場合は 1 ずつ増やします。残りはすべて に設定さinsert_operationMAX(insert_operation)ます。

このSqlFiddleの例を参照してください - http://sqlfiddle.com/#!2/afdc0/1


いくつかのメモ。insertmysql関数/予約語です。テーブルの名前を変更したほうがよいでしょうが、少なくともバックティックにする必要があります - `. ユーザー データ ( ) をエスケープする必要があります。$_POST['value']この場合、 を示しmysql_real_escape_string()ました。最後に、mysql_*関数は php5.5 で廃止されました。mysqli_またはに更新する必要がありますPDO

于 2013-07-08T07:36:58.073 に答える