我有一个看起来像这样的表格:
<form method='POST' name='form2' action='./index.php' class='form-horizontal'>
<input type='hidden' name='savedata' value='true'>
<div class='row'>
$numOfCols = 4;
$rowCount = 0;
$bootstrapColWidth = 12 / $numOfCols;
$i=1;
for ($x=1;$x<=8;$x++) {
<div class='col-md-".$bootstrapColWidth ." col-xs-12 margin-bottom-30'>
<strong><p>".$i.". Data</p></strong>
<div class='col-sm-12'>
<div class='form-group' id='form_firstname_".$i."'>
<label for='name'>Firstname:<span class='red'>*</span></label>
<input class='form-control' id='firstname_".$i."' name='firstname_".$i."' type='text'>
</div>
</div>
<div class='col-sm-12'>
<div class='form-group'>
<label for='name'>Lastname:<span class='red'>*</span></label>
<input class='form-control' id='lastname_".$i."' name='lastname_".$i."' type='text'>
</div>
</div>
<div class='col-sm-12'>";
<div class='form-group' id='form_praefix_".$i."'>
<label for='name'>Field A:<span class='red'>*</span></label>
<input class='form-control' id='field_a_".$i."' name='field_a_".$i."' type='text'>
</div>
</div>
<div class='col-sm-12' id='form_postfix_".$i."'>
<div class='form-group'>";
<label for='name'>Field B:<span class='red'>*</span></label>
<input class='form-control' id='field_b_".$i."' name='field_b_".$i."' type='text'>
</div>
</div>
</div>
$rowCount++;
$i++;
if($rowCount % $numOfCols == 0) {
</div> <div class='row'>
}
}
</div>
<input type='submit' id='btn_submit' class='btn btn-primary' value='Save data'>
<form>
如您所见,我有一个for-loop
,它显示相同字段的8倍。用户只能输入一个人还是最多八个人,这取决于用户。
表单将通过以下方式提交:
if ($savedata=="true") {
/* create db connection */
$link = mysqli_connect("localhost", "USER", "PASSWORD", "DATABASE");
// check connection
if($link === false){
$error_db_connection=1;
}
// insert entries into database
for ($run=1;$run<=8;$run++) {
$var_firstname="firstname_".$run;
$var_lastname="lastname_".$run;
$var_field_a="field_a_".$run;
$var_field_b="field_b_".$run;
$sql = "INSERT INTO TABLENAME (firstname, lastname, praefix_title, postfix_title) VALUES ('".$$var_firstname."', '".$$var_lastname."', '".$$var_field_a."', '".$$var_field_b."')";
if(mysqli_query($link, $sql)){
$success=1;
} else{
$error=1;
}
}
// close connection
mysqli_close($link);
}
我再次使用了一个for循环,其中循环的总数现在已经被硬编码(8)。我需要实现的是,硬编码的循环总数是动态的。因此,如果用户填写3倍的字段(名字,姓氏,field_a,field_b),则只应在我的数据库中插入3条记录。如果用户填写所有8个字段,则应在我的数据库中插入8条记录。
现在,即使用户仅填写一个条目,我也总是在数据库中获得8个条目。你能帮我实现我所需要的东西吗?
由于我正在计算name
,因此每个表单字段都有自己独特的id
和$i
。也许我需要发送一个隐藏字段,其中包含已填写的字段总数?如果是这样,我该怎么做?还是其他方法?
答案 0 :(得分:1)
在sql插入语句之前,插入类似
if ( empty( $$var_firstname ) ) {
break;
}
这将检查是否设置了值,如果没有设置,则退出for循环。您可能希望做更多验证检查,例如检查名字,姓氏,a和b,以确保它们都为空。