web-dev-qa-db-fra.com

Comment PHP-désérialiser un formulaire sérialisé jQuery?

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

147
Gene Bean

Vous ne devriez rien désérialiser dans 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 demande ajax de méthode GET ou post vars si vous utilisez une demande POST ajax. Donc, en PHP, vous accéderiez à des valeurs telles que $_POST["varname"] ou $_GET["varname"] en fonction du type de demande.

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

65
Chris Gutierrez

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

"param1=someVal&param2=someOtherVal"

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

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

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

Voir les informations suivantes pour plus d'informations: http://www.php.net/manual/en/function.parse-str.php

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

370
Chris Allen Lane

// jQuery Post

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

// jquery.post serialized var - TO - PHP Format de tableau

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
 )
46
Aridane
parse_str($_POST['whatever'], $searcharray);
16
danidacar

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, retourne le champ f1.

7
mghhgm

Modifié Murtaza Hussain réponse:

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

Pourquoi ne pas utiliser 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

Faites ceci simplement

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

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 juste avec un print_r().

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

J'espère que cela t'aides!

1
sixFingers

C'est en réponse à user1256561. Merci pour votre idée .. cependant je ne me suis pas occupé de l'URL décoder les choses mentionnées dans l'étape 3.

voici donc le code php qui décodera les données du formulaire sérialisé, si quelqu'un d'autre en a besoin. Au fait, 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);
}

Les données post d’URL seront comme suit: attribut1 = valeur1 & attribut2 = valeur2 & attribut3 = valeur3 et ainsi de suite

La sortie du code ci-dessus sera toujours dans un tableau et vous pouvez le modifier pour l'assigner à la variable de votre choix. Cela dépend de la manière dont vous souhaitez utiliser ces données.

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

Vous avez juste besoin du nom d'attribut value sous forme. 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
Lagan Script

Je pense que vous devez séparer les noms de formulaire de ses valeurs. Une méthode pour ce faire consiste à exploser (&) pour que vous obteniez attribute=value,attribute2=value.

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

Voici les étapes à suivre pour être plus précis.

  1. Transmis 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 (&) en séparant ainsi chaque attribut. Maintenant, vous obtiendrez attribut1 = valeur, attribut2 = valeur, maintenant vous obtiendrez une variable de tableau php. e.g$data = array("attribute1=value","attribute2=value")
  3. Faites une foreach sur $data et explode le (=) afin de pouvoir séparer l'attribut de la valeur et assurez-vous de urldecode la valeur afin qu'elle convertira les valeurs sérialisées en la valeur dont vous avez besoin et insérera l'attribut et sa valeur dans une nouvelle variable de tableau, qui stockera l'attribut et la valeur de la chaîne sérialisée.

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

0
Jm Dollosa

Utilisation:

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

Php obtenir tableau, ne pas besoin de unserialize;)

0
Varga Zoli