strip_tags intempestif !

Eléphanteau du PHP | 20 Messages

15 mai 2008, 21:12

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 !
Je changerais bien de boite : marre d'Atos-Origin !

Mammouth du PHP | 19672 Messages

15 mai 2008, 21:18

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 20 Messages

15 mai 2008, 21:31

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);
}
Je changerais bien de boite : marre d'Atos-Origin !

Mammouth du PHP | 19672 Messages

15 mai 2008, 21:42

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 :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 20 Messages

15 mai 2008, 21:52

Je vais essayer mais à mettre sur le site distant ça va me prendre un peu de temps ...
Modifié en dernier par Lamy le 15 mai 2008, 22:22, modifié 2 fois.
Je changerais bien de boite : marre d'Atos-Origin !

Mammouth du PHP | 19672 Messages

15 mai 2008, 22:12

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 ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 20 Messages

15 mai 2008, 22:18

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 !
Je changerais bien de boite : marre d'Atos-Origin !

Mammouth du PHP | 19672 Messages

15 mai 2008, 22:29

ça sent le doublon entre magic_quotes et add_slashes()... vérifie donc la configuration de ton serveur distant...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 20 Messages

15 mai 2008, 22:33

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 ...
Je changerais bien de boite : marre d'Atos-Origin !

Mammouth du PHP | 19672 Messages

15 mai 2008, 22:46

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 ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 20 Messages

16 mai 2008, 09:32

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 !
Je changerais bien de boite : marre d'Atos-Origin !

Mammouth du PHP | 19672 Messages

16 mai 2008, 09:58

Tu connais htmlentities() et html_entity_decode() :?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 422 Messages

16 mai 2008, 10:07

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.

Eléphanteau du PHP | 20 Messages

16 mai 2008, 12:09

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 ...
Je changerais bien de boite : marre d'Atos-Origin !