sparh Posté 25 Janvier 2012 Posté 25 Janvier 2012 Bonjour, depuis ce matin je bloque la dessus : comment insérer une chaîne de caractère contenant & dans un champ de ma base de donnée ? J'ai trouvé set define off et set scan off mais je ne sait pas trop comment les faire fonctionner. Merci d'avance pour votre aide.
adn Posté 25 Janvier 2012 Posté 25 Janvier 2012 Salut, Je ne comprends pas perso la question. Il n'y a pour moi aucun problème pour un insert d'une chaine contenant un & dans un champ de type VARCHAR ou précise ta question
Aenoa Posté 26 Janvier 2012 Posté 26 Janvier 2012 Je penses qu'il dispose d'une table ayant une colonne portant un nom avec un "&", en lisant son post, et qu'il désire effectuer un insert dans cette colonne... ou une table comportant un "&" ?
adn Posté 27 Janvier 2012 Posté 27 Janvier 2012 Ahhh faut comprendre, dans ce cas INSERT INTO `Table`(`a&b`) VALUES (123456) doit fonctionner
sparh Posté 30 Janvier 2012 Auteur Posté 30 Janvier 2012 Bonjour, non non je parle bien d'une requête du type : INSERT INTO `Table`(`colonne_un`) VALUES ('a&b') (colonne_un étant VARCHAR) Quand je récupère les données insérée j'ai tout jusqu'au &. Dans ce cas je n'ai que a ! Merci d'avance
captain_torche Posté 30 Janvier 2012 Posté 30 Janvier 2012 Le souci vient lors de l'insertion, ou lors de la récupération ? Que vois-tu dans PHPMyAdmin ? Et, le cas échéant, peux-tu coller le code qui te permet de récupérer ce contenu ?
adn Posté 31 Janvier 2012 Posté 31 Janvier 2012 Le VARCHAR ne serait-il pas défini avec une longeur de 2 ?
sparh Posté 1 Février 2012 Auteur Posté 1 Février 2012 (modifié) Bonjour et merci pour vos réponses. Alors le souci vient lors de l'insertion des donnée (je n'ai donc pas encore essayé de récupérer car je n'arrive même pas à insérer!) Le champ est en VARCHAR(50), la chaîne de caractère contient moins de 50 caractère Les données sont envoyés par POST en ajax et je fait un mysql_real_escape_string sur la variable envoyée. Quand je veux enregistrer la chaîne suivante : hkjhhkjh &ikl Dans ma base de donnée je retrouve : hkjhhkjh Je viens de faire sans passer par ajax et pas de souci j'ai bien la totalité de mes entregistrements avec les & : $sql = "UPDATE interventions SET proprietaire='ihkjh &hokhlkh',commentaire='jkljk commentaire & jkl' WHERE id='106'"; Donc il semble que ce soit le POST en ajax qui pose problème Modifié 1 Février 2012 par sparh
captain_torche Posté 1 Février 2012 Posté 1 Février 2012 Dans la page AJAX, pourrais-tu faire un echo de ta requête ?
Ernestine Posté 1 Février 2012 Posté 1 Février 2012 Bonjour, Je te conseille de tester ta page sous Chrome. Une fois sur ta page, tu appuies sur F12 pour afficher l'outil de développement. Dans l'outil de développement tu cliques sur l'onglet Réseau (ou Network), puis dans la liste du bas sur XHR. Avec ça, tu as tous les détails de ta requête Ajax : requête, réponse, éventuelles erreurs, etc... Tu peux aussi essayer de taper directement l'url appelée en Ajax dans la barre d'adresse de ton navigateur (ce sera du GET mais peu importe) et voir ce qui s'affiche (réponse du serveur). Sinon, merci de nous copier-coller ton code Ajax.
sparh Posté 6 Février 2012 Auteur Posté 6 Février 2012 (modifié) Bonsoir et merci de votre intérêt. Alors voilà ma requête ajax : $('#formulaire').submit(function() { $.ajax({ type: "POST", url: "../Includes/Formulaires/verif_bon.php?ajax=oui&id=<?php echo $id_a_modifier ; ?>, data: "num_ordre="+$('#num_ordre').attr('value')+"&type="+$('#type').attr('value')+"®ie="+$('#regie').attr('value'), success:function(data){ $("#retour_message").empty().append(data); } }); return false; }); et la sql (avec mysql_real_escape_string sur chaque variable) $sql ="UPDATE interventions SET num_ordre='$num_ordre', type='$type', regie='$regie' WHERE num_db = '$id_a_modifier' "; Pendant un moment j'ai cru que c'était le & de séparation des variables envoyés par ajax, mais si je remplace par & les variables suivantes ne sont pas envoyées. _AT_Ernestine j'affiche déjà le résultat de ma requête : la requête sql s’exécute correctement sauf pour la variable qui contient un &. Exemple : je souhaite enregistrer : num_ordre = 105 type = bla bla bla & co regie = test & co Une fois la requête exécutée dans la base j'ai : num_ordre = 105 type = bla bla bla regie = test Modifié 6 Février 2012 par sparh
captain_torche Posté 6 Février 2012 Posté 6 Février 2012 Réencode les & en & : lorsqu'ils passent en POST, ils sont considérés comme le début d'un nouveau paramètre.
sparh Posté 7 Février 2012 Auteur Posté 7 Février 2012 (modifié) Hello, alors j'ai tenté : $('#formulaire').submit(function() { $.ajax({ type: "POST", url: "../Includes/Formulaires/verif_bon.php?ajax=oui&id=<?php echo $id_a_modifier ; ?>, data: "num_ordre="+$('#num_ordre').attr('value')+"&type="+$('#type').attr('value')+"®ie="+$('#regie').attr('value'), success:function(data){ $("#retour_message").empty().append(data); } }); return false; }); Avec ça je n'ai que la variable num_ordre qui est envoyé J'ai aussi essayé : function HTMLEncode(wText){if(typeof(wText)!="string"){wText=wText.toString();};wText=wText.replace(/&/g, "&") ;return wText;};$('#formulaire').submit(function() { $.ajax({ type: "POST", url: "../Includes/Formulaires/verif_bon.php?ajax=oui&id=<?php echo $id_a_modifier ; ?>, data: "num_ordre="+HTMLEncode($('#num_ordre').attr('value'))+"&type="+HTMLEncode($('#type').attr('value'))+"®ie="+HTMLEncode($('#regie').attr('value')), success:function(data){ $("#retour_message").empty().append(data); } }); return false; }); La je retombe sur le problème initial c'est à dire : je souhaite enregistrer : num_ordre = 105 type = bla bla bla & co regie = test & co Une fois la requête exécutée dans la base j'ai : num_ordre = 105 type = bla bla bla regie = test Modifié 7 Février 2012 par sparh
captain_torche Posté 7 Février 2012 Posté 7 Février 2012 Essaye de remplacer $('#type').attr('value') par $('#type').attr('value').replace('&', '&') pareillement pour $('#regie')
Ernestine Posté 7 Février 2012 Posté 7 Février 2012 Essaie aussi de passer correctement les paramètres, et non pas tout en vrac comme tu le fais actuellement : $.ajax({ type: 'POST', url: "../Includes/Formulaires/verif_bon.php", data: { 'ajax' : 'oui', 'id' : '<?php echo $id_a_modifier ; ?>', 'type' : $('#type').attr('value') //etc... }}); De cette manière les valeurs sont automatiquement converties.
sparh Posté 7 Février 2012 Auteur Posté 7 Février 2012 Yes, merci Ernestine c'est ta solution qui marche en plus c'est plus lisible et facile à modifier. captain_torche --> ta solution ne marchait pas. Merci à tous en tous cas
Jeanluc Posté 7 Février 2012 Posté 7 Février 2012 Je me dis qu'en remplaçant ce fameux & par %26, cela devrait aussi marcher. Jean-Luc
Ernestine Posté 8 Février 2012 Posté 8 Février 2012 Oui Jean-Luc, mais il n'y pas que les & à traiter En passant les paramètres dans la variable data de la fonction $.ajax() de jQuery, les paramètres sont automatiquement encodés proprement. Je suppose qu'en arrière plan, jQuery utilise tout simplement la fonction encodeURIComponent() pour réaliser cet encodage. Il est d'ailleurs possible de le désactiver en ajoutant le paramètre processData: false à la fonction ajax.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant