Comment puis-je PHP-unserialize un formulaire jQuery-sérialisé?

En utilisant $('#form').serialize(), j'ai pu envoyer ceci sur une page PHP. Maintenant, comment puis-je le désérialiser en PHP? Il a été sérialisé dans jQuery.

133
demandé sur Aurelio De Rosa 2009-11-24 23:08:19

12 réponses

Vous ne devriez pas avoir à désérialiser quoi que ce soit en PHP à partir de la méthode jquery serialize. Si vous sérialisez les données, elles doivent être envoyées à PHP en tant que paramètres de requête si vous utilisez une requête ajax de la méthode GET ou post vars si vous utilisez une requête ajax POST. Donc, en PHP, vous accéderiez à des valeurs comme $_POST["varname"] ou $_GET["varname"] selon le type de requête.

La méthode serialize prend simplement les éléments de formulaire et les met sous forme de chaîne. "varname=val&var2=val2"

60
répondu Chris Gutierrez 2015-01-27 09:08:44

À condition que votre serveur reçoive une chaîne qui ressemble à ceci (ce qui devrait être le cas si vous utilisez jQuery serialize()):

"param1=someVal&param2=someOtherVal"

...quelque chose comme ça est probablement tout ce dont vous avez besoin:

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

$params devrait alors être un tableau modélisé comme vous vous attendez. Notez que cela fonctionne également avec les tableaux HTML.

Voir ce qui suit pour plus d'informations: http://www.php.net/manual/en/function.parse-str.php

J'espère que c'est utile. Bonne chance!

331
répondu Chris Allen Lane 2015-02-23 17:25:26

/ / jQuery Post

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

/ / jquery.format de tableau var - to - PHP post sérialisé

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

// vous obtenez la même chose

 Array (
 [A] => 1
 [B] => 2
 [C] => 3
 [D] => 4
 [E] => 5
 [F] => 6
 [G] => 7
 [H] => 8
 )
40
répondu Aridane 2012-07-01 14:27:14
parse_str($_POST['whatever'], $searcharray);
15
répondu danidacar 2012-08-18 13:36:57

Dans HTML page:

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

Sur PHP page:

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

Sur ce code php, retournez le Champ f1.

7
répondu mghhgm 2014-05-17 10:20:36

Pourquoi ne pas utiliser un tableau associatif, de sorte que vous pouvez l'utiliser facilement

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

    return $returndata;
}

Cordialement

4
répondu Murtaza Khursheed Hussain 2013-02-02 08:16:37

Modifiée Murtaza Hussain réponse:

function unserializeForm($str) {
    $strArray = explode("&", $str);
    foreach($strArray as $item) {
        $array = explode("=", $item);
        $returndata[] = $array;
    }
    return $returndata;
}
4
répondu Tomasz Majerski 2017-05-23 11:47:29

Faites simplement ceci

        $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
répondu Omid Akhavan 2017-07-31 12:50:06

Je ne sais pas quelle version de Jquery vous utilisez, mais cela fonctionne pour moi dans jQuery 1.3:

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

Ensuite, vous pouvez accéder aux clés de tableau POST comme vous le feriez normalement en php. Essayez simplement avec un print_r().

Je pense que vous enveloppez une valeur de formulaire sérialisée dans la propriété d'un objet, ce qui est inutile pour autant que je sache.

Espérons que cela aide!

1
répondu sixFingers 2010-10-11 10:23:30

Ceci est en réponse à user1256561. Merci pour votre idée.. cependant, je n'ai pas pris soin des choses de décodage d'url mentionnées à l'étape 3.

Voici donc le code php qui va décoder les données de formulaire sérialisées, si quelqu'un d'autre en a besoin. En passant, utilisez ce code à votre propre discrétion.

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

L'url publier des données d'entrée seront comme: attribut1=valeur1&attribut2=valeur2&attribute3=valeur3 et ainsi de suite

La sortie du code ci-dessus sera toujours dans un tableau et vous pouvez le modifier pour obtenez-le affecté à n'importe quelle variable que vous voulez et cela dépend de la façon dont vous voulez utiliser ces données plus loin.

Array
(
    [0] => attribute1
    [1] => value1
    [2] => attribute2
    [3] => value2
    [4] => attribute3
    [5] => value3
)
1
répondu jbz 2012-10-19 21:05:22

Vous avez juste besoin d'un nom d'attribut de valeur dans le formulaire. Exemple:

Forme

<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
répondu Lagan Script 2016-10-19 10:25:49

Je pense que vous devez séparer les noms de formulaire de ses valeurs, une méthode pour le faire est d'exploser (&) de sorte que vous obtiendrez attribute=value,attribute2=value.

Mon point ici est que vous allez convertir la chaîne jQuery sérialisée en tableaux en PHP.

Voici les étapes que vous devez suivre pour être plus précis.

  1. passé le jQuery sérialisé à une page PHP (par exemple ajax.php) où vous utilisez $.ajax pour soumettre en utilisant post ou get.
  2. depuis votre page php, faites exploser le (&) ainsi en séparant chaque attribut. Maintenant, vous pouvez profiter attribut1=valeur, attribut2=la valeur, maintenant vous obtiendrez une variable de tableau php. par exemple $data = array("attribute1=value","attribute2=value")
  3. faites un foreach sur $data et explode le (=) afin que vous puissiez séparer l'attribut de la valeur, et assurez-vous de urldecode la valeur afin qu'elle convertisse les valeurs sérialisées en valeur que vous avez besoin, et insérez l'attribut et sa valeur dans un nouveau tableau variable qui stocke l'attribut et la valeur de la sérialisé chaîne.

Laissez-moi savoir si vous avez besoin de plus de précisions.

0
répondu Jm Dollosa 2012-10-26 13:23:30