Aller au contenu

Mysql - Ajouter une chaîne de caractère contenant &


sparh

Sujets conseillés

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 "&" ?

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é par sparh
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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')+"&regie="+$('#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é par sparh
Lien vers le commentaire
Partager sur d’autres sites

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')+"&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'))+"&regie="+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é par sparh
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...