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.
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"
Si votre serveur reçoit une chaîne qui ressemble à ceci (ce qui devrait être le cas si vous utilisez jQuery serialize()
):
"param1=someVal¶m2=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!
// 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
)
parse_str($_POST['whatever'], $searcharray);
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
.
Modifié Murtaza Hussain réponse:
function unserializeForm($str) {
$strArray = explode("&", $str);
foreach($strArray as $item) {
$array = explode("=", $item);
$returndata[] = $array;
}
return $returndata;
}
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'] );
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!
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
)
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;
}
?>
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.
jQuery
sérialisé à une page PHP
(par exemple, ajax.php
) où vous utilisez $.ajax
pour soumettre en utilisant post ou get.(&)
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")
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.
Utilisation:
$( '#form' ).serializeArray();
Php obtenir tableau, ne pas besoin de unserialize;)