2016-08-30 6 views
0

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

フィールドのいずれかが、それはないでしょう空の場合はポスティングデータが空でない場合、これはチェックします更新し、 'Empty'レスポを送信しますnseので空のデータの投稿に注意してください。

+1

アイデア@smehsoudをありがとう。私はこのようなことをすることを考えましたが、それは自動保存機能を破るでしょう。私は1分ごとに自動保存するアプリケーションを作成しようとしていました(Google Docsやその他のアプリケーションが自動的に保存する方法に似ています)、空白または空欄があってもデータをデータベースに保存する必要があります。しかし、おそらく、**すべての**フィールドが空であるかどうかを確認し、そうでなければユーザーに警告することができます。私はそれを試してみる。 – NikB

関連する問題