source

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

bestscript 2022. 10. 22. 09:32

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

사용.$('#form').serialize()이것을 PHP 페이지로 전송 할 수 있었습니다.PHP에서 시리얼화 해제하려면 어떻게 해야 하나요?jQuery에서 연재되었습니다.

서버가 이와 같은 문자열을 수신하고 있는 경우(jQuery를 사용하는 경우 이 문자열이 필요합니다).serialize()):

"param1=someVal&param2=someOtherVal"

...필요한 것은 다음과 같습니다.

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

$params그러면 예상대로 어레이를 모델링해야 합니다.이것은 HTML 어레이에서도 동작합니다.

상세한 것에 대하여는, http://www.php.net/manual/en/function.parse-str.php 를 참조해 주세요.

jquery에서 PHP의 어떤 것도 직렬화 해제할 필요가 없습니다.serialize방법.데이터를 시리얼화할 경우 GET 메서드 ajax 요청을 사용하는 경우 쿼리 파라미터로 PHP에 전송해야 하며 POST ajax 요청을 사용하는 경우 post vars로 전송해야 합니다.따라서 PHP에서는 다음과 같은 값에 액세스할 수 있습니다.$_POST["varname"]또는$_GET["varname"]요청 유형에 따라 달라집니다.

serializemethod는 폼 요소를 문자열 형식으로 지정합니다. "varname=val&var2=val2"

// jQuery Post

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

// jquery.post serialized 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
 )
parse_str($_POST['whatever'], $searcharray);

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들판.

이렇게 하면 됩니다.

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

쉽게 사용할 수 있도록 어소시에이티브 어레이를 사용하는 것은 어떨까요?

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

    return $returndata;
}

안부 전해요

수정된 Murtaza Hussain 답변:

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

용도:

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

Php는 어레이를 가져옵니다.시리얼라이즈를 해제할 필요가 없습니다).

어떤 버전의 Jquery를 사용하고 있는지 모르겠지만, jquery 1.3에서는 이것이 유효합니다.

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

그러면 보통 php에서처럼 POST 어레이 키에 액세스할 수 있습니다.사용해보시면 됩니다.print_r().

내가 아는 한, 당신은 물건의 속성에 연속된 폼 값을 포장하고 있는 것 같습니다.

이게 도움이 됐으면 좋겠네요!

이것은 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&value2=value2&value3=value3 등입니다.

위의 코드의 출력은 어레이 내에 남아 있으며 원하는 변수에 할당되도록 수정할 수 있습니다.또한 이 데이터를 어떻게 사용하는지에 따라 달라집니다.

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

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

형태

<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;
}
?>

해야 할 것, 중 는 터트리는 입니다.(&)당신이 얻을 수 있도록attribute=value,attribute2=value

여기서 요점은 시리얼화된jQuery 문자열을 PHP 어레이로 변환하는 것입니다.

다음은 좀 더 구체적으로 하기 위해 따라야 할 단계입니다.

  1. 「 」를 했습니다.jQuery a까지PHP페이지(예:ajax.php를 합니다.$.ajax우편으로 제출하거나 얻습니다.
  2. php를 합니다.(&)따라서 각 속성을 분리합니다.attribute1 = value, attribute2 = value php얻얻 php php 、 수를를얻 e얻 e e 수 、 예예예 e e e e e e e e e e e e 1gggg gg$data = array("attribute1=value","attribute2=value")
  3. 해요.foreach$data ★★★★★★★★★★★★★★★★★」explode(=)하여 Atribute로 해 .urldecodeserialized string serial 、 Attribute 、 Attribute 、 Attribute 、 Attribute 、 Attribute 、 Attribute 、 Attribute 、 Attribute 、 Attribute 、 Attribute izedizedizedizedizedizedizedizedized 。

더 자세한 설명이 필요하시면 말씀하세요.

다음 기능을 사용할 수 있습니다.

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

나도 더 나은 기능을 가지고 있다.왜냐하면 인코딩된 문자열에 'name="display_name[]"와 같은 입력에서 가져온 배열 값이 포함되어 있으면 위의 함수는 작동하지 않기 때문입니다.

이 유형의 데이터 직렬화를 해제하려면 다음 함수를 사용하십시오.

function unserializeForm($str) {
$returndata = array();
$strArray = explode("&", $str);
$i = 0;
foreach ($strArray as $item) {
    $array = explode("=", $item);
    
    if (preg_match('/(%5B%5D)/', $array[0])) {
          $array[0] = str_replace('%5B%5D','',$array[0]);
          if(array_key_exists($array[0],$returndata)){
                  $returndata[$array[0]][]=$array[1];
          }else{
              $returndata[$array[0]] =array();
              $returndata[$array[0]][]=$array[1];
          }
    }else
    {
        $returndata[$array[0]] = $array[1];
    }   
}
return $returndata;
}

이것을 JS 파트에서 사용하면, PHP내에서 올바르게 취득할 수 있습니다.
을 곤경에 빠뜨릴 수 있습니다.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.

// this = the form  
const arr = $(this).serializeArray();
const data = arr.reduce((acc, {name, value}) => ({...acc, [name]: value}),{}); 

키/그그그그그그에 출하될 때 됩니다.
you PHP for ajax »

언급URL : https://stackoverflow.com/questions/1792603/how-do-i-php-unserialize-a-jquery-serialized-form