我有一個HTML表單,它使用jQuery序列化方法和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";
你怎麼知道這些字段中有輸入數據?沒有什麼能夠阻止用戶刪除輸入。 – Barmar
你是對的@Barmar - 我不知道在這些字段中是否有輸入數據。這是一個內部應用程序,我只會從使用該應用程序的員工那裏得到報告。但是我已經看到用戶打印出他們輸入的PDF只是爲了稍後返回,並讓所有數據消失。 – NikB