8796 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis en cours de création d'un site pour une asso et j'ai une question pour faciliter la création de plusieurs formulaire de contact.

Je vais avoir une page avec une trentaine d'activités et la possibilité pour chacune de s'inscrire par un formulaire de contact. Je voulais faire un seul formulaire de contact avec un champ ID masqué pour identifier la provenance mais je ne travaille pas en Base de donnée alors est il envisageable de passer l'ID dans le lien texte de chaque activité menant à ce formulaire ?

Si oui puis je aussi actualiser le titre de mon formulaire (en texte, css ou h1) ?


Merci à vous Smiley smile
Modifié par nini (15 Sep 2009 - 19:55)
Alors c'est assez simple. On a un script principal qui contient la liste des activités (avec en clé l'identifiant de l'activité, et en valeur l'intitulé « propre »).

Si pas d'activité dans l'adresse, on affiche le formulaire de sélection de l'activité. Il passe via un paramètre dans l'URL l'activité désirée.

Une fois l'activité sélectionnée, on affiche le formulaire de contact, qui affiche dans un h1 l'intitulé et les différents champs. Si celui-ci est envoyé, on doit valider les données puis envoyer le message.

J'ai découpé ça en 3 scripts : contact.php, qui gère un peu tout, contact-etape-1.php qui gère la sélection de l'activité, et contact-etape-2.php qui gère le message.

contact.php
<?php

$activites = array(
    'activite1' => 'Activité 1',
    'activite2' => 'Activité 2',
    'activite3' => 'Activité 3',
    'activite4' => 'Activité 4',
    'activite6' => 'Activité 5');


if($_SERVER['REQUEST_METHOD'] === 'GET') {

    $activite = isset($_GET['activite']) ? $_GET['activite'] : null;

    if($activite == null) {

        require 'contact-etape-1.php';

    } elseif(isset($activites[$activite])) {

        require 'contact-etape-2.php';
    }

} elseif($_SERVER['REQUEST_METHOD'] === 'POST') {

    // Validation + envoi du message
    echo 'ok';

}


contact-etape-1.php
<!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" lang="fr">
  <head>
    <title>Choix de l'activité</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  </head>
  <body>
    <h1>Choix de l'activité</h1>
    <form method="GET" action="contact.php">
        <fieldset>
            <label for="f-activite">Activité</label><br />
            <select id="f-actitive" name="activite" size="10">
<?php
    foreach($activites as $id => $titre) {
?>
                <option value="<?php echo htmlspecialchars($id, ENT_COMPAT, 'utf-8') ?>"><?php
                    echo htmlspecialchars($titre, ENT_NOQUOTES, 'utf-8') ?></option>
<?php
    }
?>
            </select>
        </fieldset>
        <div>
            <input type="submit" value="Envoyer" />
        </div>
    </form>
  </body>
</html>

Modifié par FlorentG (11 Sep 2009 - 13:36)
contact-etape-2.php
<!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" lang="fr">
  <head>
    <title>Inscription pour <?php echo htmlspecialchars($activites[$activite], ENT_NOQUOTES, 'utf-8') ?></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  </head>
  <body>
    <h1>Inscription pour <?php echo htmlspecialchars($activites[$activite], ENT_NOQUOTES, 'utf-8') ?></h1>
    <form method="POST" action="contact.php?activite=<?php echo htmlspecialchars($activite, ENT_COMPAT, 'utf-8') ?>">
        <div>
            <label for="f-nom">Nom</label><br />
            <input type="text" id="f-nom" name="nom" />
        </div>
        <div>
            <label for="f-message">Message</label><br />
            <textarea id="f-message" name="message" rows="10" cols="50"></textarea>
        </div>
        <div>
            <input type="submit" value="Envoyer" />
        </div>
    </form>
  </body>
</html>

Modifié par FlorentG (11 Sep 2009 - 13:37)
OK j'ai un peu compris mais pas tout, après recherche sur le web voila ce que je ferais merci de me corriger.

-------------ton code est à coup sur mieux mais j'aimerais savoir si j'ai un peux compris et si mon code fonctionne

J'ai ma page activites_asso.php avec mes liens vers le formulaire d'inscription des diverses activités exemple :

<a href="formulaire_activites.php?id=judo&titre=Inscription Judo">le judo</a>

ces liens vont vers formulaires_activite.php où je vais avoir un formulaire basique nom, prénom... et où je souhaite récupérer mon titre et récupérer dans un champs masqué mon id

1- Je peux afficher mon titre comme ceci :

<?php echo $_GET['titre']; ?>

2- dans mon formulaire mon champs masqué doit avoir
<form><input type="hidden" name="id" value="<?php echo $_GET['id']?>"></form>


Merci de vos corrections
On peut très bien générer la liste des liens à partir d'un tableau PHP.

Si tu passes tout en paramètre GET comme ça, sans vérification, on peut mettre ce qu'on veut comme activité ou comme titre Smiley confus Il faut obligatoirement avoir une liste d'activités valides Smiley smile

Et attention, il ne faut jamais jamais jamais faire d'echo de valeurs dans $_GET comme ça, sinon on peut très facilement injecter de l'HTML arbitraire, il faut toujours faire comme ça :
echo htmlspecialchars($_GET['titre'])
Salut,

nini a écrit :
merci beaucoup à vous tous
En fait FlorentG est le seul a t'avoir répondu ! Smiley langue

Et si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. Smiley cligne
Et bien, j'ai encore une questions la différence entre mettre

echo htmlspecialchars($_GET['titre'])

et

echo htmlentities($_GET['titre'])

Merci encore
nini a écrit :
la différence entre mettre
echo htmlspecialchars($_GET['titre'])
et
echo htmlentities($_GET['titre'])
htmlentities va tout convertir en entités html (y compris notamment les accents) alors que htmlspecialchars va faire le minimum syndical pour se protéger de l'utilisation de balises html dans une variable réaffichée. En conclusion : htmlspecialchars suffit amplement.