[英]PHP: Adding dynamic rows with multiple fields including checkboxes and submitting
我之前問過這個,也許這次我更清楚了。 我在input.php中有此表格
該表的代碼是
<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小時
B 24小時M添加了2行對於這種情況,選中了第一行中的第一個復選框(M)。 第二秒沒有檢查,無論如何結果都是M. 我想如何在每一行中獲取所有正確的值,無論是否選中?
謝謝。
編輯:您正在使用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來生成單獨的輸入名稱,但這並不太麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.