7
votes

Traitement des données de formulaire Serialized JSON dans PHP

J'ai besoin de stocker la variable de la chaîne JSON avec nom "msg" dans ma base de données, mais je ne suis pas capable de l'attraper avec $ msg = $ _post ["msg ']; Comment puis-je l'attraper correctement?

J'aimerais faire écho le contenu de $ msg immédiatement sur la page Web. P>

HTML H2>
 $msg = $_POST['msg'];
//  echo $msg;
 $author = $_POST['author'];
 $email = $_POST['email'];
 $url = $_POST['url'];
 $city = $_POST['city'];




    // include ("/home/sionvalais/domains/skiweather.eu/public_html/v3/functions/strip.php");

    if ($cam_id>1) {

    if ($author=='NAME') {
    $author='Anonymous';
    }

    $host = gethostbyaddr($ip);
    // mysql_query ("set character_set_results='utf8'");
    mysql_query("INSERT INTO sv_review (author,email,msg,cam_id,url,lud)
                    VALUES (
                        N'".$author."',
                        '".$email."',
                        N'".$msg."',
                        '".$cam_id."',
                        '".$url."',
                        NOW()
                    )");
     }


5 commentaires

Eh bien, c'est charmant. Quelle est votre question cependant?


Qu'est-ce qui est écrit sur votre insertion.php? /


ce serait $ msg = $ _post ['msg'];


Pour plus de clairance, montrez votre code HTML et PHP


Veuillez ne pas utiliser mySQL _ * Fonctions dans le nouveau code. Ils ne sont plus conservés et sont officiellement obsolète . Voir la boîte rouge? En savoir plus sur les déclarations préparées à la place et utilisez PDO ou mysqli .


6 Réponses :


1
votes

$ post ['msg'] doit être $ _Post ['msg']

également pour émettre vos variables de poste afin que vous puissiez les inspecter utiliser: p>

echo print_r($_POST);


1 commentaires

Quel est le point de echo print_r ($ var) print_r imprime par défaut, sauf si vous définissez print_r ($ var, true);



0
votes

Essayez cette modification - xxx

});


1 commentaires

Qu'en est-il de cette fonction $ ("# AddCommENTMorm"). Soumettre (fonction () {... ...}) au lieu de .Click fonction?



3
votes

Aussi loin que je sache, la valeur par défaut de contenttype code> est "application / x-www-form-urlencoded; charset = uf-8" code>, qui va bien pour la plupart des cas.

mais il semble que les données code> code> que vous envoyez au serveur n'est pas un objet JSON, réglage contenttype code> ne convertit pas les données en objet JSON, il Déclare le type de données. p>

donc, si Data ​​code> est juste une série de paires de noms / valeur, veuillez supprimer contentType: "Application / JSON", CODE > et réessayez à nouveau. p>

et s'il s'agit d'un type de JSON valide, décodez l'objet JSON publié sur le serveur, en utilisant: $ array = json_decode ($ JSON, vrai); code> P>

Accéder à l'objet JSON H1>

Vous pouvez suivre l'approche ci-dessous pour obtenir l'objet JSON sur le serveur: P>

$json = @file_get_contents('php://input');
$array = json_decode($json, true);

// See what happens
print_r($array);


6 commentaires

Ceci est incorrect, DataType: 'JSON' fait référence aux données de réponse, pas à ce que vous envoyez. Il dit à JQuery de décoder automatiquement le JSON reçu, rien à voir avec ce que vous envoyez du serveur client->. C'est la même chose que faire $. Getjson () . Le type de contenu est ce qui fait référence aux données envoyées.


@shariff j'apprécierai si vous expliquez votre raison


Beacuse Ce n'est pas la question de la question.Le problème est l'envoi de données postales au serveur. Et je sais que vous pouvez obtenir la variable de formulaire dans le serveur si la méthode est «mettre» comme ça. Elle a utilisé la méthode postale.So est-ce qu'il peut toujours faire comme le vôtre. Je ne sais pas Xactly.


@shariif, ce que j'ai dit à la première est que je ne pense pas data: $ ("# addCommentform"). Serialize () pourrait être un objet JSON valide, il semble être une paire sérialisée de Nom / valeurs.


Il n'est pas nécessaire de ne pas être aussi parce que le type de données: JSON signifie le type de données de réponse non les données sérialisées qu'il envoie .thanx @hashemqolami


@shariif Tout d'abord, je n'ai pas voulu dire DataType , comme @MRCode dit, DataType fait référence aux données de réponse que vous attribuez une mauvaise valeur (dans votre anwser). . Deuxièmement, PHP: // entrée nous permet de lire des données de poste brutes, c'est une alternative de $ http_raw_post_data .



0
votes

.Serialiser forme une chaîne de requête pouvant être envoyée à un serveur. Il ne crée pas de JSON, faire une alerte de $ ("# addCommentform"). Serialize () vous devriez voir une chaîne de requête et non un Json alors retirez le réglage. contentType: "Application / JSON" , à partir de $. Ajax et vous devriez être capable d'obtenir le msg dans $ _ post ['msg'] dans php


1 commentaires

Est-ce que vous ne pouvez pas obtenir $ _Post ['msg'] et tous les autres champs tels que l'auteur, le courrier électronique, l'URL ..vous êtes capable de recevoir de $ _Post?



1
votes

Utiliser doit limiter les données à JSON: JSON.Stringify ($ ("# AddCommentForm"). Serializarray ()) . $ ("# addCommentform"). Serialize () ne fait pas JSON.


1 commentaires

D'accord. Fait. Mais je ne passe pas du côté serveur.



0
votes

Ne pas utiliser: contentType: "JSON"

Ceci est un post, une rigueur? Donc, il utilisera: xxx

ou xxx

ou simplement pour simplifier n'utilisez personne. Supprimer tout contenttype ou DataType , jQuery choisissez-en une par défaut, car le type est post.


0 commentaires