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.
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"
À 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¶m2=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!
/ / 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
)
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
.
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
Modifiée Murtaza Hussain réponse:
function unserializeForm($str) {
$strArray = explode("&", $str);
foreach($strArray as $item) {
$array = explode("=", $item);
$returndata[] = $array;
}
return $returndata;
}
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'] );
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!
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
)
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;
}
?>
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.
- passé le
jQuery
sérialisé à une pagePHP
(par exempleajax.php
) où vous utilisez$.ajax
pour soumettre en utilisant post ou get. - 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")
- faites un
foreach
sur$data
etexplode
le(=)
afin que vous puissiez séparer l'attribut de la valeur, et assurez-vous deurldecode
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.