PHP:添加包含多个字段的动态行,包括复选框和提交

时间:2017-04-16 08:53:06

标签: php html

我之前问过这个问题,也许这次我更清楚了。我在input.php中有这个表单

enter image description here

此表的代码是

<div class="col-md-5 sec-col02">
                        <div class="panel panel-primary">
                            <div class="panel-heading">
                                <h3 class="panel-title">Medicine Record</h3>
                            </div>
                            <div class="">
                                <form name="add_name" id="add_name">  
                                    <div class="table-responsive">  
                                        <table style="margin-left:4px; margin-top:4px;" class="table table-bordered" id="dynamic_field">  <tr id="medicen">  
                                                <td>Medicine Name</td> 
                                                <td>Hours</td>
                                                <td>M</td>
                                                <td>E</td>
                                                <td>N</td>
                                                <td>No Of Days</td> 
                                                <td>Add</td>  
                                            </tr>
                                            <tr>  
                                                <td><input style="width:95px; " type="text" name="medname[]" placeholder="Medicine Name" class="form-control name_list" /></td> 
                                                <td><select style="width:70px;" name="frequency[]" class="form-control name_list">
                                                <option value="24hours"> 24Hrs</option>
                                                <option value="8hrs"> 8Hrs</option>
                                                <option value = "12hrs">12Hrs</option></select></td>
                                                <td><input style="width:15px; " name="morning1" type ="checkbox" value="M" class = "form-control name_list"/></td>
                                                <td><input style="width:15px;" name="evening1" type ="checkbox" value="E" class = "form-control name_list"/></td>
                                                <td><input style="width:15px;" name="night1" value="N" type ="checkbox" class = "form-control name_list"/></td>
                                                <td><input style="width:80px;" type="text" name="days[]" placeholder="No Of Days" class="form-control name_list"/></td>
                                                <td><button style="width:13dx;" type="button" name="add" id="add" class="btn btn-success">Add</button></td>  
                                            </tr>  
                                        </table>  
                                    </div>  
                                </form>  
                            </div>
                        </div>  

我正在添加这样的新行:

$(document).ready(function(){  
           var i=1;  
           $('#add').click(function(){  
              i++;  
              $('#dynamic_field').append('<tr id="row'+i+'"><td><input style="width:95px; " type="text" name="medname[]" placeholder="Medicine Name" class="form-control name_list" /></td><td><select style="width:70px;" name="frequency[]" class="form-control name_list"><option value="24hours"> 24Hrs</option><option value="8hrs"> 8Hrs</option><option value = "12hrs">12Hrs</option></select></td><td><input style="width:15px; " name="morning'+i+'" type ="checkbox" value="M" class = "form-control name_list"/></td><td><input style="width:15px;" name="evening'+i+'" type ="checkbox" value="E" class = "form-control name_list"/></td><td><input style="width:15px;"name="night'+i+'" value="N" type ="checkbox" class = "form-control name_list"/></td><td><input style="width:80px;"type="text" name="days[]" placeholder="No Of Days" class="form-control name_list"/></td><td><button style="width:50px;"type="button" name="remove" id="'+i+'" class="btn btn-danger btn_remove">X</button></td></tr>'); 

           });  

用户添加输入,可以勾选复选框,然后单击“提交”。可以有任意数量的行。 我已添加此行$('input[type=checkbox]').removeAttr('checked');以确保未选中复选框。

在getdata.php中,当我尝试这段代码时

for($i = 0; $i < count($_POST['medname']); $i++){
    $medName = mysqli_real_escape_string($con, $_POST['medname'][$i]);
    $medFreq = mysqli_real_escape_string($con, $_POST['frequency'][$i]);
    $medMorning = '';
    if(isset($_POST['morning'.$i])){
        $medMorning = $_POST['morning'.$i];
    }
    print_r($medName);
    echo '<br/>'; 
    print_r($medFreq);
    echo '<br/>';
    print_r($medMorning);
    echo '<br/>';


}
echo $i." rows added";

正确打印出所有名称和相关频率。但是当我尝试获取复选框相关数据时,结果是:

一个 8小时

乙 24小时 中号 添加了2行 对于此实例,在第一行第一个复选框(M)被选中。在第二个它没有检查.Result在任何情况下给M。 我怎么想在每行中获得所有正确的值,无论是否检查过?

谢谢。

1 个答案:

答案 0 :(得分:2)

修改 您正在使用name[]表示法来获取$POST中填充表单值的数组。如果您只有文本输入,这将有效。但是,对于复选框,如果不选中该复选框,则会出现没有添加任何值的问题。

对于您的用例,更好的解决方案是为每个添加的行定义单独的输入名称:

<td><input name="morning-0" type ="checkbox" value="M" /></td>
...
<td><input name="morning-1" type ="checkbox" value="M" /></td>
...
<td><input name="morning-2" type ="checkbox" value="M" /></td>

然后在PHP中动态读取值:

$medMorning = '';
if(isset($_POST['morning-' . $i])){
    $medMorning = $_POST['morning-' . $i];
}

我认为你需要一些添加的JavaScript来生成单独的输入名称,但这并不是太麻烦。