2013-07-18 73 views
0

我正在使用foreach並得到一些問題。我有2循環與正常隨機值(在這裏我把固定值)。我想使用的foreach從形式窗體:foreach內循環

取值更好地說明它的形式如下:

Number 1 : T1 : ---- 
Number 2 : T2 : ---- and ----- 
So the user enter for example 2, 3, 4 
So 
Number 1 : T1 : 2 
Number 2 : T2 : 3 and 4 

結果我得到的僅僅是3和4的值2永遠不會保存。 我認爲這個問題是因爲循環將重新開始foreach,所以之前輸入的值將被刪除。但我不知道該怎麼做。

這裏是我的代碼:

所有的
<?php 
session_start(); 
?> 
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"> 
<?php 
for ($i = 1; $i <= 2; $i++) { 
    echo "Numero "; 
    echo $i; 
    for ($j = 1; $j <= 3; $j++) { 
     echo $j; 
     echo "<input type='text' name='number3[$j]' id='number3{$j}' />"; 
    } 
} 
?> 
<input type="submit" name="submitbutton" value="Confirm!"> 
</form> 

<?php 
if (isset($_POST['submitbutton'])) { 

    for ($i = 1; $i <= 2; $i++) { 
    echo "Numero "; 
    echo $i; 
    for ($j = 1; $j <= 3; $j++) { 
       echo "Lettre "; 
       echo $j; 
     foreach ($_POST['number3'] as $key => $value) { 
      $_SESSION["number3_{$key}"] = $value; 
      echo 'The value of $_SESSION['."'".$key."'".'] is '."'".$value."'".' <br />'; 
     } 

} 
} 
    } 
?> 

回答

0

首先,我不太明白你要完成什麼,而是你在你的代碼有問題。這是由腳本生成的HTML標記:

<form action="/so.php" method="post"> 
Numero 1 
1<input type='text' name='number3[1]' id='number31' /> 
2<input type='text' name='number3[2]' id='number32' /> 
3<input type='text' name='number3[3]' id='number33' /> 

Numero 2 
1<input type='text' name='number3[1]' id='number31' /> 
2<input type='text' name='number3[2]' id='number32' /> 
3<input type='text' name='number3[3]' id='number33' /> 

<input type="submit" name="submitbutton" value="Confirm!"> 
</form> 

當你看到你的第二組輸入覆蓋舊的,因爲你有相同的名字,如number3[1]

您應該使用多維數組,使你的HTML看起來像

<input type='text' name='number3[1][1]' id='number31' /> 

而在你的腳本迭代部分會像

if (isset($_POST['submitbutton'])) { 
    foreach ($_POST['number3'] as $firstKey => $insideArray) { 
    echo "Numero "; 
    echo $firstKey; 
     foreach ($insideArray as $secondKey => $value) { 
      $sessionKey = $firstKey . '_' . $secondKey; 
      echo "Lettre "; 
      echo $secondKey; 
      $_SESSION[$sessionKey] = $value; 
      echo 'The value of $_SESSION['.$sessionKey.'] is '."'".$value."'".' <br />'; 
     } 
    } 
} 
+0

真的,我沒有看到這一點。是否有可能像name ='number3 [$ i] [$ j]'這樣做,它會一直有所不同? – usertfwr

+0

是的,你可以做到這一點。 –

+0

我現在的問題是輸出只有「陣列」。沒有號碼 – usertfwr

0

據我所知,PHP允許您張貼多維變量。你的代碼會看起來像這樣(我沒有嘗試過 - 所以它只是「一個片段)。

代形式(通常是動態)的:

$numbers=2; 
//note: $numbers is normally random (here 2 number records are generated) 
for ($i = 1; $i <= $numbers; $i++) { 
    echo "Number "+ $i + " <br/>"; 

    $fields=3; 
    //note: $fields is normally random (here three fields per number are generated) 
    for ($j = 1; $j <= $fields; $j++) { 
     //this names the field by number[number_counter][field_counter] 
     echo "<input type='text' label="+ $j +" name='number["+ $i +"]["+ $j +"]' />"; 
    } 
} 

提取的發佈表單變量:

if (isset($_POST['submitbutton'])) { 

    $current_number=1; 
    foreach ($_POST['number'] as $number) 
    { 
     echo "Number " + $current_number +":<br/>"; 
     $field_counter = 1; 
     foreach ($number as $field) 
     { 
      echo " The value of field #"+ $field_counter +"is " 
       + $number[$field_counter] +".<br/>"; 
     } 
    } 

} 
+0

Btw。有一個[看](http://php.net/manual/en/tutorial.forms.php)像'htmlspecialchars()''來提高腳本的安全性;-) – Jost