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

时间:2016-08-30 16:15:13

标签: php ajax forms sqlite serialization

我有一个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";

1 个答案:

答案 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";
}

这将检查发布数据是否为空,如果空的任何字段不会更新,并将发送“空”响应,以便在空数据发布时发出警报。