1. IMPORTANT : Nouvelles mesures de sécurité - 2. Règles pour obtenir de l'aide dans les forums de support - 3. Restrictions des droits pour le groupe "Support suspendu"

Il est obligatoire de respecter les Règles de MyBB.fr : Version abrégée ou Version complète pour obtenir du support sur nos forums.

Les membres ayant un site/forum contrevenant aux règles de MyBB.support seront placés dans le groupe "Support suspendu" et ne bénéficieront plus du support du staff. Nous recommandons aux autres membres d'agir de même. Il ne s'agit pas d'un bannissement, le membre retrouvera son statut "normal" dès que sa situation sera conforme aux règles.

Nouveau : un Wiki en français : plus de détails.
Avant de soumettre votre problème, consultez-le, ainsi que la FAQ, sans oublier le moteur de recherche interne.


Note de ce sujet :
  • Moyenne : 5 (1 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Tutoriel] Créer un formulaire de recrutement.
Mots-clés » tutoriel, créer, formulaire, recrutement
28-03-2012, 22:11, (Modification du message : 19-05-2013, 18:58 par Saphir.)
#1
Smile  [Tutoriel] Créer un formulaire de recrutement.
Suite à une demande de xooit, je vais vous apprendre, dans ce tutoriel, à créer une page permettant d'afficher à vos membres un formulaire de contact.

Si vous ne suivez pas le tutoriel correctement parce que rien ne vous intéresse d'autre que le résultat final, je ne fournirai aucun support.

1. Prérequis

Pour réaliser ce tutoriel, j'utiliserai le plugin "Page Manager" que vous pouvez télécharger sur le site de mybb.com en utilisant le lien ci-dessous.
http://mods.mybb.com/view/page-manager

Dans l'annexe, vous aurez besoin du plugin permettant d'utiliser le code PHP dans les templates. (Inutile de le télécharger si vous ne voulez pas faire l'annexe.)
http://mybbhacks.zingaburga.com/showthread.php?tid=260

2. Présentation

Nous allons réaliser un formulaire simple, qui utilisera tout de même une table de données (parce que je trouve cela plus propre que l'envoi par courrier électronique, et que c'est pas trop compliqué).
En allant sur la page, les membres verront le formulaire et auront la possibilité d'envoyer leur candidature, de la voir s'ils en ont déjà écrit une, et d'en taper une nouvelle (ce qui supprimerait l'ancienne). Les administrateurs quant à eux y verront la liste de toutes les candidatures.

En annexe, nous écrirons un petit code qui permettra d'afficher sur la page d'accueil : "Une nouvelle candidature vous a été soumise. Cliquez ici pour afficher la liste des candidatures." (pour les administrateurs seulement, évidemment).

3. Création de la Table de Données

Nous allons créer une table dans la base de données du forum qui contiendra les différentes candidatures. Pour cela, rendez-vous sur le panneau d'administration de votre base de données (PHPMyAdmin, par exemple), et exécutez-y la requête suivante dans votre base de données :
Code :
CREATE TABLE  `mybb`.`recrutement` (
`cid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`uid` INT NOT NULL ,
`date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`poste` TEXT NOT NULL ,
`candidature` TEXT NOT NULL ,
`lu` BOOLEAN NOT NULL DEFAULT  '0',
UNIQUE (`uid`)) ENGINE = MYISAM
(Attention : le "mybb" en haut de la requête est à remplacer par le nom de votre base de données !)

Si vous préférez utiliser une méthode plus manuelle, voici la description de chaque champ :
Nom de la Table : "recrutement"
Champ "cid" ; Type : "INT" ; A_I : OUI ; Attribut : PRIMARY
Champ "uid" ; Type : "INT" ; Attribut : UNIQUE
Champ "date" ; Type : "TIMESTAMP" ; Valeur par Défaut : "CURRENT_TIMESTAMP"
Champ "poste" ; Type : "TEXT"
Champ "candidature" ; Type : "TEXT"
Champ "lu" ; Type : "BOOLEAN" ; Vaule par Défaut : "0"

4. Création du Formulaire

Activez le plugin "Page Manager". Rendez-vous ensuite dans Configuration -> Page Manager et créez une nouvelle page.
Donnez-lui le nom de votre choix, et un paramètre URI simple (dans cet exemple, ce sera "recrutement", ainsi, la page sera accessible à l'adresse "misc.php?page=recrutement"). Pour "Use MyBB Template", choisissez "Non". Vous pouvez laisser le reste à "Oui".

Nous allons taper notre code dans le grand champ texte.

Réfléchissons à présent sur la structure de la page.
Dans un premier temps, nous avons deux cas à gérer : soit le membre qui affiche la page n'est pas administrateur, auquel cas il verra le formulaire ; soir il s'agit d'un administrateur, auquel cas il verra la liste des candidatures.
Vous pouvez utiliser le code suivant.
Code PHP :
<?php
if($mybb->user['usergroup'] != 0) {
    if(
$mybb->user['usergroup'] == 4) {
        
// Code a exécuter pour un administrateur.
        
    
}
    else {
        
// Code a exécuter pour tout autre membre connecté.

    
}
}
?>

Dans un premier temps, nous allons nous concentrer sur la partie "membre". Nous travaillerons sur la partie "administrateur" plus tard.

Nous allons à présent créer le formulaire. Vous pouvez utiliser l'exemple ci-dessous, je vous laisse le comprendre et le modifier à votre manière. Attention, si vous rajoutez des champs, il faudra répercuter ces changement sur la table de données !

Code PHP :
<form method="post" action="misc.php?page=recrutement&traitement=oui">
    <
label for="poste">Poste Convoit&eacute; :</label>
    <
select name="poste" id="poste">
        <
option value="Super Mod&eacute;rateur">Super Mod&eacute;rateur</option>
        <
option value="Mod&eacute;rateur (Partie Musique)">Mod&eacute;rateur (Partie Musique)</option>
        <
option value="Mod&eacute;rateur (Partie Dessin)">Mod&eacute;rateur (Partie Dessin)</option>
    </
select><br/><br/>
    <
label for="candidature">Candidature :</label><br/><textarea name="candidature" id="candidature" rows="20" cols="70" placeholder="Tapez votre candidature ici."></textarea><br/>
    <
input type="submit" value="Envoyer"/>
</
form

Le formulaire est prêt. Mais pour l'instant, il ne fait rien, nous allons à présent créer la partie traitement de la page, celle qui stockera les informations envoyées dans la base de données.

Lorsque le formulaire est envoyé, la page s'affiche de nouveau avec une variable supplémentaire, "traitement", qui vaut "oui". Il suffit donc de vérifier la présence de cette variable pour savoir s'il faut lancer le traitement ou non.
Pour insérer ces valeurs dans la base de données, il faut tout d'abord s'y connecter. On peut le faire de nombreuses façons, ma préférée étant la suivante :
Code PHP :
<?php $db = new PDO('mysql:host=localhost;dbname=mybb''root'''); ?>
(Normalement, laisser "localhost" est suffisant. Vous devrez remplacer "mybb" par le nom de votre base de données, "root" par votre nom d'utilisateur, et remplir les deux derniers guillemets avec le mot de passe de votre base de données.)

On enregistre ensuite la candidature dans la table de données en utilisant la requête suivante :
Code :
DELETE FROM  `mybb`.`recrutement` WHERE uid = X
INSERT INTO  `mybb`.`recrutement` (`uid`, `poste`, `candidature`) VALUES ('X', 'Y', 'Z')

Voici le code complet au stade où nous en sommes :
Code PHP :
<?php
if($mybb->user['usergroup'] != 0) {
    if(
$mybb->user['usergroup'] == 4) {
        
// Code a exécuter pour un administrateur.
    
    
}
    else {
        
// Code a exécuter pour tout autre membre connecté.
        
if($_GET['traitement']) {
            
$db = new PDO('mysql:host=localhost;dbname=mybb''root''');
            
$db->exec('DELETE FROM `mybb`.`recrutement` WHERE uid = ' $mybb->user['uid']);
            
$db->exec('INSERT INTO `mybb`.`recrutement` (`uid`, `poste`, `candidature`) VALUES (' $mybb->user['uid'] . ', \'' addslashes(htmlspecialchars($_POST['poste'])) . '\', \'' nl2br(addslashes(htmlspecialchars($_POST['candidature']))) . '\')');
        } else {
?>
            <form method="post" action="misc.php?page=recrutement">
                <label for="poste">Poste Convoit&eacute; :</label>
                <select name="poste" id="poste">
                    <option value="Super Mod&eacute;rateur">Super Mod&eacute;rateur</option>
                    <option value="Mod&eacute;rateur (Partie Musique)">Mod&eacute;rateur (Partie Musique)</option>
                    <option value="Mod&eacute;rateur (Partie Dessin)">Mod&eacute;rateur (Partie Dessin)</option>
                </select><br/><br/>
                <label for="candidature">Candidature :</label><br/><textarea name="candidature" id="candidature" rows="20" cols="70" placeholder="Tapez votre candidature ici."></textarea><br/>
                <input type="submit" value="Envoyer"/>
            </form>
<?php
        
}
    }
}
?>

5. Affichage de la Candidature

Les candidatures seront affichées dans deux cas distincts : de façon multiple, pour l'administrateur, et de façon unique, pour le membre.

Voici le code à utiliser dans le cas d'un membre (on présuppose que vous êtes connecté à la base de données) :
Code PHP :
<?php
            $q 
$db->query('SELECT `date`, `poste`, `candidature` FROM `mybb`.`recrutement` WHERE `uid` = ' $mybb->user['uid']);
            
$f $q->fetch();
?>
            <p><b>Votre candidature pour le poste de <?php echo $f['poste']; ?> a &eacute;t&eacute; soumise &agrave; la date suivante : <?php echo $f['date']; ?>.</b><br/><br/><?php echo $f['candidature']; ?></p> 

Pour un administrateur, le code est légèrement différent pour deux raisons :
- Dans un premier temps, parce qu'il y a potentiellement plusieurs candidatures à afficher ;
- Dans un second temps, parce qu'il faut également récupérer le nom d'utilisateur de l'émetteur.
De plus, il faudra également marquer les candidatures comme lues une fois qu'elles auront été affichées.

Le code ci-dessous est le code complet de la page et devrait correctement fonctionner, sous réserve de l'exactitude de la structure de votre table de données.

Code PHP :
<?php
if($mybb->user['usergroup'] != 0) {
    
$db = new PDO('mysql:host=localhost;dbname=mybb''root''');
    if(
$mybb->user['usergroup'] == 4) {
        
// Code a exécuter pour un administrateur.
        
$q1 $db->query('SELECT `uid`, `date`, `poste`, `candidature` FROM `mybb`.`recrutement` WHERE `lu` = 0 ORDER BY `cid` ASC');
        while(
$f1 $q1->fetch()) {
            
$q2 $db->query('SELECT `username` FROM `mybb`.`mybb_users` WHERE `uid` = ' $f1['uid']);
            
$f2 $q2->fetch();
            
?>
            <p><b>La candidature de <a href="member.php?action=profile&uid=<?php echo $f1['uid']; ?>"><?php echo $f2['username']; ?></a> pour le poste de <?php echo $f1['poste']; ?> a &eacute;t&eacute; soumise &agrave; la date suivante : <?php echo $f1['date']; ?>.</b><br/><br/><?php echo $f1['candidature']; ?></p>
            <hr/>
            <?php
        
}
        
$db->exec('UPDATE `mybb`.`recrutement` SET lu = 1');
    }
    else {
        
// Code a exécuter pour tout autre membre connecté.
        
if($_POST['traitement'] == 1) {
            
$db->exec('DELETE FROM `mybb`.`recrutement` WHERE uid = ' $mybb->user['uid']);
            
$db->exec('INSERT INTO `mybb`.`recrutement` (`uid`, `poste`, `candidature`) VALUES (' $mybb->user['uid'] . ', \'' addslashes(htmlentities($_POST['poste'])) . '\', \'' nl2br(addslashes(htmlentities($_POST['candidature']))) . '\')');
        } else {
            
$q $db->query('SELECT `date`, `poste`, `candidature` FROM `mybb`.`recrutement` WHERE `uid` = ' $mybb->user['uid']);
            
$f $q->fetch();
            
?>
            <p><b>Votre candidature pour le poste de <?php echo $f['poste']; ?> a &eacute;t&eacute; soumise &agrave; la date suivante : <?php echo $f['date']; ?>.</b><br/><br/><?php echo $f['candidature']; ?></p>
            <hr/>
            <form method="post" action="misc.php?page=recrutement">
                <label for="poste">Poste Convoit&eacute; :</label>
                <select name="poste" id="poste">
                    <option value="Super Mod&eacute;rateur">Super Mod&eacute;rateur</option>
                    <option value="Mod&eacute;rateur (Partie Musique)">Mod&eacute;rateur (Partie Musique)</option>
                    <option value="Mod&eacute;rateur (Partie Dessin)">Mod&eacute;rateur (Partie Dessin)</option>
                </select><br/><br/>
                <label for="candidature">Candidature :</label><br/><textarea name="candidature" id="candidature" rows="20" cols="70" placeholder="Tapez votre candidature ici."></textarea><br/>
                <input type="hidden" name="traitement" value="1"/>
                <input type="submit" value="Envoyer"/>
            </form>
            <?php
        
}
    }
}
?>

6. (ANNEXE) - Alerte aux Nouvelles Candidatures

Dans cette annexe, nous allons afficher aux administrateurs une alerte lorsqu'une nouvelle candidature existe.

Attention. Le plugin cité en tête de ce message est requis pour faire fonctionner ce système !

Pour ce faire, nous allons modifier le template "header" en y ajoutant à l'endroit souhaité le contenu suivant (tout en bas du template header devrait convenir) :
Code PHP :
<if $mybb->user['usergroup'] == 4 then>
    <?
php
        $dbrecrutement 
= new PDO('mysql:host=localhost;dbname=mybb''root''');
        
$q $dbrecrutement->query('SELECT COUNT(`cid`) AS existe FROM `mybb`.`recrutement` WHERE `lu` = 0');
        
$f $q->fetch();
    
?>
    <if $f['existe'] then>
        <div class="red_alert">Une ou plusieurs nouvelle(s) candidature(s) requièrent votre attention. <a href="misc.php?page=recrutement">Cliquez ici pour les afficher.</a></div>
        <br />
    </if>
</if> 

7. Captures d'Écran

Petit speech avant de dévoiler les captures d'écran...

Mine de rien, ça a beau être relativement simple, c'est assez long à coder, pour trois raisons. D'abord, parce que j'écris le tutoriel en même temps, donc je perd énormément de temps à écrire les textes que vous lisez, et à les relire pour éviter un maximum de fautes. Ensuite, parce qu'au fil du tutoriel, je me suis éloigné à plusieurs reprises de mon idée de base (et je pense que ça peut parfois se voir dans le code) en rajoutant de plus en plus de petites fonctions. Enfin, pour la simple et bonne raison que cela fait maintenant plusieurs mois que je n'avais pas codé en PHP et que j'avait des morceaux de Java (un autre langage de programmation) qui traînaient par moments dans mon code pendant plusieurs essais avant que je ne retrouve mes erreurs.

Je n'ai pas fait de style, pour la simple et bonne raison que l'objectif ici était de créer le formulaire, tout simplement. Si vous voulez habiller votre page, il vous faudra utiliser un peu de CSS.

Si vous avez des idées pour améliorer le code, n'hésitez pas à les donner ici, j'en prendrait note (je ne suis pas un professionnel du PHP (et ça peut se voir), et j'apprécie de voir mes connaissances dans ce langage s'approfondir).

Si vous avez créé un style d'affichage pour la page, justement, n'hésitez pas à le donner ici et je le rajouterai à ce tutoriel.

Si vous rencontrez un problème avec ce tutoriel, n'hésitez pas à poser vos questions ici-même. Je répondrai également aux messages privés que je recevrai, mais n'ayant pas réponse à tout, je pense qu'il est préférable d'utiliser le forum comme un forum !

    : Capture de la notification d'une nouvelle candidature pour les administrateurs.
    : Capture de la page telle qu'un membre la voit après avoir déposé sa candidature une première fois.
    : Capture de la page telle qu'un administrateur la voit lorsqu'une seule candidature requiert son attention. S'il y en avait eu d'autres, elles seraient apparues à la suite, de la plus ancienne à la plus récente.

[Image: 88x31.png]

Cordialement,
Saphir,
Modérateur MyBB.support.
Répondre


Messages dans ce sujet
[Tutoriel] Créer un formulaire de recrutement. - Saphir - 28-03-2012, 22:11



Utilisateur(s) parcourant ce sujet : 1 visiteur(s)

Contact | MyBB.support | Retourner en haut | Retourner au contenu | Version bas-débit (Archivé) | Syndication RSS
 Utilitaire de traduction fourni par Regentronique