我有一个HTML表单,它使用jQuery serialize方法和ajax将结果使用PHP发布到sqlite数据库中。我已经将jQuery设置为每分钟运行一次以充当自动保存功能,以便用户可以稍后返回以完成他们开始的操作。由于自动保存,我不能强制要求所有输入。
99%的时间都有效。但是,在少数情况下,即使输入字段中有数据,应用程序有时也会将空白数据发布到数据库。我已检查以确保所有HTML输入字段都具有名称属性。任何想法为什么它在大多数时间工作,但在一些随机的情况下,它没有?
我希望我能够更多地报告为什么它不能一直无效。我自己无法复制错误,我只是在报告用户。但我知道表单是将空白发布到数据库中,因为当我进入数据库时,它会显示“”而不是“ null ”。所以我知道数据库正在接收某些内容,但它没有收到用户输入的数据。
HTML
<form action="" method="post" id="evaluationForm">
<!-- this input is disabled since this user can't edit it -->
<label for="FirstName">First Name</label>
<input type="text" name="FirstName" value="<?php echo htmlspecialchars($data['FirstName']);?>" disabled >
<label for="WorkHabitsCommentsSuper">Comments </label><br>
<textarea name="WorkHabitsCommentsSuper" placeholder="Comments are optional">
<?php echo htmlspecialchars($data['WorkHabitsCommentsSuper']);?>
</textarea>
<label for="GoalsSuper">More Comments</label>
<textarea name="GoalsSuper" required>
<?php echo htmlspecialchars($data['GoalsSuper']);?>
</textarea>
<!-- and a whole bunch more fields but you get the idea -->
</form>
的JavaScript
function saveEval() {
var datastring = $("form").serialize();
$.ajax({
type: "POST",
url: "autosave-s.php",
data: datastring,
success: function(text) {
if (text == "success") {
alert('It saved. Hooray!');
} else {
alert('Oh no. Something went wrong.');
}
}
});
}
window.onload = function() {
setInterval("saveEval()", 60000)
}
PHP
$db = new PDO('sqlite:evals.sqlite');
$sql = "UPDATE table SET
WorkHabitsCommentsSuper = :WorkHabitsCommentsSuper,
GoalsSuper = :GoalsSuper";
$query = $db->prepare($sql);
$query->execute(array(
':WorkHabitsCommentsSuper' => $_POST['WorkHabitsCommentsSuper'],
':GoalsSuper' => $_POST['GoalsSuper']
));
echo "success";
答案 0 :(得分:0)
if(!in_array("",$_POST)){
$db = new PDO('sqlite:evals.sqlite');
$sql = "UPDATE table SET
WorkHabitsCommentsSuper = :WorkHabitsCommentsSuper,
GoalsSuper = :GoalsSuper";
$query = $db->prepare($sql);
$query->execute(array(
':WorkHabitsCommentsSuper' => $_POST['WorkHabitsCommentsSuper'],
':GoalsSuper' => $_POST['GoalsSuper']
));
echo "success";
}else{
echo "Empty";
}
这将检查发布数据是否为空,如果空的任何字段不会更新,并将发送“空”响应,以便在空数据发布时发出警报。