Sujet : [PHP] Retour à la ligne

Bonsoir,
Je suis en train de modifier le livre d'or pour mon site, mais j'ai un problème, dans le code j'ai mis un nl2br() pour qu'il me remplace les retours à la ligne par des <br /> ou des <br> sauf qu'il me les transforme en \r\n.
expemple: Test\r\nTest\r\nTest\r\n
Est ce que quelqu'un aurai une idée pour remedier à ce problème.
Merci d'avance.

Everything that has a begining has an end.

2

Re: [PHP] Retour à la ligne

Bonsoir,

Ton nl2br() remplace tes \n en \r\n ?

lesCigales.ORG sysadm1n
L'hébergeur qui sent bon la lavande - Un control panel qu'il est chouette - Viendez nous parler!
"All that is necessary for evil to triumph is for good men to do nothing."

3

Re: [PHP] Retour à la ligne

Effectivement, c'est bizarre.

Tu n'as pas une ligne (ou une fonction) éxecutée après le traitement de ton message par nl2br() ?

Par exemple :

$message=nl2br($message);

$message=fonction_de_filtrage_quelconque($message);

où la fonction fonction_de_filtrage_quelconque contiendrait du code afin de remplacer les <br> en \r\n...

Sinon, en remplacement de nl2br(), tu peux essayer :

$message=preg_replace('/\r?\n/','<br>',$message);

Mais bon... nl2br() le fait aussi bien et sans aucun doute plus rapidement.

Re: [PHP] Retour à la ligne

Bonjour,
moi je fais comme ca pour enregistrer les données

$insert="insert into livredor (`text`) VALUES ('".$_POST['text']."')";

et pour les afficher
echo htmlspecialchars(stripslashes($res[text]));

5 Dernière modification par Eric2A (30-11-2009 14:36:59)

Re: [PHP] Retour à la ligne

Il faut toujours veiller à utiliser la fonction mysql_real_escape_string avant insertion dans ta table infobarquee.
Ceci afin d'éviter les injections SQL.

<?php
$message=(isset($_POST['text']))?trim(rawurldecode((string)$_POST['text'])):'';
if($message!==''){
    if(@get_magic_quotes_gpc()===1)$message=stripslashes($message);
    $insert="INSERT INTO `livredor` (`text`) VALUES ('".mysql_real_escape_string($message)."')";
}
?>

mysql_real_escape_string pour la base de données ET htmlspecialchars pour l'affichage.

Re: [PHP] Retour à la ligne

je n'ais pas mis toutes les lignes non plus, cela va de soit que mysql_real_escape_string doit être mis wink

7

Re: [PHP] Retour à la ligne

Oui Infobarquee smile Je m'en doutais un peu (en voyant l'absence d'un champ pseudo dans ta requête).

Mais j'ai quand-même posté... Vu les risques encourus.

8

Re: [PHP] Retour à la ligne

Oui très dangereux de conseiller l'insertion directe des données utilisateurs infobarquee, pas bien ! smile

lesCigales.ORG sysadm1n
L'hébergeur qui sent bon la lavande - Un control panel qu'il est chouette - Viendez nous parler!
"All that is necessary for evil to triumph is for good men to do nothing."

Re: [PHP] Retour à la ligne

Mea culpa, pfff
la prochaine fois je mettrais tout mon script, et puis quoi encore? smile wink

on demande pour le retour chariot, pas pour la sécurité, non? wink

10

Re: [PHP] Retour à la ligne

Oui, exactement, alors pourquoi parler de l'insertion dans une base de données ? smile

lesCigales.ORG sysadm1n
L'hébergeur qui sent bon la lavande - Un control panel qu'il est chouette - Viendez nous parler!
"All that is necessary for evil to triumph is for good men to do nothing."

11

Re: [PHP] Retour à la ligne

Pour répondre à eric, enfait je veux que dans la base de donné mysql il enregistre les enter sous la forme <br> pour que quand je fasse un petit echo en bas de la page il me mette les retours à la ligne. hors mon nl2br() me les enregistres sous la forme \r\n et donc le html ne les transforme pas en retour à la ligne.

Mon php (partiel):

<?php
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
$message = nl2br($message);
?>

Everything that has a begining has an end.

12

Re: [PHP] Retour à la ligne

Infobarquee et Toad, je vais vous faire encore rire...

Mattrix, je ne vois pas d'où peux venir ton problême, vu que ton code est bon.

Désolé !

La prochaine fois, je participerais quand je serais sûr d'avoir la solution.

@ Infobarquee :
J'éspère que tu n'as pas pris mal que je parle de sécurité après ton post.

Re: [PHP] Retour à la ligne

toad a écrit:

Oui, exactement, alors pourquoi parler de l'insertion dans une base de données ? smile

Parce que je sais très bien que tu aurais relevé la chose wink ou qu'elle aurait été demandé.

@ Eric2A
Non je ne le prends pas mal du tout

voilà mon code que j'ai adapté pour ici, il vaut ce qu'il vaut

if ($_POST) {
                 foreach ($_POST as $name => $value) {
                $_POST[$name]=mysql_escape_string($value);
                }
$err=check();
               if($err) {
                           echo "<font color='red'>";
                          for ($i=0;$i<sizeof($err);$i++) {
                         echo $err[$i]."<br>";
              }
 
             }
else {
             $query="INSERT INTO `livredor` (`date`,`text`) VALUES (NOW(),'".$_POST['text']."')";
              mysql_query($query) or die(mysql_error());
             echo "<meta http-equiv='refresh' content='0; url=livredor.php'>";
              exit();
            }
}


function check() {
global $path,$id;
$err=Array();


                         if (!$_POST['text']) $err[sizeof($err)]="Veuillez entrer un texte";

                          return $err;
                          }

14

Re: [PHP] Retour à la ligne

foreach ($_POST as $name => $value) {
        $_POST[$name]=mysql_escape_string($value);
}

Simple, efficace et... sûre.

15

Re: [PHP] Retour à la ligne

Je ne t'en veux pas d'avoir poster apres mon post.
Mais il ne m'affiche toujours pas les retours à la ligne. Essayez par vous même : http://mtdev.lescigales.org/livredor.php  (vous pouvez faire des test je les supprimerais avec le mysql.)

Everything that has a begining has an end.

16

Re: [PHP] Retour à la ligne

Je viens de faire des tests et c'est mysql_real_escape_string() qui escape également les \n, tu peux soit l'appeler au dernier moment (comme il se doit), avant de faire une injection sql et ca marchera, soit laisser tel quel et faire la conversion lors de l'affichage:

Première méthode:

$message = nl2br(htmlspecialchars($_POST['message']));

Seconde méthode:

echo '<p><i class="date">Le ' . $donnees['date'] . '</i><strong> ' . $donnees['pse\
udo'
] . '</strong> a écrit :<br />' . nl2br($donnees['message']) . '</p>';
lesCigales.ORG sysadm1n
L'hébergeur qui sent bon la lavande - Un control panel qu'il est chouette - Viendez nous parler!
"All that is necessary for evil to triumph is for good men to do nothing."

Re: [PHP] Retour à la ligne

bonjour,
tu pourrais montrer ton code et dire aussi le type de champs dans ta bdd.

Toad m'a devancé smile

18

Re: [PHP] Retour à la ligne

Pour les curieux, voilà la liste des caractères échappés par mysql:

switch (*from) {
    case 0:                             /* Must be escaped for 'mysql' */
      escape= '0';
      break;
    case '\n':                          /* Must be escaped for logs */
      escape= 'n';
      break;
    case '\r':
      escape= 'r';
      break;
    case '\\':
      escape= '
\\';
      break;
    case '
\'':
      escape= '\'';
      break;
    case '"':                           /* Better safe than sorry */
      escape= '"';
      break;
    case '\032':                        /* This gives problems on Win32 */
      escape= 'Z';
      break;
    }
lesCigales.ORG sysadm1n
L'hébergeur qui sent bon la lavande - Un control panel qu'il est chouette - Viendez nous parler!
"All that is necessary for evil to triumph is for good men to do nothing."

19

Re: [PHP] Retour à la ligne

Pour toad: Tu voudrais dire que je doit mettre le nl2br avant le mysql_real_escape_.. ?
ex: $message = mysql_real_escape_string(nl2br(htmlspecialchars($_POST['message'])));

Pour Infobarquee:

if (isset($_POST['pseudo']) AND isset($_POST['message']))
{

$heur = date('H') + 1;
$date = date('d/m/y à ') . $heur . date(':i');
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
$message = nl2br($message);
mysql_query("INSERT INTO livredor VALUES('', '" . $pseudo . "', '" . $message . "', '" . $date . "')");

}
Everything that has a begining has an end.

Re: [PHP] Retour à la ligne

essaye ca
$heur = date('H') + 1;
$date = date('d/m/y à ') . $heur . date(':i');
$pseudo = mysql_real_escape_string($_POST['pseudo']);
$message = mysql_real_escape_string($_POST['message']);
mysql_query("INSERT INTO livredor VALUES('', '" . $pseudo . "', '" . $message . "', '" . $date . "')");

}



et pour les afficher
echo htmlspecialchars(stripslashes[message]);

21

Re: [PHP] Retour à la ligne

C'est bon, problème résolu, Toad avait raison c'est ce mysql_real_escape_ le fautif. tongue
Voilà mon code final:

if (isset($_POST['pseudo']) AND isset($_POST['message']))
{

$heur = date('H') + 1;
$date = date('d/m/y à ') . $heur . date(':i');
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$message = mysql_real_escape_string(nl2br(htmlspecialchars($_POST['message'])));
mysql_query("INSERT INTO livredor VALUES('', '" . $pseudo . "', '" . $message . "', '" . $date . "')");

}

Merci à tous de m'avoir aidé! Maintenant j'ai un livre d'or sans bug!!
J'espère que cette erreur bête pourra aider certains qui ont le même problème.
Bonne fin de soirée à tous!! smile

Everything that has a begining has an end.

22

Re: [PHP] Retour à la ligne

Mais bien sûr que toad avait raison, qui en doutait ? smile

lesCigales.ORG sysadm1n
L'hébergeur qui sent bon la lavande - Un control panel qu'il est chouette - Viendez nous parler!
"All that is necessary for evil to triumph is for good men to do nothing."

23

Re: [PHP] Retour à la ligne

Hum .... ^^
- Qui moi? Mes chevilles? ^^ Nan.... Jamais!! smile

Everything that has a begining has an end.