我需要一些帮助。我有以下代码。我希望当所有字段都没有完成时,不要在数据库中引入空字段。只需上传完成后的内容即可。
for($i = 0; $i <count($_POST)+3; $i++){
mysql_query("INSERT INTO `predare`(`id_factura`,`id_student`, `id_produs`, `cantitate`)
VALUES('".$_POST['id_factura'][$i]."','".$_POST['id_student'][$i]."', '".$_POST['id_produs'][$i]."', '".$_POST['cantitate'][$i]."');");
}
<input class="input-1" name="cantitate[]" id="cantitate" value="">
<input class="input-1" name="id_factura[]" id="id_factura" value="">
<input class="input-1" name="id_student[]" id="id_student" value="">
<input class="input-1" name="id_produs[]" id="id_produs" value="">
答案 0 :(得分:1)
以下是我建议的方式。首先初始化您的SQL字符串和分隔符(用于通过一个查询插入多个记录。)
$sql = "INSERT INTO `predare` (`id_factura`,`id_student`, `id_produs`, `cantitate`) VALUES ";
$separator = '';
然后循环提交的行,如果行包含所有四个值,则追加到SQL字符串。
for ($i = 0; $i < count($_POST['cantitate']); $i++) {
$values = array();
foreach (array('id_factura', 'id_student', 'id_produs', 'cantitate') as $column) {
// only add values to the $values array if something has been entered
// (empty fields will be present as '', which evaluates to false)
if ($_POST[$column][$i]) $values[] = $_POST[$column][$i];
}
if (count($values) == 4) { // only add the values to the SQL if all fields are present
$sql .= "$separator ('" . implode("','", $values) . "')";
$separator = ',';
}
}
然后您可以执行SQL语句一次插入所有完整记录。
如果要包含不完整(但不是空)的行,可以使用
if ($values) {...
代替if (count($values) == 4) {...
以这种方式设置它的一个好处是,可以更容易地将代码转换为使用带有预处理语句的更好的数据库扩展(例如PDO),而不是像这样将值连接到SQL中。
答案 1 :(得分:0)
你需要浏览$ _POST [&#39; id_factura&#39;]数组,你需要检查插入语句之前的值,如下所示:
for($i = 0; $i <count($_POST['id_factura']); $i++){
if(isset($_POST['id_factura'][$i]) && isset($_POST['id_student'][$i]) && isset($_POST['id_produs'][$i]) && isset($_POST['cantitate'][$i])){
mysql_query("INSERT INTO `predare`(`id_factura`,`id_student`, `id_produs`, `cantitate`)
VALUES('".$_POST['id_factura'][$i]."','".$_POST['id_student'][$i]."', '".$_POST['id_produs'][$i]."', '".$_POST['cantitate'][$i]."');");
}
}
或者您可以检查整数值是否大于0 ...