2014-01-27 56 views
-2

如果我提交表單,如果選擇框位於while循環內,如何將值傳遞給process.php頁面。有沒有解決辦法或選擇?來自while循環的數據

<form role="form" method="post" action="process.php" > 
<?php 
    $endDate = '2014-01-28'; 
    $startDate = '2014-01-27'; 

    $daydiff = floor((strtotime($endDate) - strtotime($startDate))/86400); 

    $x=0; 
    while($x<=$daydiff) 
    { 
     ?> 
      <div class="form-group"> 
       <label for="day_name">Day Name</label> 
       <select class="form-control" name="day_name"> 
        <option value="monday">Monday</option> 
        <option value="tuesday">Tuesday</option> 
        <option value="wednesday">Wednesday</option> 
        <option value="thursday">Thursday</option> 
       </select> 
      </div> 
      <div class="form-group"> 
       <label for="time">time</label> 
       <select class="form-control" name="time"> 
        <option value="10am">10am</option> 
        <option value="11am">11am</option> 
        <option value="12pm">12pm</option> 
        <option value="1pm">1pm</option> 
       </select> 
      </div> 
     <?php 
     $x++; 
    } 
?> 
<button type="submit" name="submit">Submit</button> 
</form> 
+1

$ _ POST [ 'DAY_NAME'],$ _ POST [ '時間'] –

+0

您的問題沒有clear.first所有的我看不到$ _ POST [ 'DAY_NAME']和$ _ POST [ '時間']隨地在你的code.present所需的代碼。 –

+0

你的問題不清楚?你想要什麼...如果你提交表格,那麼只有你可以得到$ _POST,你需要有表格標籤 –

回答

0

首先通過在選擇框名稱的末尾添加數字來更改HTML代碼。 然後添加新的隱藏變量以保持選擇框的計數。

$endDate = $_POST['enddate']; 
$startDate = $_POST['startdate']; 

$daydiff = floor((strtotime($endDate) - strtotime($startDate))/86400); 

$x = 0; 
while ($x <= $daydiff) { 
    ?> 
    <select class="form-control" name="day_<?php echo $x; ?>"> 
     <option value="monday">Monday</option> 
     <option value="tuesday">Tuesday</option> 
     <option value="wednesday">Wednesday</option> 
     <option value="thursday">Thursday</option> 
    </select> 
    <select class="form-control" name="time_<?php echo $x; ?>"> 
     <option value="10am">10am</option> 
     <option value="11am">11am</option> 
     <option value="12pm">12pm</option> 
     <option value="1pm">1pm</option> 
    </select> 
    <?php 
    $x++; 
} 
?> 
<input type="hidden" name="count" value="<?php echo $x ?>"/> 

在您的表單中使用此代碼提交以獲取所需的數據。

for ($i = 0; $i < $_POST['count']; $i++) { 
    $day_var = 'day_' . $i; 
    $days_list[] = $_POST[$day_var]; 

    $time_var = 'time_' . $i; 
    $time_list[] = $_POST[$time_var]; 
} 

print_r($days_list); 
print_r($time_list); 
+0

我嘗試你的代碼和它的工作,但是。它只爲每個數組存儲1個值。 – canyon

+0

@canyon請你再檢查一次。我已更改提交數據收集代碼。這個對我有用。這是我用來測試代碼的示例數據數組。 $ _POST =陣列( 'day_0'=> 0, 'day_1'=> 1, 'day_2'=> 2, 'TIME_0'=> 0, 'TIME_1'=> 1, 'time_2'= > 2, 'count'=> 3 ); – Duli

0

你沒有得到的值,因爲在while循環創建的所有<select>盒具有相同的名稱。請更改這些選擇框的名稱。嘗試下面的代碼來渲染<select>框:

<?php 
    $endDate = $_POST['enddate']; 
    $startDate = $_POST['startdate']; 

    $daydiff = floor((strtotime($endDate) - strtotime($startDate))/86400); 

    $x=0; 
    while($x<=$daydiff) 
    {?> 
     <select class="form-control" name="day_name_<?php echo $x;?>"> 
     <option value="monday">Monday</option> 
     <option value="tuesday">Tuesday</option> 
     <option value="wednesday">Wednesday</option> 
     <option value="thursday">Thursday</option> 
     </select> 
     <select class="form-control" name="time_<?php echo $x;?>"> 
     <option value="10am">10am</option> 
     <option value="11am">11am</option> 
     <option value="12pm">12pm</option> 
     <option value="1pm">1pm</option> 
     </select> 
     <?php        
     $x++; 
    }?> 

現在,還可通過保留$daydiff變量值檢索while循環這些值;

0
$selectOption = $_POST['day_name']; 

<select class="form-control" name="day_name"> 
     <option value="monday">Monday</option> 
     <option value="tuesday">Tuesday</option> 
     <option value="wednesday">Wednesday</option> 
     <option value="thursday">Thursday</option> 
</select>