Page 1 sur 1

Wall code

Posté : 25 oct. 2010, 16:46
par Fanaxity
Bonjour !
Je créé un petit script qui a pour but de permettre à un utilisateur d'enregistrer un morceau de code dans ma database.

Le problème c'est de pouvoir restituer le code proprement, en respectant les sauts de lignes, sans qu'il y ait un ajout de "\" devant tous les caractères spéciaux.

Voici comment le code est enregistré dans la db :
$query = sprintf("INSERT INTO testable(name, title, snippet) VALUES('%s', '%s', '%s')",  mysql_real_escape_string($given), mysql_real_escape_string($title), mysql_real_escape_string(htmlspecialchars($code)));
Merci d'avance pour vos suggestions :)

Re: Wall code

Posté : 25 oct. 2010, 16:50
par stealth35
hello,
faut enlever le htmlspecialchars, c'est au moment de l'affichage qui faut le faire :wink:

Re: Wall code

Posté : 25 oct. 2010, 16:57
par Fanaxity
Ca ne marche toujours pas :(

J'ai enlever le htmlspecialchars()
et je l'ai mis au moment de l'affichage
$title = $_GET["title"]; 
$query = sprintf("SELECT snippet FROM testable WHERE title = '%s'", mysql_real_escape_string($title));
$result = mysql_query($query) or die('Error  : ' . mysql_error());
$data = mysql_fetch_assoc($result);

include_once 'high/geshi.php'; 
//// Define some source to highlight, a language to use
// and the path to the language files//
 $source = htmlspecialchars($data['snippet']);
 $language = 'php';
 //
// Create a GeSHi object//
 $geshi = new GeSHi($source, $language);
 $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 37);

Re: Wall code

Posté : 25 oct. 2010, 16:58
par stealth35
pour les sauts de lignes il faut rajouter nl2br, sinon ca se règle en CSS

Re: Wall code

Posté : 25 oct. 2010, 17:08
par Fanaxity
alors, si j'utilise nl2br pour l'affichage voilà ce qu'il m'affiche
      <?php<br />
      echo(\'test\');<br />
      echo \'prout\';<br />
      if($test = 2)<br />
      {<br />
      // ici le resultat<br />
     }<br />
     ?>
Alors que le code send à la database est :
<?php
echo('test');
echo 'prout';
if($test=2)
{
}
?>

Re: Wall code

Posté : 25 oct. 2010, 17:25
par stealth35
et dans ta base le code est comment ?

Re: Wall code

Posté : 25 oct. 2010, 17:33
par Fanaxity
Alors voilà la requête qui enregistre dans la bdd :
$code = $_POST['code'];

$query = sprintf("INSERT INTO gawen(name, title, snippet) VALUES('%s', '%s', '%s')",  mysql_real_escape_string($given), mysql_real_escape_string($title), mysql_real_escape_string($code));
et dans la bdd, il y a :
<?php
echo(\'test\');
echo \'<br>va te faire foutre\';
if($test = 2)
{
// ici le resultat
}
Donc l'affichage avec nl2br() et htmlentities() altère juste les <? > et rajoute des <br> pour les sauts de lignes (donc je vais surement supprimer ça).

En contre partie, les "\" qui sont rajoutés proviennent de l'enregistrement dans la bdd et pas dans l'affichage (vu qu'ils y sont présents)

Re: Wall code

Posté : 25 oct. 2010, 17:36
par stealth35
les \ c'est du au magic_quote qu'il faut supprimer