Wall code

Fanaxity
Invité n'ayant pas de compte PHPfrance

25 oct. 2010, 16:46

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 :)

ViPHP
ViPHP | 5462 Messages

25 oct. 2010, 16:50

hello,
faut enlever le htmlspecialchars, c'est au moment de l'affichage qui faut le faire :wink:

Fanaxity
Invité n'ayant pas de compte PHPfrance

25 oct. 2010, 16:57

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);

ViPHP
ViPHP | 5462 Messages

25 oct. 2010, 16:58

pour les sauts de lignes il faut rajouter nl2br, sinon ca se règle en CSS

Fanaxity
Invité n'ayant pas de compte PHPfrance

25 oct. 2010, 17:08

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)
{
}
?>

ViPHP
ViPHP | 5462 Messages

25 oct. 2010, 17:25

et dans ta base le code est comment ?

Fanaxity
Invité n'ayant pas de compte PHPfrance

25 oct. 2010, 17:33

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)

ViPHP
ViPHP | 5462 Messages

25 oct. 2010, 17:36

les \ c'est du au magic_quote qu'il faut supprimer