表单发送空/空序列化数据


Form sends blank/null serialized data

我有一个HTML表单,它使用jQuery序列化方法和ajax将使用PHP的结果发布到sqlite数据库中。我已经将jQuery设置为每分钟运行一次,作为一个自动保存功能,这样用户就可以稍后返回以完成他们开始的操作。由于自动保存,我不能强制要求所有输入。

它99%的时间都有效。但是,在少数情况下,即使输入字段中有数据,应用程序有时也会将空白数据发布到数据库中。我已检查以确保所有HTML输入字段都具有name属性。你知道为什么它在大多数时候都有效,但在少数随机情况下却无效吗?

我希望我有更多的报告为什么它一直不起作用。我自己还没能复制这个bug,我只是在做用户报告。但我知道表单在数据库中张贴空白,因为当我进入数据库时,它会显示",而不是">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";
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";
}

这将检查过帐数据是否为空(如果为空,则任何字段都不会更新(,并将发送"空"响应,以便对空数据过帐发出警报。