valeurs avec slash (\'), comment l'enlever lors de echo() ?

valeurs avec slash (\'), comment l'enlever lors de echo() ? - PHP - Programmation

Marsh Posté le 23-10-2006 à 05:34:20    

Même si le titre peut porter à confusion, le problème est simple, je veux afficher le 10 derniers message de mon forum sur ma homepage, jusque la, pas de problème, à l'endroit ou sa se complique, c'est que mes valeur du titre de mes messages du forum contiennent de \ lorsqu'il y a des ' ou de " dans le titre, donc, lorsque je fais le echo sur ma homepage, le titre du message s'affiche, mais avec les \ avant le ' et ", comment le enlever à l'affichage seulement.
 
Si sa peut aider, voici mon appel:

Code :
  1. <?
  2.   $req = mysql_query("select id, titre from forum order by id desc limit 0,10" ) or die( 'Erreur '.$req.'<br>'.mysql_error() );
  3. while ( $row = mysql_fetch_assoc( $req ) )
  4. {
  5. echo "$row[id] - $row[titre]<br>";
  6. };
  7. ?>


 
Ce qui me donne comme affiche quelque chose du genre:
 
24 - Re: Testing :-)
23 - Un dernier test, c\'est normal
22 - Un dernier test, c\'est normal
21 - Un dernier test, c\'est normal
20 - Encore des tests :-D
19 - Encore des tests :-D
18 - ,mn,n
17 - ,mn,n
16 - Re: Testing :-)
15 - Re: Testing :-)
 
Observez le 23,22 et 21 ... voila le problème. Je sais que l'on ajoute les \ avec la fonction addslashes, mais pour enlever ??
 
Merci à l'avance


---------------
www.failqc.com : FailBlog québécois
Reply

Marsh Posté le 23-10-2006 à 05:34:20   

Reply

Marsh Posté le 23-10-2006 à 05:59:07    

ok, j'ai trouvé la fonction stripslashes dans la doc php, mais avec le code que je vous ai donné, je ne sais pas comment m'en servir, j'en aurais besoin sois pour le echo au complet, ou seulement pour le $row[titre], j'ai essayer plusieurs choses, on me renvoi une erreur à chque fois ...
 
comment faire pour que la fonction stripslashes fonctionne dans le code que je vous ai fourni ???


---------------
www.failqc.com : FailBlog québécois
Reply

Marsh Posté le 23-10-2006 à 10:22:41    

Ca vient d'un vilain paramètre du php.ini qui t'échappes certains caractère dans la base :)
 
Mets magic_quotes à off, modifie ta base, et traites ça autrement ;)

Reply

Marsh Posté le 23-10-2006 à 10:39:50    

Ca peut aussi venir de magic_quotes_runtime, mais très rare

Reply

Marsh Posté le 23-10-2006 à 16:30:19    

je suis en local, mais une fois sur mon hébergeur, probablement que lui, la fonction magicquotes, il le na désactive pas ... Que dois-je donc faire ??


---------------
www.failqc.com : FailBlog québécois
Reply

Marsh Posté le 23-10-2006 à 21:42:28    

Salut,
Tu peux savoir l'utilisation ou non des magic quotes avec la fonction get_magic_quotes_gpc.
Par exemple dans ton cas:

Code :
  1. if (get_magic_quotes_gpc()){
  2.    $row['titre'] = stripslashes( $row['titre'] );
  3. }


 
edit:je me rends compte que la suite est hors sujet mais je la laisse quand même :d.
 
Tu dois savoir que ca pose un probleme de sécurité si tu ne vérifies pas les variables provenant de l'utilisateur avant de les passer à mysql.
Regarde ici pour une bonne pratique pour "quoter" tes variables.
Le code qu'ils proposent:

Code :
  1. <?php
  2. // Protège la variable
  3. function quote_smart($value)
  4. {
  5.    // Stripslashes
  6.    if (get_magic_quotes_gpc()) {
  7.      $value = stripslashes($value);
  8.    }
  9.    // Protection si ce n'est pas une valeur numérique ou une chaîne numérique
  10.    if (!is_numeric($value)) {
  11.      $value = "'" . mysql_real_escape_string($value) . "'";
  12.    }
  13.    return $value;
  14. }
  15. // Connexion
  16. $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
  17. OR die(mysql_error());
  18. // Fabrication d'une requête sécurisée
  19. $query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
  20. quote_smart($_POST['username']),
  21. quote_smart($_POST['password']));
  22. mysql_query($query);
  23. ?>


Message édité par sigmar_ le 23-10-2006 à 22:52:10

---------------
programming cookbook
Reply

Marsh Posté le 23-10-2006 à 22:02:03    

J'Ai essayé ta premiere portion de code, les slashes restent ... sa ne fonctionne pas, peut être je les ai mal placées. Où dois-je le mettre dans ce code poru que cela fonctionne:
 

Code :
  1. <?
  2.             $req = mysql_query("select id, titre from forum order by id desc limit 0,10" ) or die( 'Erreur '.$req.'<br>'.mysql_error() );
  3.      
  4.       while ( $row = mysql_fetch_assoc( $req ) )
  5.       {
  6.       echo "$row[id] - $row[titre]<br>";
  7.       };
  8.       ?>


Message édité par seozus le 23-10-2006 à 22:02:39

---------------
www.failqc.com : FailBlog québécois
Reply

Marsh Posté le 23-10-2006 à 22:11:37    

Juste avant l'echo, mais essaie

Code :
  1. if (get_magic_quotes_gpc()){ $row['titre'] = stripslashes( $row['titre'] ); }
  2. echo "$row[id] - $row[titre]<br>";


Maintenant je ne sais pas quel forum tu utilises, c'est peut-être lui aussi qui ajoute les quotes..
Essaie ca dans ce cas:

Code :
  1. echo $row['id'].' - '.stripslashes($row['titre']).'<br />';

Reply

Marsh Posté le 23-10-2006 à 22:25:26    

Sa fonctionne!!!!! Voici mon code final:

Code :
  1. <?
  2.   $req = mysql_query("select id, titre, nom from CSForum order by id desc limit 0,5" ) or die( 'Erreur '.$req.'<br>'.mysql_error() );
  3. // Affiche : Avez-vous l'oreille dure?
  4. while ( $row = mysql_fetch_assoc( $req ) )
  5. {
  6. echo '<a href=read.php?id='.$row[id].'>'.stripslashes($row['titre']).'</a> (par <i>'.$row[nom].'</i> )<br>';
  7. };
  8. ?>


 
Je te dois un infini merci, tu es excellent, ton aide a vraiment été utile! Merci d'avoir pris le temps, c'est super apprécié!
 
Es-tu dans un projet? Car si tu veux, je peux te proposer de joindre le mien, si tu veux savoir ce que c'est, MP moi, le principe et les attentes sont immenses, tu verras!
 
Encore merci! :D


---------------
www.failqc.com : FailBlog québécois
Reply

Marsh Posté le 23-10-2006 à 22:27:03    

Quand tu sors une variable directement de la BDD , je te conseille de faire un stripslashes puis un htmlspecialchars($tavar, ENT_QUOTES) afin de pallier au problème des failles XSS possibles.

Reply

Marsh Posté le 23-10-2006 à 22:27:03   

Reply

Marsh Posté le 24-10-2006 à 03:50:43    

Plutot que faire un truc à la cradingue, t'auras pas un petit phpinfo() à nous balancer ;)

Reply

Marsh Posté le 24-10-2006 à 04:52:58    

C'est résolu, héhé! :)


---------------
www.failqc.com : FailBlog québécois
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed