2016-08-30 36 views
0

我有一個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"; 
+0

你怎麼知道這些字段中有輸入數據?沒有什麼能夠阻止用戶刪除輸入。 – Barmar

+0

你是對的@Barmar - 我不知道在這些字段中是否有輸入數據。這是一個內部應用程序,我只會從使用該應用程序的員工那裏得到報告。但是我已經看到用戶打印出他們輸入的PDF只是爲了稍後返回,並讓所有數據消失。 – NikB

回答

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

這將檢查是否發佈數據不爲空,如果爲空任何領域它不會更新並將發送'空'respo對於空的數據發佈非常敏感。

+1

感謝@smehsoud這個想法。我想過要做這樣的事情,但那會破壞自動保存功能。我試圖創建一個能夠自動保存每分鐘的應用程序(類似於Google文檔和其他應用程序自動保存的內容),並且需要將數據保存到數據庫(即使存在空白或空白字段)。但是,也許我可以檢查**所有**字段是否爲空,並以其他方式提醒用戶。我會試試看。 – NikB