Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4664 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  sprintf ()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sprintf ()

n°1234122
thiebo1237​5
Posté le 29-10-2005 à 15:48:48  profilanswer
 

bonjour,  
 
Dû  à un souci de conversion entre utf8 et latin1, j'utilise la fonction
sprintf() dans mes requetes mysql.  
 
Tout se passe bien, sauf celle-ci :
 

Code :
  1. $requete = sprintf("SELECT * FROM Actes, Bibliographie
  2. WHERE id = idBiblio
  3. AND MotsClef LIKE '%s'
  4. AND (Resume LIKE '%s' AND Resume LIKE '%s')
  5. AND Nom_Auteur LIKE '%s'
  6. AND Auteur LIKE '%s'
  7. AND nompropre LIKE '%s'
  8. AND localite LIKE '%s'
  9. AND Contrat LIKE '%s'
  10. AND annee BETWEEN %d AND %d ORDER BY annee",
  11. mysql_real_escape_string($motcle),
  12. mysql_real_escape_string($resume),
  13. mysql_real_escape_string($resume),
  14. mysql_real_escape_string($nom_auteur),
  15. mysql_real_escape_string($auteur),
  16. mysql_real_escape_string($nompropre),
  17. mysql_real_escape_string($localite),
  18. mysql_real_escape_string($contrat),
  19. $anmin,
  20. $anmax);


 
Sans message d'erreur, il ne me retourne aucun résultat, alors que sans la fonciton mysql_real_escape_sting (), le résultat est bon.  
 
Merci de vos pistes de réflection sur le sujet !
 
Thiebo


Message édité par thiebo12375 le 29-10-2005 à 16:00:32
mood
Publicité
Posté le 29-10-2005 à 15:48:48  profilanswer
 

n°1234133
shakpana
des fois, j'me demande ...
Posté le 29-10-2005 à 16:08:43  profilanswer
 

tes signle quotes dans la requête sont superflus, mysql_real_escape_truc le fait si neccessaire ;)

n°1234162
thiebo1237​5
Posté le 29-10-2005 à 17:46:33  profilanswer
 

shakpana a écrit :

tes signle quotes dans la requête sont superflus, mysql_real_escape_truc le fait si neccessaire ;)


 
merci d'avoir répondu, mais....
 
tu en es certain parce que si je les enlève et que je fais echo $requete ;  
j'ai ceci comme requete :  
 
SELECT * FROM Actes, Bibliographie WHERE id = idBiblio AND MotsClef LIKE AND (Resume LIKE AND Resume LIKE ) AND Nom_Auteur LIKE AND Auteur LIKE AND nompropre LIKE AND localite LIKE AND Contrat LIKE AND annee BETWEEN 1000 AND 1350 ORDER BY annee
 
ce qui n'est pas bon parce qu'il manque... les single quotes.  
 
avec ceci comme code :
 

Code :
  1. $motcle = $_POST['motcle'];
  2. $anmin = $_POST['anmin'];
  3. $anmax = $_POST['anmax'];
  4. $nom_auteur = $_POST['nom_auteur'];
  5. $localite = $_POST['localite'];
  6. $nompropre = $_POST['nompropre'];
  7. $resume = $_POST['resume'];
  8. $ares = $_POST['ares'];
  9. $auteur = $_POST['auteur'];
  10. $contrat = $_POST['contrat'];
  11. $requete = sprintf("SELECT * FROM Actes, Bibliographie
  12. WHERE id = idBiblio
  13. AND MotsClef LIKE '%s'
  14. AND (Resume LIKE '%s' AND Resume LIKE '%s')
  15. AND Nom_Auteur LIKE '%s'
  16. AND Auteur LIKE '%s'
  17. AND nompropre LIKE '%s'
  18. AND localite LIKE '%s'
  19. AND Contrat LIKE '%s'
  20. AND annee BETWEEN %d AND %d ORDER BY annee",
  21. mysql_real_escape_string($motcle),
  22. mysql_real_escape_string($resume),
  23. mysql_real_escape_string($resume),
  24. mysql_real_escape_string($nom_auteur),
  25. mysql_real_escape_string($auteur),
  26. mysql_real_escape_string($nompropre),
  27. mysql_real_escape_string($localite),
  28. mysql_real_escape_string($contrat),
  29. $anmin,
  30. $anmax);
  31. echo $requete;


 
j'ai ceci comme requete :
 
SELECT * FROM Actes, Bibliographie WHERE id = idBiblio AND MotsClef LIKE '' AND (Resume LIKE '' AND Resume LIKE '') AND Nom_Auteur LIKE '' AND Auteur LIKE '' AND nompropre LIKE '' AND localite LIKE '' AND Contrat LIKE '' AND annee BETWEEN 1000 AND 1350 ORDER BY annee
 
Ce qui est exacte, sauf que.... cela ne retourne AUCUN resultat (alors que les tables sont pleines).  
 
d'ailleurs dans la documentation, c'est bien marqué avec les single quotes :
 
http://fr2.php.net/manual/fr/funct [...] string.php
 

n°1234200
shakpana
des fois, j'me demande ...
Posté le 29-10-2005 à 18:45:58  profilanswer
 

ok, je suis mais complètement à la mass, je suis désolé, en fait j'utilise une interface à mysql_real_truc qui me met automatiquement les quotes genre :  

Code :
  1. if (!is_numeric($value)) {
  2. $value = "'" . mysql_real_escape_string($value) . "'";
  3. }


et j'ai tellement l'habitude, que je suis allez trop vite
je merites au moins 3 claques ... excuses-moi, platement ...
 
sinon ton erreur ne viendrais pas de la requête LIKE '' ?
plutôt LIKE '%' ou '%searchword%'

Message cité 2 fois
Message édité par shakpana le 29-10-2005 à 18:48:01
n°1234204
thiebo1237​5
Posté le 29-10-2005 à 18:57:51  profilanswer
 

shakpana a écrit :

ok, je suis mais complètement à la mass, je suis désolé, en fait j'utilise une interface à mysql_real_truc qui me met automatiquement les quotes genre :  

Code :
  1. if (!is_numeric($value)) {
  2. $value = "'" . mysql_real_escape_string($value) . "'";
  3. }


et j'ai tellement l'habitude, que je suis allez trop vite
je merites au moins 3 claques ... excuses-moi, platement ...
 
sinon ton erreur ne viendrais pas de la requête LIKE '' ?
plutôt LIKE '%' ou '%searchword%'


 
 
Oui, c'est exactement ça mon problème. Reste à trouver comment mettre la fonction d'ajout du single quote dans mysql_real_escape_string... Je pense que je finirai par trouver.  
 
Juste pour que je ne travaille pas pour rien : on est bien d'accord que cette fonction résoudra mon problème d'encodage de mon script en utf8 et la connection mysql qui est en latin1 ?

n°1234211
sielfried
Posté le 29-10-2005 à 19:06:52  profilanswer
 

shakpana a écrit :

ok, je suis mais complètement à la mass, je suis désolé, en fait j'utilise une interface à mysql_real_truc qui me met automatiquement les quotes genre :  

Code :
  1. if (!is_numeric($value)) {
  2. $value = "'" . mysql_real_escape_string($value) . "'";
  3. }


et j'ai tellement l'habitude, que je suis allez trop vite


 
Ca vient de quote_smart filé dans la doc de mysql_real_escape_string ? Pour moi (et pas que pour moi d'ailleurs, c'est dit dans les commentaires il me semble), ce test ne sert à rien et est surtout dangereux : mysql_real_escape_string n'est pas suffisant en soi pour protéger des injections SQL, il faut aussi que la valeur soit entourée de quotes simples. Bref, inutile et faille de sécurité. Vaut mieux les rajouter dans tous les cas.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1234213
shakpana
des fois, j'me demande ...
Posté le 29-10-2005 à 19:10:58  profilanswer
 

thiebo12375 a écrit :

Oui, c'est exactement ça mon problème. Reste à trouver comment mettre la fonction d'ajout du single quote dans mysql_real_escape_string... Je pense que je finirai par trouver.


Perso, voilà, à peu près, à quoi ressemble mon interface à mysql_real_truc
 

Code :
  1. function my_real_escape($value) {
  2.   // Stripslashes
  3.   if (get_magic_quotes_gpc()) {
  4.     $value = stripslashes($value);
  5.   }
  6.   // Quotes
  7.   if (!is_numeric($value)) {
  8.     $value = "'" . mysql_real_escape_string($value) . "'";
  9.   }
  10.   return $value;
  11. }


thiebo12375 a écrit :

Juste pour que je ne travaille pas pour rien : on est bien d'accord que cette fonction résoudra mon problème d'encodage de mon script en utf8 et la connection mysql qui est en latin1 ?


ça je ne sais pas, il me semble que oui d'après d'autres posts ici-même, mais j'ai directement contourner le pb en passant tout en UTF8, si tu es sur du mysql 4+, pourquoi pas un SET NAMES, avec eventuellement un CONVERT USING ?

n°1234215
thiebo1237​5
Posté le 29-10-2005 à 19:11:53  profilanswer
 

Merci pour vos réponses. J'ai réussi à faire fonctionner en faisant :
 
$motcle = "'%".mysql_real_escape_string($_POST['motcle'])."%'";
 
ce qui ne répond pas à mon problème. Mes scripts sont en utf8 et la connection à mysql en latin1. Comment je dois convertir ? J'utilise utf8_encode() pour afficher correctement les données que je suis allé chercher dans mysql et ça marche. Mais quid si le visiteur du site fait une recherche ? La recherche est entrée en utf8 et la connection à mysql en latin1, donc si la recherche comporte un ê (par exemple), mysql ne trouvera aucun résultat !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  sprintf ()

 

Sujets relatifs
[MIPS] Recoder sprintfsprintf en c++ ?
Quelle est la difference entre un "printf" et un "sprintf" ?aide commande...fprintf fscanf sscanf sprintf ???????????
équivalent d'un sprintf (maChaine, "%08ld", monLong); en javaPHP - prereg avec sprintf ?
[C] Problème à deux francs avec sprintf 
Plus de sujets relatifs à : sprintf ()


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)