2010-05-04 6 views
0

Pourquoi est-ce que je ne peux jamais obtenir JQuery sérialiser pour fonctionner correctement. Je suppose que je dois manquer quelque chose.Post JQuery à php

Je sérialisation des données de formulaire et il montre dans une alerte:

var forminfo = $j('#frmuserinfo').serialize(); 
alert(forminfo); 

je poste puis à ma page PHP ainsi:

$j.ajax({ 
    type: "POST", 
    url: "cv-user-process.php", 
    data: "forminfo="+forminfo, 
    cache: false, 
    complete: function(data) { 

    } 
}); 

Mais WHENEVER (pas la première fois) je tente insérer/mettre à jour les données dans le DB je ne reçois jamais 1 varaible passé:

Voici mon script PHP:

$testit = mysql_query("UPDATE cv_usersmeta SET inputtest='".$_POST['forminfo']."' WHERE user='X'"); 

Les données transmises ne reçoivent jamais que la première variable. Pourquoi?

Je pense que c'est plutôt la façon dont je gère le php mais cela me rend fou et me prend trop de temps pour trouver où je me trompe.

Répondre

0

Je crois qu'il est parce que vous envelopper toute forme sérialisée sous la variable FormInfo.

Cela se traduirait par une forme var tels que forminfo=field1=val1&field2=val2 - si la chose est à php comme FormInfo

Vous n'êtes pas obligé de le faire:

$j.ajax({ 
type: "POST", 
url: "cv-user-process.php", 
data: forminfo, 
cache: false, 
complete: function(data) { 

} 
0

Dans votre script php ont ce en haut:

<?php 
print_r($_POST); 
exit; 
?> 

Cela devrait vous aider à trouver ce qui pourrait aller mal pour vous.

0

Vous devez passer un peu différemment, comme ceci:

$j.ajax({ 
    type: "POST", 
    url: "cv-user-process.php", 
    data: $j('#frmuserinfo').serialize(), 
    cache: false, 
    complete: function(data) {  
    } 
}); 

Dans votre php ne pas utiliser $_POST['forminfo'] mais plutôt $_POST['nameOfTheInput']. De plus, vous devez aseptiser l'entrée, comme ceci:

$testit = mysql_query("UPDATE cv_usersmeta SET inputtest='".mysql_real_escape_string($_POST['nameOfTheInput'])."' WHERE user='X'"); 

Cela empêche les attaques par injection SQL, which I suggest you read more about :)

0

Et si vous avez encore besoin envoyer toutes les données sérialisées, vous devez encoder votre chaîne avec la fonction escape(). Comme ceci:

$j.ajax({ 
    data: "forminfo="+escape(forminfo), 
    ... 
});