Se connecter / S'enregistrer
Votre question

Problème avec les chaines de caractères en PHP et MySQl

Tags :
  • MySQL
  • Programmation
Dernière réponse : dans Programmation
15 Juin 2005 16:36:14

Bonjour à tous,
j'ai un petit soucis avec les chaines de caractères en PHP et MySQl.
Voici le pb :
J'ai une application qui tourne sous XP Pro, Home et 2000. Elle est conçus avec PHP et une base de données MySQL. Lorsque je veut traiter des chaines de caractères du genre : "Le Grand Bleu" je n'ai pas de problèmes. Mais lorsque je cherche à faire une requête SQL avec une chaine qui contient un caractère du /\ ou autre là je n'ai pas de réponse de la part de ma requête.
Voici le code utilisé : SELECT quantite
FROM article AS a, reservation AS r
WHERE r.nom_article = a.nom

Si j'ai un nom d'article comme Ranma 1/2 ben ma requête ne me renvoie rien :(  après l'avoir éxécutée et traitée dans un tableau.
Pourriez vous me donner un cout de main ça doit pas être grand chose mais là après deux nuits dessus je sèche.
Merci pour tout.
Caillou

Autres pages sur : probleme chaines caracteres php mysql

15 Juin 2005 16:59:42

Up, un peu d'aide serai bien SVP je suis dans le C... :(  je dort plus là.
Merci
Caillou
15 Juin 2005 17:24:59

il faudrait rajouter le symbole * dans ta requete
quand tu recois la variable a chercher, rajoute lui *, comme ca si tu as ce genre de symbole, ca devrait tout de meme l'afficher ;) 
Contenus similaires
15 Juin 2005 17:30:37

IL faut TOUJOURS même si en general cela doit etre des chiffre mettre la fonction addslach pour des varaible qui partiron en requete sql pour des raisons de sécurité ensuite tu fait stripslash pour les retiré.

C'est le probleme des apostrophe magique
15 Juin 2005 18:16:02

Okey Merci les gars.
Citation :

SiM07 a écrit :
IL faut TOUJOURS même si en general cela doit etre des chiffre mettre la fonction addslach pour des varaible qui partiron en requete sql pour des raisons de sécurité ensuite tu fait stripslash pour les retiré.

C'est le probleme des apostrophe magique

Je suppose que ce que tu me dis SiM07 c'est dans le code PHP mais moi c'est dans la base de données que ça cloche car j'arrive à afficher les variables comportants ce genre de caractère lorsquelles sont dans un formulaire. En fait c'est la comparaison entre ce qui me vient d'un formulaire ou autre et la chaine de caracctères dans ma base de données car j'arrive à tous afficher sans pbs.
Merci
Caillou
15 Juin 2005 18:33:17

Oui mais les apostrophe magic peuvnt modfié ta requete et don ne pas te donnée le bon résultat. enfin c'est peut etre pas la le probleme
15 Juin 2005 19:47:44

Je viens de regarder les solutions que tu m'as données, en fait moi c'ets le caractère inverse qui me pose problème enfin bon pas grave merci quand meme je vais essayer de voir si ça passe autrement je suis encore bon pour une autre nuit très courte.
Merci
Caillou
15 Juin 2005 20:54:13

Voisi le code que j'utilise.
  1. <?
  2. include("connexion.php");
  3. connexion('cave');
  4.  
  5. if("$_POST[etat]" == 'Vendue')
  6. {
  7. $queryq="SELEC quantite FROM article
  8. WHERE nom = '".$_POST['nom_article']."'";
  9. $resq=mysql_query($queryq);
  10. $tabq=mysql_fetch_array($resq);
  11. echo"'".$tabq['nom']."'<br>";
  12. if(!$resq)
  13. {
  14. echo "Exécution de la requête<br>$queryq<br><b>impossible_quantite</b><br>";
  15. echo mysql_errno()." :".mysql_error()."<br>"; // Affichage de l'erreur pour mise au point dans le code.
  16. }
  17. // Ne pas prendre compte de ce code c'est juste pour tester.
  18. echo"".$_POST['nom_article']."<br>";
  19. $a="$_POST[quantite]";
  20. echo"$a<br>";
  21. $b="$tabq[quantite]";
  22. $total=$b-$a;
  23. echo"$total<br>";
  24.  
  25. $query_reinser="UPDAT article SET quantite=$total WHERE nom='".$_POST['nom_article']."'";
  26.  
  27. }
  28.  
  29. //Requête de mise à jour du produit.
  30. $query="UPDAT reservation SET nom_article='".$_POST['nom_article']."', id_client='".$_POST['id_client']."', nom_fournisseur='".$_POST['nom_fournisseur']."', quantite='".$_POST['quantite']."', date='".$_POST['date']."', description='".$_POST['description']."', etat='".$_POST['etat']."'
  31. WHERE id='".$_POST['id_reservation']."'";
  32. //Execution de la requete de mise à jour.
  33. $res=mysql_quer($query);
  34. //Test sur la requête SQL pour vérifier qu'il n'ya pas de problème de syntaxe.
  35. if(!$res)
  36. {
  37. echo "Exécution de la requête<br>$query<br><b>impossible</b><br>";
  38. echo mysql_errno()." :".mysql_error()."<br>"; // Affichage de l'erreur pour mise au point dans le code.
  39. }
  40. else //Sinon affichage de la mise à jour des informations suivantes.
  41. echo "Les informations ont bien été mises à jour.<br>
  42. Vous allez être redirigé(e) vers la liste des reservations.";
  43. ?>

Le problème se situe à le requete queryq si le nom_article est un nom de type 'Ranma 1/2' ça foire.
Help SVP.
15 Juin 2005 20:55:24

Je sais y a des fautes au niveau des requect vers selecte et querye mais je pouvez pas poster autrement.
15 Juin 2005 21:06:01

c'est normal que tu aies des erreurs le slash signifie quelque chose de bien précis, /n envoie a la ligne, /t fais une tabulation par exemple.

Il faut que tu trouve la fonction qui enleve ce petit soucis. Il est possible aussi que dans ta chaine si tu mets un ' ou un " ça deconne completement parce que il pensera que tu as fermé la chaine de caractère.

Tu peux te renseigner sur le sql injection...
15 Juin 2005 21:10:52

okey je traite ma chaine de caractères comment?
Caillou
15 Juin 2005 21:13:30

je viens de relire ton pb et c'est dans la base de données que ça deconne? As tu essayer de faire des modifications dans la base, comme du genre un update sur ranma 1/2 pour enlever le / ?
J'avais eu un de ces pb sous postgresql, je ne pouvais absolument plus modifier, ni supprimer parce que il ne retrouvais plus cette donnée dans la base...

Apparement cela venais du format utilisé (unicode etc.) J'avais fais une importation de chez linux a windows. Il m'avais converti le tout et du coup sous windows tout marchais... Je peux pas trop t'en dire plus, mais renseigne toi la dessus
15 Juin 2005 21:23:19

En fait j'arrive à maitre à jour les infos du produit mais parceque je passe par les id de chaque produit et nom par les noms.
Si je fais les opé qui sont dans le code avec un nom de produit comme 'Dragon Ball Z' tout marche bien. C'est juste avec les caractère spéciaux.
A+
Caillou
15 Juin 2005 21:27:37

ouai peux tu faire ceci par exemple UPDATE table set nom_film=ranma 1 2 where nom_film=ranma 1/2??

en gros peux tu faire une modif en passant par le nom du film sans passer par l'id?
15 Juin 2005 21:39:10

Hein Hein ça marche pas j'ai déjà essayer en le mettant en dur dans le code et ça me fait la meme chose que si je place une variable dinamique.
Mais je crois je viens de trouver une solution là je fais n break et je m'y remet un peu plus tard.
A+
Caillou
15 Juin 2005 22:09:36

hésite pas à donner ta solution si tu trouves!
15 Juin 2005 22:22:50

okey je tester dans la soirée la solution de SiM07. JE viens de lire un bouquin et des trucs sur le net je pense que ça peu marcher.
A+
Caillou
17 Juin 2005 13:01:03

Salut à tous,
J'ai trouvé une solution pour ce problème : en fait à chaque insertion d'une nouvelle valeur dans ma table, avant d'éxécuter ma requète je fais passer ma variable dans une fonction qui teste si il y a les caractères qui sont interdits, alors je met un \ devant le caractère et je retourne ma variable comme ça. J'ai testé et ça marche impec.
A+
Caillou
Ps: je mettrai le code en ligne si j'ai le temps sinon joingné par MP, de toute façon on peut le trouver sur le net aussi. :-)
17 Juin 2005 13:55:49

oui c'est ce que l'ont t'avais conseillé le plus simple en fait...
18 Juin 2005 14:42:50

Salut,
Il est vrai que c'est le plus simple et en plus ça marche sans les options magic quote et autres activées sur mon serveur apache.
A+
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS