Pb balises 'br' et '\' insertion BDD php

Résolu
Bonjour à tous,

Voilà donc mon problème assez génant:
J'ai plusieurs champs texte qui permettent de mettre à jour une base de données sous php myadmin. Les données se mettent bien à jour mais à chaque mise à jour des balises <br> et des \ devant les accents s'ajoutent ce qui rend le texte vite illisible:(

Voici donc un extrait de mon code, j'aimerai donc que les balises <br> et \ disparaissent des champs texte.
Merci :)

[code]
<form method="post" action="accueil.php">
<?php
if(isset($_POST['maj'])){
// on se connecte à MySQL
$base = mysql_connect ('chaine connexion');
// requete de MAJ
$sql = 'UPDATE accueil SET titre_accueil=\''.mysql_escape_string($_POST['titre']).'\' , texte_accueil=\''.mysql_escape_string($_POST['text']).'\' WHERE id_accueil= 1';
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
echo '<font color="green"><b>Page modifiée avec succès!</b></font>';
}
else{
$erreur = '<font color="red"><b>Probleme!!!.</b></font>';
}
?>

<?php
// on se connecte à MySQL
$base = mysql_connect ('chaine connexion');
// on crée la requête SQL
$sql = 'SELECT * FROM accueil';
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
{
// on affiche les informations de l'enregistrement en cours
echo '<textarea name="titre" cols="100" rows="1" width="300">'.$data['titre_accueil'].'</textarea><br />';
echo nl2br ('<textarea name="text" id="text" cols="100" rows="10" width="300" >'.$data['texte_accueil'].'</textarea>');
}
?>
/code
Configuration: Windows Vista
Internet Explorer 7.0
Mozilla Firefox 3.0
Google Chrome

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour

    tu as 2 problèmes distincts.

    D'abord, les balise <br>, c'est toi qui les ajoute à l'affichage avec le fonction nl2br. Elle convient pour afficher du HTML, pas le text d'un TEXTAREA. Enlève cette fonction.
    Ensuite les \ avant les apostrophes. Puisque tu utilises correctement mysql_escape_string pour enregistrer tes valeurs, c'est qu'il doivent réellement être dans $_POST. Et s'ils sont dans $_POST, c'est probablement que dans ta configuration tu as magic_quotes_gpc actif. Pour récupérer correctement une valeur de POST (ou GET ou COOKIE) dans tous les cas, il faut utiliser ou non un stripslashes selon la valeur de magic_quotes_gpc. Personnellement, j'utilise une fonction pour ça :

    function RecupChaine($chaine) {
    if (get_magic_quotes_gpc()==1) return stripslashes($chaine); // il y avait magic
    return $chaine; // il n'y avait pas magic
    }

    Dans ma requête pour enregistrer, je mets mysql_real_escape(RecupChaine($_POST['champ']))

    Note que les textes déjà entrés dans la base peuvent être corrigés en les relisant, en faisant un stripslashes puis un update
    1. Merci beaucoup Toto,
      Cependant, il n'accepte pas le nom de ma fonction lors de l'appel :s

      Fatal error: Call to undefined function mysql_real_escape()

      Une idée?
  2. C'est Ok çà marche ;)
    Merci

    voilà, il manquait String ;)
    mysql_real_escape_string(RecupChaine($_POST['titre']));
    1. C lorsque tu fais la requete UPDATE qu'il insert les br et / ????

      1. oui c'est lors de l'update qu'il les rajoute.
        J'ai remplacé nl2br par

        echo str_replace("<br>","\n",('<textarea name="text" id="text" cols="100" rows="10" width="300" >'.$data['texte_accueil'].'</textarea>'));

        Maintenant les br ne s'affiche plus mais il y a toujours le problème des ' qui se voit rajouté un \ devant eux :s