1

重複の可能性:
jquery .serialize() の後に php をどうするか

jQueryを使用して次のフォームをシリアライズし、ajaxを使用してサーバーに送信し、PHPを使用してデシリアライズしています。

デシリアライズすると、次のエラーが表示されます。

Error at offset 0 of 39 bytes

<form  id="Marriage" style="display: none">
  <input type="text" name="city" class="txtt" value="city"/>
  <input type='button' value='Apply' id="msendsend" class="sendaf" name="jobforming"/>
</form>

このフォームを送信するjquery関数は次のとおりです

  $(document).ready(function () {
    $('#msendsend').click(function () {
        var id=getParam('ID');
        $.ajax({
            type:'POST',
            url:"send.php",

            data:{option:'apply',  sr:$("form").serialize()},
            success:function (jd) {
            }
        });
    });
});

これはサーバーコードです:

 if($_REQUEST['option']=='catapply') {
    $sc=$_POST['sr'];
    mysql_query("insert into user_data(uid,data) values('$session->userid','$sc')");
  }

そして、ここで私はシリアル化を解除しています。

 $sql = mysql_query("SELECT * from user_data");
        while ($row = mysql_fetch_array($sql)) {
            $un = unserialize($row['data']);

            $city=$un['city'];
            echo $city;
        }

データベース内のデータは次のように表示されます

to=&select_category=25&msg=&city=laho
4

1 に答える 1

4

jQuery のシリアライズ機能は、PHP のものとは大きく異なります。データベースでわかるように、クエリ文字列を作成します。
この形式は、php でparse_str 関数を使用してデコードできます。アンシリアライズする代わりに使用してください。

ただし、手動で解析する代わりに、フォーム データをクエリ文字列として投稿する方がよい場合があります。

data: $("form").serialize(), 

option=apply 値を伝える隠しフィールドを追加できます。

そうすれば、何もデコードする必要がなく (既に $_POST にある)、すべての値を別の行に挿入できます。将来、さらに多くのデータがあり、それを検索する必要がある場合など、多くの問題を解決できます。

于 2012-10-07T12:03:04.117 に答える