web-dev-qa-db-ja.com

jQueryでシリアル化されたフォームをPHPで非シリアル化するにはどうすればよいですか?

$('#form').serialize()を使用して、これをPHPページに送信できました。では、PHPでシリアル化を解除するにはどうすればよいですか? jQueryでシリアル化されました。

144
Gene Bean

Jquery serializeメソッドからPHPの何もシリアライズ解除する必要はありません。データをシリアル化する場合、GETメソッドajaxリクエストを使用する場合はクエリパラメーターとしてPHPに送信する必要があり、POST ajaxリクエストを使用する場合は変数を送信する必要があります。そのため、PHPでは、リクエストのタイプに応じて$_POST["varname"]$_GET["varname"]などの値にアクセスします。

serializeメソッドはフォーム要素を取り、それらを文字列形式に置きます。 "varname=val&var2=val2"

65
Chris Gutierrez

サーバーが次のような文字列を受信して​​いる場合(jQuery serialize()を使用している場合)

"param1=someVal&param2=someOtherVal"

...このような何かがおそらくあなたが必要とするすべてです:

$params = array();
parse_str($_GET, $params);

この場合、$paramsは、予想どおりにモデル化された配列でなければなりません。これはHTML配列でも機能することに注意してください。

詳細については、以下を参照してください。 http://www.php.net/manual/en/function.parse-str.php

お役に立てば幸いです。がんばろう!

361

// jQuery Post

var arraydata = $('.selector').serialize();

// jquery.postシリアライズされた変数-TO-PHP配列形式

parse_str($_POST[arraydata], $searcharray);
print_r($searcharray); // Only for print array

//同じものを取得します

 Array (
 [A] => 1
 [B] => 2
 [C] => 3
 [D] => 4
 [E] => 5
 [F] => 6
 [G] => 7
 [H] => 8
 )
45
Aridane
parse_str($_POST['whatever'], $searcharray);
16
danidacar

HTMLページ:

<script>
function insert_tag()
{
    $.ajax({
        url: "aaa.php",
        type: "POST",
        data: {
            ssd: "yes",
            data: $("#form_insert").serialize()
        },
        dataType: "JSON",
        success: function (jsonStr) {
            $("#result1").html(jsonStr['back_message']);
        }
    });
}
</script>

<form id="form_insert">
    <input type="text" name="f1" value="a"/>
    <input type="text" name="f2" value="b"/>
    <input type="text" name="f3" value="c"/>
    <input type="text" name="f4" value="d"/>
    <div onclick="insert_tag();"><b>OK</b></div>
    <div id="result1">...</div>
</form>

PHPページ:

<?php
if(isset($_POST['data']))
{
    parse_str($_POST['data'], $searcharray);
    $data = array(
        "back_message"   => $searcharray['f1']
    );
    echo json_encode($data);
}
?>

このphpコードでは、f1フィールドを返します。

7
mghhgm

変更 ムルタザフセイン 回答:

function unserializeForm($str) {
    $strArray = explode("&", $str);
    foreach($strArray as $item) {
        $array = explode("=", $item);
        $returndata[] = $array;
    }
    return $returndata;
}
4
Tomasz Majerski

なぜ連想配列を使用しないので、簡単に使用できます

function unserializeForm($str) {
    $returndata = array();
    $strArray = explode("&", $str);
    $i = 0;
    foreach ($strArray as $item) {
        $array = explode("=", $item);
        $returndata[$array[0]] = $array[1];
    }

    return $returndata;
}

よろしく

単にこれを行う

        $get = explode('&', $_POST['seri'] ); // explode with and

        foreach ( $get as $key => $value) {
          $need[ substr( $value, 0 , strpos( $value, '=' ) ) ] =  substr( $value, strpos( $value, '=' ) + 1 ) ;
        }
// access your query param name=ddd&email=aaaaa&username=wwwww&password=wwww&password=eeee
     var_dump( $need['name'] );
4
Omid Akhavan

使用しているJqueryのバージョンはわかりませんが、これはjquery 1.3で機能します。

$.ajax({
    type: 'POST', 
    url: your url,
    data: $('#'+form_id).serialize(), 
    success: function(data) {
        $('#debug').html(data);
  }
});

その後、通常のphpで行うようにPOST配列キーにアクセスできます。 print_r()を試してください。

オブジェクトのプロパティでシリアル化されたフォームの値をラップしていると思いますが、これは私が知る限り無用です。

お役に立てれば!

1
sixFingers

これはuser1256561への返信です。あなたのアイデアをありがとう..しかし、私はステップ3で言及されたURLデコードのものの世話をしていません。

シリアル化されたフォームデータをデコードするphpコードは次のとおりです。ところで、あなた自身の裁量でこのコードを使用してください。

function xyz($strfromAjaxPOST)
{
    $array = "";
    $returndata = "";
    $strArray = explode("&", $strfromPOST);
    $i = 0;
    foreach ($strArray as $str)
    {
        $array = explode("=", $str);
        $returndata[$i] = $array[0];
        $i = $i + 1;
        $returndata[$i] = $array[1];
        $i = $i + 1;
    }
    print_r($returndata);
}

URL投稿データの入力は、attribute1 = value1&attribute2 = value2&attribute3 = value3のようになります。

上記のコードの出力は依然として配列内にあり、必要な変数に割り当てられるように変更できます。これは、このデータをさらに使用する方法によって異なります。

Array
(
    [0] => attribute1
    [1] => value1
    [2] => attribute2
    [3] => value2
    [4] => attribute3
    [5] => value3
)
1
jbz

フォームに値属性名が必要です。例:

<form id="login_form">
    <input type="text" name="username" id="a"/>
    <input type="password" name="password" id="b"/>
    <button type="button" onclick="login()">Submit</button>
</form>

Javascript

$(document).ready(function(){});
function login(){
  var obj = $('#login_form').serialize();
  $.post('index.php', obj, function(res){
    alert(res);
  })
}

PHP-index.php

<?php
if(!empty($POST['username']) && !empty($POST['password'])){
  $user = $POST['username'];
  $pass = $POST['password'];
  $res = "Username : ".$user." || Password : ".$pass;
  return $res;
}
?>
1
Lagan Script

フォーム名とその値を分離する必要があると思います。これを行う1つの方法は、(&)を展開してattribute=value,attribute2=valueを取得することです。

ここでの私のポイントは、シリアル化されたjQuery文字列をPHPの配列に変換することです。

より具体的にするために従うべきステップはここにあります。

  1. シリアル化されたjQueryPHPページ(ajax.phpなど)に渡します。ここで、$.ajaxを使用してpostまたはgetを使用して送信します。
  2. PHPページから、(&)を展開して、各属性を分離します。これで、attribute1 = value、attribute2 = valueを取得し、php配列変数を取得します。 e.g$data = array("attribute1=value","attribute2=value")
  3. $dataおよびforeachexplode(=)で実行して、属性と値を分離できるようにし、値をurldecodeにして、シリアル化された値を必要な値に変換し、属性とその値を属性とシリアル化された文字列の値を格納する新しい配列変数。

さらに説明が必要な場合はお知らせください。

0
Jm Dollosa

つかいます:

$( '#form' ).serializeArray();

PHPは配列を取得し、アンシリアライズする必要はありません;)

0
Varga Zoli