Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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
Lassé par la pub ? Créez un compte
Expert Programmation

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

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

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

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.

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...

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

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

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

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. :-)
Lassé par la pub ? Créez un compte
Tom's guide dans le monde