【发布时间】:2021-09-28 18:01:45
【问题描述】:
我试图插入多个具有相同名称的文件,但“echo”返回多个反馈。例如:Success、Success.... 或多个空字段。你能帮忙插入数据并只返回成功或空字段吗?感谢您的帮助!
global $conn;
if (isset($_POST['languages']) && isset($_POST['knowledge'])) {
for ($i = 0; $i <= 10; $i++) {
$id = $_SESSION["id"];
@$languages = $_POST['languages'][$i];
@$knowledge = $_POST['knowledge'][$i];
if (!empty($languages)) {
$sql = $conn->prepare("INSERT INTO languages (userid, languages,kn_level) VALUES (?,?,?)");
$sql->bindParam(1, $id);
$sql->bindParam(2, $languages);
$sql->bindParam(3, $knowledge);
if ($sql->execute()) {
echo "Success";
//header("location:/settings");
}
}else{
echo "Empty Fields";
}
}
}
$(document).on('click', '#langIdButton', function(e) {
var data = $("#langSkills").serializeArray();
$.ajax({
data: data,
type: "post",
url: 'settings/addlanguage',
success: function(data) {
if (data == "Success") {
$('#lang_response').html(data).show()
} else {
$('#lang_response').html(data).show()
}
}
});
});
【问题讨论】:
-
在循环内设置一个标志,并检查循环外的标志来决定回显什么。如果在循环内回显,每次迭代都会得到一个响应。
-
所以您只想知道 all 查询是否成功?如果有些是空的而有些不是呢?然后它应该只插入正确的数据而不是其余的,还是根本不插入任何行?你想要什么反馈?当然,您想确切地知道哪些数据有问题,以及是否有多个错误数据。请具体说明您在每种情况下期望的输出,因为我认为您没有真正考虑过。
-
而不是使用错误抑制
@(总是V.v.Bad)正确地测试是否存在(参见isset()) -
当然,如果您测试了
count($_POST['languages']) == count($_POST['knowledge']),然后使用count($_POST['languages'])而不是任意的10迭代来控制您的循环。大多数问题都会消失。