4

PHP で単純なリモート投票システムを作成していますが、php 形式での動的オプションとグループの制御に問題があります。

私はこのようなものが欲しいのですが....(質問は私の投稿の一番下にあります):

http://imageshack.us/photo/my-images/803/97450434.png/

次のコードがあります。

html:

<fieldset style="width:99%; float:left">
         <div id="dynamicInput">
              Group 1<br><input type="text" name="myGroupInputs[]">
                 <div id="dynamicInput" style="margin-left:50px;">
                      Option 1<br><input type="text" name="myOptionsInputs[]">
                 </div>
         </div>
             <input type="button" value="Add another group" onClick="addGroup('dynamicInput');">
             <input type="button" value="Add another option" onClick="addInput('dynamicInput');">         
</fieldset>

js:

var counter_option = 1;
var limit_option = 10;
var counter_group = 1;
var limit_group = 10;
function addInput(divName){

     if (counter_option == limit_option)  {
           alert('You cannot add more options.');
     }
    else {
          var newdiv = document.createElement('div');
          newdiv.innerHTML = "<font style='margin-left:50px;'>Option</font> " + (counter_option+ 1) + " <br><input type='text' style='margin-left:50px;' name='myOptionsInputs[]'>";
          document.getElementById(divName).appendChild(newdiv);
          counter_option++;
     }
}
function addGroup(divName){

     if (counter_group == limit_group)  {
           alert('You cannot add more groups.');
     }
    else {
          var newdiv = document.createElement('div');
          newdiv.innerHTML = "Group " + (counter_group + 1) + " <br><input type='text' name='myGroupInputs[]'>";
          document.getElementById(divName).appendChild(newdiv);
          counter_group++;
     }
}

1.このコードを編集して、各オプションを適切なグループに依存させ、別のグループを追加する場合にオプションのカウンターを0にリセットする方法は?
グループ 1、オプション 1、オプション 2;
グループ 2、オプション 1、オプション 2; 等

2. これらの値を後で php 変数、配列、または sth に入れる方法... - これらの値をデータベース (php スクリプト) に挿入したいと思います。スクリプトは、正しいグループに対応するオプションを認識している必要があります。

データベースには 2 つのテーブルがあります: グループとオプション (FK からグループ)

jsfiddle 編集へのリンク: http://jsfiddle.net/mnyyK/

助けてください....

4

1 に答える 1

1

多次元配列を使用できます。

グループの名前を次のように変更します。

<div id="dynamicInput">
  Group 1
  <br>
  <input type="text" name="groups[0][name]">
  <div id="dynamicInput" style="margin-left:50px;">
    Option 1
    <br>
    <input type="text" name="groups[0][options][]">
  </div>
</div>

新しいグループを追加したら、groups'インデックスを増やします。

"<input type='text' name='groups[" + counter_group + "][name]'>"

"<input type='text' name='groups[" + counter_group + "][options][]'>"

PHPでグループを次のように処理できるはずです。

foreach ($_POST['groups'] as $group) {
  $name = $group['name'];
  $options = $group['options'];
  ...
}

アップデート

混乱を解消するために、実際のコードは次のとおりです。

var counter_group = 0;
var limit_group = 10;
var counter_option = 0;
var limit_option = 10;

var addInput = function(divName) {
  if (counter_option == limit_option - 1) {
    alert('You cannot add more options.');
  } else {
    counter_option++;
    var newdiv = document.createElement('div');
    newdiv.innerHTML = "<font style='margin-left:50px;'>Option</font> " + (counter_option + 1) + "<input type='text' name='groups[" + counter_group + "][options][]'>";
    document.getElementById(divName).appendChild(newdiv);
  }
}

var addGroup = function(divName) {
  if (counter_group == limit_group - 1) {
    alert('You cannot add more groups.');
  } else {
    counter_group++;
    counter_option = -1;
    var newdiv = document.createElement('div');
    newdiv.innerHTML = "Group " + (counter_group + 1) + "<input type='text' name='groups[" + counter_group + "][name]'>";
    document.getElementById(divName).appendChild(newdiv);
  }
}
于 2012-12-16T13:12:55.187 に答える