Mysql - Ajouter une chaîne de caractère contenant &
#1
Posté 25 janvier 2012 - 11:29
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.
#2
Posté 25 janvier 2012 - 15:43
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
#3
Posté 26 janvier 2012 - 11:36
"Ce n'est pas parce que l'on ne sait pas, que l'on ne peut pas. L'on peut tout apprendre, avec de la motivation."
#4
Posté 27 janvier 2012 - 15:40
INSERT INTO `Table`(`a&b`) VALUES (123456)
doit fonctionner
#5
Posté 30 janvier 2012 - 09:34
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
#6
Posté 30 janvier 2012 - 09:48
Que vois-tu dans PHPMyAdmin ?
Et, le cas échéant, peux-tu coller le code qui te permet de récupérer ce contenu ?
#7
Posté 31 janvier 2012 - 10:54
#8
Posté 01 février 2012 - 16:51
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
Ce message a été modifié par sparh - 01 février 2012 - 16:55.
#9
Posté 01 février 2012 - 16:53
"Ce n'est pas parce que l'on ne sait pas, que l'on ne peut pas. L'on peut tout apprendre, avec de la motivation."
#10
Posté 01 février 2012 - 17:08
#11
Posté 01 février 2012 - 17:58
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.
#12
Posté 06 février 2012 - 18:56
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
Ce message a été modifié par sparh - 06 février 2012 - 18:58.
#13
Posté 06 février 2012 - 20:30
#14
Posté 07 février 2012 - 12:09
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')+"&regie="+$('#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
Ce message a été modifié par sparh - 07 février 2012 - 12:10.
#15
Posté 07 février 2012 - 12:12
$('#type').attr('value')
par
$('#type').attr('value').replace('&', '&')
pareillement pour $('#regie')
#16
Posté 07 février 2012 - 12:45
$.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.
#17
Posté 07 février 2012 - 15:50
captain_torche --> ta solution ne marchait pas.
Merci à tous en tous cas
#18
Posté 07 février 2012 - 21:50
Jean-Luc
Testeur de redirection (301, 302, meta refresh,...)
Le Grand Annuaire : comme DMOZ, mais avec indexation super-rapide
#19
Posté 08 février 2012 - 10:35
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.



Haut













