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

[Résolu/Fermé]
Signaler
Messages postés
7
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
19 février 2009
-
Messages postés
7
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
19 février 2009
-
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

4 réponses

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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Messages postés
7
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
19 février 2009
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?
Messages postés
7
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
19 février 2009
1
C'est Ok çà marche ;)
Merci

voilà, il manquait String ;)
mysql_real_escape_string(RecupChaine($_POST['titre']));
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Messages postés
547
Date d'inscription
vendredi 23 janvier 2009
Statut
Membre
Dernière intervention
19 février 2009
102
C lorsque tu fais la requete UPDATE qu'il insert les br et / ????

Messages postés
7
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
19 février 2009
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