2011-10-30 28 views
2

私はAJAXでデータを投稿し、それをデータベーステーブルに挿入しようとしています。 問題は、データの半分が欠落していて、その理由がわかりません。私はどこかのタイプミス(いくつかの文字が欠けていたが、私はそれを修正した)のように見えたので、パラメータの名前などをすべてチェックしたが、それでもうまくいかない。 console.log()とアラートでも投稿したい完全なデータが得られますが、到着することはありません。PHPは空のパラメータを出力します。 JavaScriptを無効にするか、「return false;」を削除するとPHPスクリプトは期待どおりに開き、正常に動作し、データは失われません(期待通り)。jQuery AJAX投稿データが失われる

多分私はちょうど1つの単一の文字をどこかで失っています... 私はまた、エスケープ(エスケープ())文字列を試みたが、それは何も変更されませんでした。

ここでは、これは何のコードといくつかのログ/アラート/エコー

$("#itemspeichern").click(function(){ 
     setVisible("#item-process"); 

     var itemname = escape($("#itemname").val()); 
     if ($("#itemneu").is(":checked")) { 
      var itemneu = $("#itemneu").val(); 
     } else { 
      var itemneu = 0; 
     } 
     var itembild = escape($("#itembild").val()); 
     var itemkurzb = escape($("#itemkurzb").val()); 
     var theset = escape($("#theset").val()); 

     console.log("itemname=" + itemname + "&itemneu=" + itemneu + "&itembild=" + itembild + "&itemkurzb=" + itemkurzb + "&theset=" + theset); 

     $.ajax({ 
      url: "<?php actualPath(); ?>save-admin-action.php", 
      type: "POST", 
      data: "itemname=" + itemname + "&itemneu=" + itemneu + "&itembild" + itembild + "&itemkurzb" + itemkurzb + "&theset=" + theset, 
      success: function(result){ 
       alert("itemname=" + itemname + "&itemneu=" + itemneu + "&itembild=" + itembild + "&itemkurzb=" + itemkurzb + "&theset=" + theset); 
       document.getElementById("item-process").innerHTML = result; 
      } 
     }); 

     return false; 
    }); 

だです: - コンソール 上の出力すべてのフィールドのデータを - 警告 内のすべてのデータを示すが、それこれを保存すると、データベースにitembildとitemkurzbの値がありません。クエリをphpファイルからの応答として取得すると、実際にはこれらのフィールドでパラメータが空であることがわかりました。

$ergebnis = mysql_query("INSERT INTO mk7_items(id, de, neu, kurzbeschreibung, bild) VALUES(DEFAULT, '".$_POST["itemname"]."', ".$_POST["itemneu"].", '".$_POST["itemkurzb"]."', '".$_POST["itembild"]."')"); 

私は応答を取得するときに最後の2つのフィールドが空であると何がDBに保存されます。ここで私はPHPでやったことだ(P Iは、SQLインジェクションやものについてはコメントしないでください、それを少し短く) 。 私が言ったように、JSをOFFに設定し、PHP上で実行するだけで、うまく動作します。

アイデア?私がそこでやったどんなばかげた間違い?

data: "itemname=" + itemname + "&itemneu=" + itemneu + "&itembild=" + itembild + "&itemkurzb=" + itemkurzb + "&theset=" + theset, 

以上、escapeの使用を停止(非ASCIIデータを処理していないため、escapeに賛成かencodeURIComponentで廃止されている:あなたは、あなたのdataで夫婦=を逃している

+0

ですが、一部の改行がありません。申し訳ありません。 – user1021052

答えて

4

、それはこのする必要があります非常によく)とあなたのdataパラメータにオブジェクトを使用します。

var itemname = $("#itemname").val(); 
//... 

$.ajax({ 
    url: "<?php actualPath(); ?>save-admin-action.php", 
    type: "POST", 
    data: { 
     itemname: itemname, 
     itemneu: itemneu, 
     itembild: itembild, 
     itemkurzb: itemkurzb, 
     theset: theset 
    }, 
    //... 
}); 

$.ajaxは、変換の世話をするその方法をごデータを適切なPOST(またはGETまたは...)形式に変換し、詳細について心配する必要はありません。

+0

おかしい。私は欠落した "="にも気付き、私はそれを変更したと思った。しかし、私はログのためだけにしたようです...追加のヒントのおかげで、私は心に留めておきます – user1021052

+0

@ User1021052: 'data'のオブジェクトリテラルバージョンを使用するための良い引数のように聞こえます:) –

1

あなたの自作クエリ文字列の代わりにあなたの$.ajaxコールでこれを試してみてください。

data: { 
    itemname: itemname, 
    itemneu: itemneu, 
    itembild: itembild, 
    itemkurzb: itemkurzb, 
    theset: theset 
} 

をオブジェクトとしてデータを渡すことによって、jQueryのはあなたのための値をエスケープします:)

編集:

あなたはserializeのような完全な形も可能です:

data: $('#yourform').serialize() 
+0

それを見てください。私はどこかでそれを見て、それを使ってみましたが、構文エラーがありました。ヒントのためにたくさんありがとう – user1021052

0

投稿されたアイテムに特殊文字を使用すると、すべてのvarsの前にこの機能を使用します... サンプル:

var txt = encodeURIComponent(document.getElementById('txt1').value); 
関連する問題