[PHP/MySQL/xhtml]Balise input de type hidden

Résolu/Fermé
remi13131 Messages postés 35 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 19 août 2010 - Modifié par remi13131 le 18/08/2010 à 14:36
remi13131 Messages postés 35 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 19 août 2010 - 19 août 2010 à 12:32
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
A voir également:

9 réponses

Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
18 août 2010 à 14:21
Bonjour,

je crois qu'il manque un bout de ton post :)
(ou alors tu n'as pas de question ? ^^)
0
remi13131 Messages postés 35 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 19 août 2010 1
18 août 2010 à 14:29
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é !
0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
18 août 2010 à 14:42
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 :
$contenu = str_replace('"', '\"', $contenu);


Si ton problème n'est que pour le contenu de value, ca devrait faire l'affaire.
0
remi13131 Messages postés 35 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 19 août 2010 1
18 août 2010 à 15:17
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 !
0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
18 août 2010 à 15:21
bah oui en inversant les paramètres ^^ :
$contenu = str_replace('\"', '"', $contenu);


Et le tour est joué ! :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
remi13131 Messages postés 35 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 19 août 2010 1
18 août 2010 à 15:27
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 !)
0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
18 août 2010 à 15:32
Je peux te dire rapidement ce que j'en pense si tu veux ^^ (enfin si c'est pas trop long :p)
0
remi13131 Messages postés 35 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 19 août 2010 1
Modifié par remi13131 le 18/08/2010 à 15:52
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 :/
0
maka54 Messages postés 698 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
18 août 2010 à 15:56
utilise plutot des $_POST a la place des $_GET car ils sont visible depuis l'url
0
remi13131 Messages postés 35 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 19 août 2010 1
19 août 2010 à 09:41
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 !
0
remi13131 Messages postés 35 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 19 août 2010 1
Modifié par remi13131 le 18/08/2010 à 15:56
<!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à.
0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
Modifié par Defouille le 18/08/2010 à 16:09
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...).
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)
0
remi13131 Messages postés 35 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 19 août 2010 1
19 août 2010 à 09:45
Okay pour l'UTF-8 et filter_input, j'avoue n'en avoir jamais entendu parler !
Pour la majuscule, c'est une erreur de ma part car je connnais cette "règle" et parfois en tapant rapidemment ça ne vient pas tout seul ^^
0
remi13131 Messages postés 35 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 19 août 2010 1
18 août 2010 à 15:57
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&amptitre='.$donnees['titre'].'&ampcontenu='.$donnees['contenu'].'&ampsection='.$donnees['section'].'&ampid='.$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>

0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
18 août 2010 à 16:10
Pas grand chose à dire de plus, le code est clean.
0
maka54 Messages postés 698 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
18 août 2010 à 16:34
ton commande devrait buggué a un moment a un autre ...

tu met
header('location: modif_billet.php?mod=1');

alors que tu as déjà du html avant, donc çà devrait planter en arrivant a cette ligne
0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
18 août 2010 à 16:39
maka54 a raison, si tu mets un header, il ne faut pas qu'il y est autre chose d'écrit dans la page avec l'appel à header.
0
remi13131 Messages postés 35 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 19 août 2010 1
19 août 2010 à 09:31
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
0
Defouille Messages postés 388 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 15 novembre 2011 54
19 août 2010 à 09:43
Ce n'est pas un tord, c'est même très bien ^^

Mais tu remarqueras que même dans ton tuto, il n'y a pas de code html affiché dans la page avant le header (il n'y a que du code php qui n'affiche rien sur la page).
0
remi13131 Messages postés 35 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 19 août 2010 1
18 août 2010 à 16:25
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 !
0