这是我第一次'从头开始构建'PHP / MySQL项目。我已经构建了一个非常简单的HTML表单,其中多次重复相同的行:
<h2 style="margin-top:0">Current Projects</h2>
Project: <input name="project1" type="text" size="40" value="1" />
Status: <input name="status1" type="text" size="40" value="1" />
Estimated Completion: <input name="estCompletion1" type="text" size="12" value="1" /><br />
Project: <input name="project2" type="text" size="40" value="2" />
Status: <input name="status2" type="text" size="40" value="2" />
Estimated Completion: <input name="estCompletion2" type="text" size="12" value="2" /><br />
Project: <input name="project3" type="text" size="40" value="3" />
Status: <input name="status3" type="text" size="40" value="3" />
Estimated Completion: <input name="estCompletion3" type="text" size="12" value="3" /><br />
我正在尝试将所有这些同时写入同一个数据库表,但是在不同的行上。
$sql = "INSERT INTO current_project (date, est_completion, project_name, status)
VALUES (NOW(), '$estCompletion1', '$project1', '$status1'),
(NOW(), '$estCompletion2', '$project2', '$status2'),
(NOW(), '$estCompletion3', '$project3', '$status3')";
这样做的问题是它从变量中插入数据,即使它是null。因此,如果用户只在第一行字段(project1,status1等)中输入数据,则另外2个插入一个空行。
有没有办法,也许使用'if isset()',以便我的数据库中没有任何空白字段?
答案 0 :(得分:0)
动态构建SQL。
这样的事情:
$inserts = Array();
for($i=1; $i<=3; $i++) {
if (!$_POST["project".$i] && !$_POST["status".$i] && !$_POST["estCompletion".$i]) continue;
$inserts[] = "(NOW(), '".$_POST["estCompletion".$i]."', '".$_POST["project".$i]."', '".$_POST["status".$i]."')";
}
if (Count($inserts)>0) {
$sql = "INSERT INTO current_project (date, est_completion, project_name, status)
VALUES (" . implode("), (", $inserts) . ")";
}
此时,$ sql应该只对那些提交了所有三个字段的行进行完整的SQL查询。
答案 1 :(得分:0)
如果要检查已发布变量的值为null,请始终使用 empty()方法。
有关详情,请访问php.net
for($i=1; $i<=3; $i++) {
$estCompletion= $_POST["estCompletion".$i];
$project= $_POST["project".$i];
$status= $_POST["status".$i];
if (!empty($estCompletion) && !empty($project) && !empty($status))
{
$sql = "INSERT INTO current_project (date, est_completion, project_name, status) VALUES (NOW(), '".$estCompletion."', '".$project."', '".$status."')";
}
unset($estCompletion, $project, $status);
}