Jak PHP-unserialize formularz jQuery-serialized?

Za pomocą $('#form').serialize() udało mi się wysłać to na stronę PHP. Jak to odkrecic w PHP? To było serializowane w jQuery.

Author: Aurelio De Rosa, 2009-11-24

12 answers

Nie trzeba niczego odserializować w PHP z metody jquery serialize. Jeśli serializujesz dane, powinny one zostać wysłane do PHP jako parametry zapytania, jeśli używasz metody GET ajax request lub post vars, jeśli używasz żądania POST ajax request. Tak więc w PHP, można uzyskać dostęp do wartości takich jak $_POST["varname"] lub $_GET["varname"] w zależności od typu żądania.

Metoda serialize pobiera tylko elementy formularza i umieszcza je w postaci ciągu znaków. "varname=val&var2=val2"

 60
Author: Chris Gutierrez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-27 09:08:44

Pod warunkiem, że twój serwer otrzymuje ciąg znaków, który wygląda mniej więcej tak (co powinno być, jeśli używasz jQuery serialize()):

"param1=someVal&param2=someOtherVal"

...coś takiego chyba wystarczy:

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

$params powinna to być tablica modelowana tak, jak można się spodziewać. Uwaga działa to również z tablicami HTML.

Zobacz poniżej, aby uzyskać więcej informacji: http://www.php.net/manual/en/function.parse-str.php

Mam nadzieję, że to pomoże. Powodzenia!
 331
Author: Chris Allen Lane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-23 17:25:26

// jQuery Post

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

/ / jquery.post serialized var-to-PHP Array format

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

/ / dostajesz to samo

 Array (
 [A] => 1
 [B] => 2
 [C] => 3
 [D] => 4
 [E] => 5
 [F] => 6
 [G] => 7
 [H] => 8
 )
 40
Author: Aridane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-01 14:27:14
parse_str($_POST['whatever'], $searcharray);
 15
Author: danidacar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-18 13:36:57

W HTML Strona:

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

On PHP page:

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

W tym kodzie php zwróć pole f1.

 7
Author: mghhgm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-17 10:20:36

Dlaczego nie używać tablicy asocjacyjnej, więc można jej łatwo używać

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

    return $returndata;
}

Pozdrawiam

 4
Author: Murtaza Khursheed Hussain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-02 08:16:37

Modified Murtaza Hussain odpowiedź:

function unserializeForm($str) {
    $strArray = explode("&", $str);
    foreach($strArray as $item) {
        $array = explode("=", $item);
        $returndata[] = $array;
    }
    return $returndata;
}
 4
Author: Tomasz Majerski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:29

Po prostu zrób to

        $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
Author: Omid Akhavan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-31 12:50:06

Nie wiem jakiej wersji Jquery używasz, ale działa to u mnie w jquery 1.3:

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

Wtedy możesz uzyskać dostęp do kluczy tablic POST, tak jak normalnie w php. Po prostu spróbuj print_r().

Myślę, że owijasz serializowaną wartość formularza we właściwość obiektu, która jest bezużyteczna, o ile wiem.

Mam nadzieję, że to pomoże!
 1
Author: sixFingers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-11 10:23:30

To jest odpowiedź na user1256561. Dzięki za pomysł.. jednak nie zająłem się rzeczami do dekodowania url wspomnianymi w kroku 3.

Oto kod php, który zdekoduje serializowane dane formularza, jeśli ktoś jeszcze tego potrzebuje. Przy okazji, użyj tego kodu według własnego uznania.

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

Wprowadzanie danych url post będzie takie jak: attribute1=wartość1&attribute2=wartość2&attribute3=wartość3 i tak dalej

Wyjście powyższego kodu będzie nadal w tablicy i można go zmodyfikować do get it assigned to any variable you want and it depends on how you want to use this data further.

Array
(
    [0] => attribute1
    [1] => value1
    [2] => attribute2
    [3] => value2
    [4] => attribute3
    [5] => value3
)
 1
Author: jbz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-19 21:05:22

Potrzebujesz tylko nazwy atrybutu value w formie. Przykład:

Formularz

<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
Author: Lagan Script,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-19 10:25:49

Myślę, że należy oddzielić nazwy formularzy od ich wartości, jedną z metod, aby to zrobić, jest eksplodowanie (&), aby uzyskać attribute=value,attribute2=value.

Chodzi mi o to, że przekonwertujesz serializowany łańcuch jQuery na tablice w PHP.

Oto kroki, które powinieneś wykonać, aby być bardziej szczegółowym.

  1. przekazana na stronie jQuery do strony PHP (np ajax.php) gdzie używasz $.ajax do przesyłania za pomocą post lub get.
  2. z twojej strony php, eksploduj (&) tak oddzielenie każdego atrybuty. Teraz otrzymasz attribute1=wartość, attribute2=wartość, teraz otrzymasz zmienną tablicy PHP. e. G $data = array("attribute1=value","attribute2=value")
  3. zrób foreach na $data i explode (=), aby można było oddziel atrybut od wartości i upewnij się, że urldecode wartość tak, że będzie ona konwertować serializowane wartości na wartość że potrzebujesz, i wstaw atrybut i jego wartość do nowej tablicy zmienna, która przechowuje atrybut i wartość serializowanej sznurek.

Pozwól mi wiedz, czy potrzebujesz więcej wyjaśnień.

 0
Author: Jm Dollosa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-26 13:23:30