jQuery 직렬화 양식을 PHP 직렬화 해제하려면 어떻게해야합니까?


160

를 사용하여 $('#form').serialize()이것을 PHP 페이지로 보낼 수있었습니다. 이제 PHP에서 어떻게 직렬화를 해제합니까? jQuery에서 직렬화되었습니다.


2
이와 같은 질문에 대해서는 Firebug를 사용하여 어떤 형식의 데이터가 서버로 전송되는지 확인하는 것이 좋습니다. 그런 다음 데이터 예제를 쉽게 게시 할 수 있습니다.
chiborg

답변:


65

jquery serialize메소드 에서 PHP의 직렬화를 해제 할 필요는 없습니다 . 데이터를 직렬화하는 경우 GET 메소드 ajax 요청을 사용하는 경우 데이터를 PHP에 쿼리 매개 변수로 보내거나 POST ajax 요청을 사용하는 경우 var를 게시해야합니다. 따라서 PHP에서는 요청 유형에 따라 $_POST["varname"]또는 $_GET["varname"]요청 유형에 따라 값에 액세스합니다 .

serialize메소드는 양식 요소를 가져 와서 문자열 양식으로 넣습니다."varname=val&var2=val2"


3
이것은 올바르지 않습니다. 실제로 serialize반환 하는 문자열을 구문 분석해야 합니다. 아래에서 가장 인기있는 답변을 참조하십시오.
Isaac Lubow

393

서버가 다음과 같은 문자열을 수신하고 있다면 (jQuery를 사용하는 경우 serialize())

"param1=someVal&param2=someOtherVal"

... 이것은 아마도 당신이 필요로하는 것입니다 :

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

$params그런 다음 예상대로 모델링 된 배열이어야합니다. 이것은 HTML 배열에서도 작동합니다.

자세한 내용은 다음을 참조하십시오. http://www.php.net/manual/en/function.parse-str.php

도움이 되길 바랍니다. 행운을 빕니다!


5
그것이 최선의 방법입니다. parse_str ($ _ REQUEST [ 'jquery_serialized_values'], $ 출력); print_r ($ 출력);
Andy

2
이 방법은 다른 방법보다 훨씬 좋습니다.
dartacus

3
수락 된 답변을 제공 한 사용자로서이 답변이 정답이라는 데 동의합니다. 나는 요청이 jQuery ajax $ .get / post 메소드를 통해 전송되었다는 가정에 근거하여 대답했다. 따라서 문자열 구문 분석이 필요하지 않습니다. 예 : $ .get ( 'ajax.php', $ ( 'form'). serialize (), function () {});
Chris Gutierrez

1
이것은 하나의 유일한 대답입니다! 대답의 나머지 부분은
과장된

1
이것이 답이되어야합니다. 서버가 1000 개 이상의 입력 값을 허용하지 않을 수 있으므로 어쨌든 보낼 방법이 필요했습니다. 그래서 양식을 직렬화하고 데이터를 하나의 값으로 보냈습니다. 이 답변으로 나는 그렇게 할 수있었습니다. 감사합니다 @ chrisallenlane
websupporter

51

// jQuery Post

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

// jquery.post 직렬화 된 var-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
 )

바로 내가 찾던 것이 었습니다!
Jepser Bernardino


10

에서 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필드를 반환하십시오 .


5

연관 배열을 사용하지 않는 이유는 무엇입니까?

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

    return $returndata;
}

문안 인사


4
나는 당신을 얻지 못합니다$i = 0;
Thielicious

5

수정 된 Murtaza Hussain 답변 :

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

5

간단히 이렇게

$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']);

1

사용중인 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

이것은 user1256561에 대한 답장입니다. 귀하의 아이디어에 감사드립니다.

여기 누군가 직렬화 된 양식 데이터를 해독하는 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

양식의 값 속성 이름 만 있으면됩니다. 예 :

형태

<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>

자바 스크립트

$(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

사용하다:

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

PHP는 배열을 가져옵니다. 직렬화하지 않아도됩니다.)


0

양식 이름과 값을 분리해야한다고 생각합니다.이를 수행하는 한 가지 방법은 폭발 (&)하여 얻을 수 attribute=value,attribute2=value있습니다.

여기서 요점은 직렬화 된 jQuery 문자열을 PHP의 배열로 변환한다는 것입니다.

보다 구체적으로 수행해야 할 단계는 다음과 같습니다.

  1. 게시 또는 가져 오기 를 사용 하여 제출하는 데 사용 jQuery되는 PHP페이지 (예 : 페이지 ajax.php)로 직렬화 됩니다 $.ajax.
  2. PHP 페이지에서 (&)각 속성을 분리하여 분해하십시오 . 이제 attribute1 = value, attribute2 = value를 얻습니다. 이제 PHP 배열 변수를 얻게됩니다. 예 :$data = array("attribute1=value","attribute2=value")
  3. 를 수행 foreach$data와 그래서 당신은 값과 속성을 분리 할 수있는, 그리고해야 당신이 필요로하는 값으로 직렬화 값을 변환하고, 속성과 새로운 배열 변수에 값을 삽입 할만큼 가치있는 직렬화 된 문자열의 속성 및 값을 저장합니다.explode(=)urldecode

더 자세한 설명이 필요하면 알려주십시오.


0

이 기능을 사용할 수 있습니다 :

function post_unserialize( $key ){
  $post_data = array();
  $post_data = $_POST[ $key ];
  unset($_POST[ $key ]);
  parse_str($post_data, $post_data);
  $_POST = array_merge($_POST, $post_data);
}

사용 방법

$_POST['serialized_data'] = 'var1=1&var2=2&var3=3';
post_unserialize( 'serialized_data' );
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.