jQueryシリアル化メソッドとajaxを使用してPHPを使用して結果をsqliteデータベースにポストするHTMLフォームがあります。私は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";
フィールドに入力データがあることをどのように知っていますか?ユーザーが入力を削除するのを止めるものは何もありません。 – Barmar
あなたは正しい@Barmarです - フィールドに入力データがあるかどうかわかりません。これは社内のアプリケーションであり、私はそのアプリケーションを使用する従業員からのレポートのみを処理しています。しかし、私は、ユーザーが入力した内容のPDFを印刷して、後で戻ってすべてのデータが消えるのを見ました。 – NikB