2012-09-09 127 views
0

我:

<form action="save.php" method="POST"> 
<input type="text" name="test[one][]" value="a"><input type="text" name="test[two][]" value="a"> <br /> 
<input type="text" name="test[one][]" value="s"><input type="text" name="test[two][]" value="s"><br /> 
<input type="text" name="test[one][]" value="d"><input type="text" name="test[two][]" value="d"><br /> 
<input type="text" name="test[one][]" value="f"><input type="text" name="test[two][]" value="f"><br /> 
<input type="text" name="test[one][]" value="g"><input type="text" name="test[two][]" value="g"><br /> 

<input type="submit"> 
</form> 

在數據庫有:

Table: 
id | one | two 
在PHP

我想補充:

if($_POST){ 
    foreach($_POST['test'] as $post){ 
      $new = new Table(); 
      $new->setOne($post['one']); 
      $new->setTwo($post['two']); 
      $new->save(); 
    } 
} 

但是這不工作...我不能使用POST作爲索引'one'和'two' - 我必須使用兩個循環foreach。有可能用一個foreach或foreach做成foreach嗎?

的print_r($ _ POST)返回我:

[test] => Array ([one] => Array ([0] => a [1] => s [2] => d [3] => f [4] => g) [two] => Array ([0] => a [1] => s [2] => d [3] => f [4] => g))) 
+2

打印一個'的var_dump($ _ POST)'篩選,一切都會清潔。 – moonwave99

+0

如果你這樣設置,擺脫'一'和'兩'的東西。根據$ _POST數組中的奇數和偶數(索引)循環$ _POST和映射。 –

+1

順便說一句,給你的對象一個描述性的名字(如$表)而不是$新,這提高了你的代碼的可讀性。另外,'if($ _POST)'不能確保你需要的所有'$ _POST'值都被設置,你應該使用['isset()'](http://php.net/manual/en/function)。而不是.setset.php)。最後,我不知道你是否自己編寫了Table類,但'setOne'和'setTwo'看起來像setter,而它們實際上是添加項目的方法(對吧?)。也許你應該改名爲'addOne'和'addTwo'? – Frog

回答

3

我會走這條路:

if (!empty($_POST)) { 
    // now $_POST['test'] is array('one' => array(), 'two' => array() 
    for ($i = 0, $c = count($_POST['test']['one']); $i < $c; ++$i) { 
    $new = new Table(); 
    $new->setOne($_POST['test']['one'][$i]); 
    $new->setTwo($_POST['test']['two'][$i]); 
    $new->save(); 
    } 
} 
0
if(is_array($_POST['test'])){ // also check that the user submitted an array 
    foreach($_POST['test'] as $post){ 
      $new = new Table(); 
      foreach ($post['one'] as $item) { // $post['one'] and $post['two'] should have the same number of elements so looping through $post['one'] is sufficient to get entries for $post['two'] 
       $new->setOne($item); 
       $new->setTwo($item); 
       $new->save(); // each item is saved in the database now 
      } 
    } 
} 
+0

這隻保存最後一個記錄 –

+0

我更新了代碼。因爲我沒有訪問新的表()我只能假設。現在很清楚 - > save()將INSERT插入到數據庫中。 – rationalboss