2014-01-27 43 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>