[PHP/MySQL/xhtml]Balise input de type hidden
Résolu
remi13131
Messages postés
35
Date d'inscription
Statut
Membre
Dernière intervention
-
remi13131 Messages postés 35 Date d'inscription Statut Membre Dernière intervention -
remi13131 Messages postés 35 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai profité que ce soit les grandes vacances pour utiliser mon temps utilement, et j'ai donc étudier en autodidacte les bases de la combinaison gagnante xhtml / CSS / PHP / MySQL.
Je travaille actuellement sur un site-CV personnel, qui n'est pour le moment pas en ligne, mais qui reprend le même principe que les divers sites d'élèves ingénieur de ma future école (rentrée le 01 septembre :p) que j'ai pu rencontrer. (Si ça vous interresse, mon école est l'IG2I de Lens)
Or je souhaiterais réaliser une interface d'administration pour ce site, mais je ne veux pas d'une solution prémâchée dasn un tutoriel ultrcomplet. Je voudrais trouver une solution viable et totalement opérationnelle par moi même.
J'ai donc des problèmes... Pour la fonction de modification des "articles" sur mon site. Le principe que j'ai employé n'est pas forcément le plus simple :
1) on choisit le nom billet que l'on veut modifier dans une liste déroulante.
2) ce nom de billet est récupéré sur une page de traitement, une notification de confirmation "Vous allez modifier le billet tel nom de telle section" avec un bouton de formulaire, ce qui permet de transmettre en POST les autres info (contenu, id, section, etc.) par le biais d'un formulaire avec uniquement des input cachés contenant les infos sur le billet.
3) renvoyer ces infos sur la première page qui affiche alors un formulaire avec zone de titre, zone de contenu, et liste déroulante de section avec les infos du billet à modifier pré-inscrites.
4) les infos moddifiées sont renvoyées à la page de traitement qui update la bdd.
Or le probléme est à l'étape 2.
Puisque dans les billet que j'écris, je met du xhtml pour mettre en forme (balises de type br / ou alors des liens ou autre) j'ai des souci dans ma zone de formulaire cachée contenant le contenu du billet. Car l'attribut value se ferme dès qu'il rencontre une guillemet (logique). Je pourrai mettre htmlspecialchars mais alors toutes mes balises ne serviraient plus puisqu'elle seraient inactives.
Voilà, j'éspère avoir été assez clair pour que vous m'aidiez, et j'en profite pour remercier une nouvelle fois la communauté CCM vraiment SUPER !!
Merci d'avance !
Rémi
J'ai profité que ce soit les grandes vacances pour utiliser mon temps utilement, et j'ai donc étudier en autodidacte les bases de la combinaison gagnante xhtml / CSS / PHP / MySQL.
Je travaille actuellement sur un site-CV personnel, qui n'est pour le moment pas en ligne, mais qui reprend le même principe que les divers sites d'élèves ingénieur de ma future école (rentrée le 01 septembre :p) que j'ai pu rencontrer. (Si ça vous interresse, mon école est l'IG2I de Lens)
Or je souhaiterais réaliser une interface d'administration pour ce site, mais je ne veux pas d'une solution prémâchée dasn un tutoriel ultrcomplet. Je voudrais trouver une solution viable et totalement opérationnelle par moi même.
J'ai donc des problèmes... Pour la fonction de modification des "articles" sur mon site. Le principe que j'ai employé n'est pas forcément le plus simple :
1) on choisit le nom billet que l'on veut modifier dans une liste déroulante.
2) ce nom de billet est récupéré sur une page de traitement, une notification de confirmation "Vous allez modifier le billet tel nom de telle section" avec un bouton de formulaire, ce qui permet de transmettre en POST les autres info (contenu, id, section, etc.) par le biais d'un formulaire avec uniquement des input cachés contenant les infos sur le billet.
3) renvoyer ces infos sur la première page qui affiche alors un formulaire avec zone de titre, zone de contenu, et liste déroulante de section avec les infos du billet à modifier pré-inscrites.
4) les infos moddifiées sont renvoyées à la page de traitement qui update la bdd.
Or le probléme est à l'étape 2.
Puisque dans les billet que j'écris, je met du xhtml pour mettre en forme (balises de type br / ou alors des liens ou autre) j'ai des souci dans ma zone de formulaire cachée contenant le contenu du billet. Car l'attribut value se ferme dès qu'il rencontre une guillemet (logique). Je pourrai mettre htmlspecialchars mais alors toutes mes balises ne serviraient plus puisqu'elle seraient inactives.
Voilà, j'éspère avoir été assez clair pour que vous m'aidiez, et j'en profite pour remercier une nouvelle fois la communauté CCM vraiment SUPER !!
Merci d'avance !
Rémi
A voir également:
- [PHP/MySQL/xhtml]Balise input de type hidden
- Hidden information marketplace c'est quoi ✓ - Forum HTML
- Winmend folder hidden - Télécharger - Confidentialité
- Input signal out of range - Forum Ecran
- Incompatibilité de type vba ✓ - Forum Programmation
- Easy php - Télécharger - Divers Web & Internet
9 réponses
oui je suis désolé, j'ai "rippé" en tapant le message et je ne sais comment mais ça l'a validé ^^, mais c'est corrigé !
Tu as essayé de faire appel à la fonction str_replace ?
https://www.php.net/manual/fr/function.str-replace.php
afin d'échapper tes guillemets :
Si ton problème n'est que pour le contenu de value, ca devrait faire l'affaire.
https://www.php.net/manual/fr/function.str-replace.php
afin d'échapper tes guillemets :
$contenu = str_replace('"', '\"', $contenu);
Si ton problème n'est que pour le contenu de value, ca devrait faire l'affaire.
Merci pour ta réponse !
Oui, je pourrais faire appel à cette fonction, mais alors, imaginons que dans $contenu il y ait un lien avec un attribut href=" " .
Les guillemets vont être échappées mais ensuite il faudra qu'elles "reviennent" pour que le lien soit affiché dans l'article final.
Est-il alors possible de le faire avec cette fonction ?
Par avance merci !
Oui, je pourrais faire appel à cette fonction, mais alors, imaginons que dans $contenu il y ait un lien avec un attribut href=" " .
Les guillemets vont être échappées mais ensuite il faudra qu'elles "reviennent" pour que le lien soit affiché dans l'article final.
Est-il alors possible de le faire avec cette fonction ?
Par avance merci !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ah ! c'est terrible comme fonction ça :) !
Je m'empresse d'essayer cela !!
Et puis, si ça ne marche pas, ben c'est qu'il y a encore une autre erreur ^^
Sinon, est-ce que cela t'interresserait que je poste le code de mes deux pages de modification de billet pour que tu me dise ce que tu en pense ?
(C'est mon premier vrai projet de site internet donc il faut que je prenne le maximum d'avis pour pouvoir prendre dès maintenant les bonnes habitudes !)
Je m'empresse d'essayer cela !!
Et puis, si ça ne marche pas, ben c'est qu'il y a encore une autre erreur ^^
Sinon, est-ce que cela t'interresserait que je poste le code de mes deux pages de modification de billet pour que tu me dise ce que tu en pense ?
(C'est mon premier vrai projet de site internet donc il faut que je prenne le maximum d'avis pour pouvoir prendre dès maintenant les bonnes habitudes !)
Alors voici pour la page "d'accueil" si je peut dire :
Edit : Oulala, j'ai supprimé le code car il s'affichait super mal sur le fofo...
Il est un peu trop large donc tu ne pourra pas voir correctement les incrémentations :/
Edit : Oulala, j'ai supprimé le code car il s'affichait super mal sur le fofo...
Il est un peu trop large donc tu ne pourra pas voir correctement les incrémentations :/
Oui, je sais cela... Mais cette page est (pour l'instant) destinée à moi même, donc cela ne me gène pas. Si je construisais un site pour quelqu'un d'autre, bien entendu que je prendrais toutes mes précautions... Ou tout du moins le plus possible ^^ Merci Beaucoup de tes réponses ! C'est très sympa d'avoir un avis, ça permet de s'améliorer plus rapidemment !
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Rémi DI PAOLA</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" media="screen" type="text/css" title="Exemple" href="../design_defaut.css" /> </head> <body> <?php include("structure_php/En_tete.php"); include("structure_php/Barre_navigation.php"); include("structure_php/Menu_site.php"); ?> <div id="corps"> <h3>Interface d'administration</h3> <p> <a href="creation_billet.php">| Creation de billet |</a> <a href="modif_billet.php"> Modification de billet |</a> <a href="suppr_billet.php"> Suppression de billet |</a> <h4>Modification de billet</h4><?php if (isset($_GET['mod']) and $_GET['mod']==1) { echo "Le billet à été modifié avec succès"; $_GET['mod']=0; } ?> <?php try { $bdd = new PDO('mysql:host=localhost;dbname=site_personnel', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $billet = $bdd->query('SELECT ID, section, titre, contenu FROM billets ORDER BY titre'); ?> <form method="post" action="modif_billet_traitement.php?mod=0"> <p> titre du billet : <select name="titre"> <?php while ($donnees = $billet->fetch()) { echo '<option value="' . $donnees['titre'] . '">' . $donnees['titre'] . '</option>'; } ?> </select> <input type="submit" value="Valider" /> </p> </form> <?php if (isset($_GET['mod']) and $_GET['mod']=2) { ?> <form method="post" action="modif_billet_traitement.php?mod=2"> <p> Titre du billet : <input type="text" name="titre" value="<?php echo $_GET['titre'] ?>" /> <br /><br /> Contenu du billet : <br /> <textarea name="contenu" rows="15" cols="70"> <?php echo $GET['contenu'] ?> </textarea><br /><br /> Section du billet : <select name="section"> <option value="accueil">Accueil</option> <option value="presentation">Présentation</option> <option value="experiences">Expériences</option> <option value="divers">Divers</option> <option value="liens">Liens</option> <option value="contact">Contact</option> </select> <br /><br /> <input type="hidden" name="ID" value="<?php $_GET['id'] ?>" /> <input type="submit" value="Valider" /> </p> </form> <?php } $billet->closeCursor(); ?> </div> <?php include("structure_php/Pied_de_page.php"); ?> </body> </html>
EDIT : Bon voilà finalement ça va à peu près l'affichage donc je l'ai mis quand même, mais je ne t'en voudrais pas de ne pas le lire c'est pas super là...
C'est la page d'acceuil de modification là.
En regardant vite fait on peut dire que j'ai 3 conseils à te donner ^^
D'abord, toujours utiliser de l'encodage utf-8 dans tes pages et dans ta base (a part si tu es contrain et forcé par un être plus puissant que toi à l'utilisation d'un autre encodage :p)
Ca permet de moins se poser de question si tu fais de l'AJAX, et d'éviter beaucoups de problèmes d'encodage (qui sont souvent très chiants...).
Ensuite pour la sécurisation des variables que tu récupères dans $_GET ou $_POST je te conseille d'apprendre à utiliser la fonction filter_input.
Une fois connue et maitrisé elle te permet de récupérer tout tes champs en toute sécurité, sans te prendre la tête.
Article en anglais : utilisation $_GET et $_POST sécurisé
http://www.phparch.com/2010/07/08/never-use-_get-again/
fonctions filter_input :
https://www.php.net/manual/fr/function.filter-input.php
Enfin détail, je te conseille de ne jamais mettre d'espace ou de majuscule dans tout les fichiers de tes projets, pour éviter des erreurs de chemins.
Ce sont des conseils pas forcément "important" pour que ton projet fonctionne, mais ça peut te faire aller plus vite et etre vraiment pratique.
(je vais regarder l'autre page :p)
D'abord, toujours utiliser de l'encodage utf-8 dans tes pages et dans ta base (a part si tu es contrain et forcé par un être plus puissant que toi à l'utilisation d'un autre encodage :p)
Ca permet de moins se poser de question si tu fais de l'AJAX, et d'éviter beaucoups de problèmes d'encodage (qui sont souvent très chiants...).
charset=iso-8859-1 => charset=utf-8
Ensuite pour la sécurisation des variables que tu récupères dans $_GET ou $_POST je te conseille d'apprendre à utiliser la fonction filter_input.
Une fois connue et maitrisé elle te permet de récupérer tout tes champs en toute sécurité, sans te prendre la tête.
Article en anglais : utilisation $_GET et $_POST sécurisé
http://www.phparch.com/2010/07/08/never-use-_get-again/
fonctions filter_input :
https://www.php.net/manual/fr/function.filter-input.php
Enfin détail, je te conseille de ne jamais mettre d'espace ou de majuscule dans tout les fichiers de tes projets, pour éviter des erreurs de chemins.
<?php include("structure_php/Pied_de_page.php"); ?>
Ce sont des conseils pas forcément "important" pour que ton projet fonctionne, mais ça peut te faire aller plus vite et etre vraiment pratique.
(je vais regarder l'autre page :p)
Et voilà la page de traitement :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Rémi DI PAOLA</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" media="screen" type="text/css" title="Exemple" href="../design_defaut.css" /> </head> <body> <div id="corps"> <?php try { $bdd = new PDO('mysql:host=localhost;dbname=site_personnel', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } if ($_GET['mod']=0) { $billet = $bdd->prepare('SELECT ID, titre, contenu, section FROM billets WHERE titre= ? '); $billet->execute(array($_POST['titre'])); $donnees = $billet->fetch(); $billet->closeCursor(); header('Location: modif_billet.php?mod=2&titre='.$donnees['titre'].'&contenu='.$donnees['contenu'].'&section='.$donnees['section'].'&id='.$donnees['ID']); } if ($_GET['mod']=2) { $billet = $bdd->prepare('UPDATE billet SET section = :section, titre = :titre, contenu = :contenu, date_heure = now() WHERE ID = :id'); $billet->execute(array( 'section' => $_GET['section'], 'titre' => $_GET['titre'], 'contenu' => $_GET['contenu'], 'id' => $_GET['id'] )); } $billet->closeCursor(); header('location: modif_billet.php?mod=1'); ?> </div> <?php include("structure_php/Pied_de_page.php"); ?> </body> </html>
Bonjour,
Je suis désolé, mais comme dit dans monb premier message j'ai appris en autodidacte sur le site du zéro. J'ai appris à faire cette redirection dans le tuto PHP / MySQL dans la partie TP minichat. Je ne sais pas si j'ai le droit de mettre un lien (qu'il soit supprimé si c'est le cas), donc je le met quand même https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/914663-tp-un-minichat
Je suis désolé, mais comme dit dans monb premier message j'ai appris en autodidacte sur le site du zéro. J'ai appris à faire cette redirection dans le tuto PHP / MySQL dans la partie TP minichat. Je ne sais pas si j'ai le droit de mettre un lien (qu'il soit supprimé si c'est le cas), donc je le met quand même https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/914663-tp-un-minichat
Merci d'avoir pris le temps pour moi defouille !
Je vais tenter ta solution, elle va certainement m'aider beaucoup !
Merci encore !
Au plaisir de se recroiser, que ce soit virtuellement ou réellement ^^
(ça me fait réellement plaisir car tu es le premier à qui je montre mon code et je pensais qu'il n'était pas si net que cela !)
Au revoir, je met en résolu !
Je vais tenter ta solution, elle va certainement m'aider beaucoup !
Merci encore !
Au plaisir de se recroiser, que ce soit virtuellement ou réellement ^^
(ça me fait réellement plaisir car tu es le premier à qui je montre mon code et je pensais qu'il n'était pas si net que cela !)
Au revoir, je met en résolu !