Page 1 sur 1
strip_tags intempestif !
Posté : 15 mai 2008, 21:12
par Lamy
Bonjour, j'ai développé une partie (protégée) de mon site avec pour but sa maintenance distante par quelques personnes habilitées.
Notamment : je voudrais avoir la possibilité de saisir et modifier une rubrique "actualité" dans laquelle je veux pouvoir mettre des balises <I>, <U> et <A>, etc ... pour que l'affichage des lignes après requête donne un rendu italique, souligné, lien etc ...
Pour cela j'ai bien ommis volontairement d'utiliser l'instruction "strip_tags" que j'emploie pour la prise en compte des saisies situées sur les parties non protégées, en local tout marche à merveille mais une fois sur le site distant les balises en question sont systématiquement retirées et ne sont pas stockées en base, pourquoi cette différence ? Y aurait-il des paramètres (genre magic_quotes) à définir différement sur le site distant ?
Merci de me donner un coup de main !
Posté : 15 mai 2008, 21:18
par Cyrano
Sans voir la moindre ligne du code, ça va être difficile. Les directives sur les magic_quotes n'influenceront pas la présence de balises HTML, donc le problème est ailleurs... aurais-tu quelque part dans ton code un strip_tags() intempestif qui s'intercalerait entre ton formulaire et l'enregistrement ?
Posté : 15 mai 2008, 21:31
par Lamy
Non je ne crois pas : voici mon code : 2 fonctions sont concernées : le problème se pose pour le champ "message" bien sûr : le champ "titre" est laissé exprès ...
function ajouter_actualites()
{
$date = date("d-m-Y");
$titre = trim($_POST['titre']);
// interdiction du html avec strip_tags
$titre = strip_tags(addslashes($titre));
$message = addslashes($_POST['message']);
$sql = "INSERT INTO actualites VALUES ('','".$date."','".$titre."','".$message."')";
mysql_query($sql);
}
// La fonction de modification d'une actu
// les actualités restantes après suppression.
function modifier_actualites()
{
$date = date("d-m-Y");
$titre = trim($_POST['titre']);
$titre = strip_tags(addslashes($titre));
$message = addslashes($_POST['message']);
$sql = "UPDATE ACTUALITES SET TITRE = '".$titre."', MESSAGE = '".$message."' WHERE ID = '".$_POST['id']."'";
mysql_query($sql);
}
Posté : 15 mai 2008, 21:42
par Cyrano
Vérifie donc la nature réelle de tes requêtes en les faisant afficher avant exécution, un simple echo($sql); fera l'affaire

Posté : 15 mai 2008, 21:52
par Lamy
Je vais essayer mais à mettre sur le site distant ça va me prendre un peu de temps ...
Posté : 15 mai 2008, 22:12
par Cyrano
Prends ton temps, de toutes façons pour moi j'ai mon quotat pour ce soir, je vais aller dormir, je bosse demain.
En tout état de cause : tu as affaire à des machines qui ne comprennent qu'une seule chose : la logique

Posté : 15 mai 2008, 22:18
par Lamy
Voila : c'est tres curieux, j'obtiens sur le site distant :
UPDATE ACTUALITES SET TITRE = 'Conférence', MESSAGE = 'Le 2 Juin 2008 se tiendra à Paris une conférence donnée par Patrick Guibal. Chargé de mission aux musées d\\\'Ile-de-France il a été commissaire d\\\'exposition.
Avec :
- Des triples "\"
- Le mot
Paris et non <I>Paris</I>
Sur le site local :
UPDATE ACTUALITES SET TITRE = 'Conférence', MESSAGE = 'Le 2 Juin 2008 se tiendra à Paris une conférence donnée par Patrick Guibal. Chargé de mission aux musées d\'Ile-de-France il a été commissaire d\'exposition.
C'est à dire la même chose mais avec des simples "\"
Mais les données sauvegardées en bases sont différentes :
- En site distant : les balises ne sont pas sauvegardées : "...se tiendra à Paris une..."
- En site local : les balises sont sauvegardées : "...se tiendra à <I>Paris</I> une..."
Bref : ça ne va pas !
Posté : 15 mai 2008, 22:29
par Cyrano
ça sent le doublon entre magic_quotes et add_slashes()... vérifie donc la configuration de ton serveur distant...
Posté : 15 mai 2008, 22:33
par Lamy
J'ai effectivement
magic_quotes_gpc = On
les autres à off, mais j'ai reproduit la même config en local ...
De toutes façons : ça marche pour les ', mon souci c'est les balises ...
Posté : 15 mai 2008, 22:46
par Cyrano
Dans tes exemples de requêtes, je ne vois aucune balise HTML : donc, soit elles ont sauté avant, soit elles n'ont jamais existé....
Allez, bonne nuit, je suis plus là pour ce soir

Posté : 16 mai 2008, 09:32
par Lamy
Dans mes exemples de requêtes : les balises était saisies autours du mot Paris pour le mettre en italiques, en local les balises sont conservées alors qu'en distant elles ne le sont pas.
A l'affichage, l'instruction "echo" envoie les balises à HTML elles sont donc interprétées normal qu'on ne les voie pas, mais in en voie l'effet : Paris est en italiques ...
Non : je ne comprend pas !
Posté : 16 mai 2008, 09:58
par Cyrano
Tu connais htmlentities() et html_entity_decode()

Posté : 16 mai 2008, 10:07
par caroube
Visiblement, le $_POST contient bien les balises, mais c'est au niveau de la base de données qu'elles ne sont pas enregistrées.
Essaye en interactif avec phpmyadmin d'insérer des trucs simples (juste un tag "<i>" par exemple ou "<i>abc</i>") et voit ce que ça donne.
Posté : 16 mai 2008, 12:09
par Lamy
Par insertion forcée dans la base par script ça marche.
C'est pour l'instant comme ça que je mets à jour ma base : en saisissant les données en local, en exportant un script et en l'important sous phpmyadmin ...