MyBB.support, le portail francophone de MyBB

Version complète : [Tutoriel] Créer un formulaire de recrutement.
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Pages : 1 2 3 4
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 !

[attachment=1094] : Capture de la notification d'une nouvelle candidature pour les administrateurs.
[attachment=1095] : Capture de la page telle qu'un membre la voit après avoir déposé sa candidature une première fois.
[attachment=1096] : 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]
Bonjour Saphir, merci pour le tuto.

Par contre je rencontre une erreur 500 quand je veut me rendre sur mas page.

(Erreur HTTP 500 (Internal Server Error) : Une situation inattendue s'est produite tandis que le serveur tentait de traiter la demande.)

j'ai tous effacer et re-suivie le tuto toujours la même erreur.
Bonjour.

Normalement, le code suivant doit fonctionner correctement.
Si tu l'as modifié, peux-tu me donner le code complet ?
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($_GET['traitement']) {
            
$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="submit" value="Envoyer"/>
            </form>
            <?php
        
}
    }
}
?>

Es-tu sûr(e) des informations que tu as entrées pour te connecter à la base de données (ligne 3) ? Assure-toi de bien les rentrer sous la forme suivante :
Code PHP :
$db = new PDO('mysql:host=localhost;dbname=NOM_BASE_DE_DONNEES''NOM_UTILISATEUR_BDD''MOT_DE_PASSE_BDD'); 
De plus, vérifie que la structure de la table de données est correcte.

Si l'hôte n'est pas "localhost" (mais c'est le cas sur la plupart des hébergements), il faudra également modifier l'hôte.

Enfin, attention, le code de la partie 6 (l'annexe) n'est pas à placer dans la page mais dans le template header, modifiable depuis l'administration du forum.
Bonjour,

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($_GET['traitement']) {
            
$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="submit" value="Envoyer"/>
            </form>
            <?php
        
}
    }
}
?>

pour la ligne:
Code PHP :
$q1 $db->query('SELECT `uid`, `date`, `poste`, `candidature` FROM `mybb`.`recrutement` WHERE `lu` = 0 ORDER BY `cid` ASC'); 
On doit pas modifier "mybb" par le nom de notre basse de donner ?
Ah si, exact, j'ai oublié de le mentionner, mais il est également possible de supprimer tout simplement `mybb`. de partout, puisque c'est de toute façon à cette base de données qu'est liée la variable.
J'ai donc enlever les `mybb` mes j'ai toujours un problème , j'ai plus l’erreur 500 mes une page blanche.
As tu bien enlevé les points après les `mybb` ?

Il y a deux raisons pour qu'une page blanche s'affiche :
1. Tu n'es pas connecté(e) au forum ;
2. Tu essayes d'accéder à la mauvaise page.

Lorsque tu utilise page manager pour y mettre le code donné précédemment, tu dois y entrer le paramètre d'URI. Tu accèderas ensuite à ta page à l'adresse http://tonsite.com/forum/misc.php?page=PARAMETRE

Peux-tu m'envoyer une capture d'écran de page manager, lorsque tu souhaites modifier la page en question ?
Je vous les envoyer par MP.
Je t'invite à :
1. Vérifier que le nom d'utilisateur de la base de données est bien "root",
2. Supprimer tous les points qui sont devant des `
3. Vérifier si ça fonctionne
4. Si ça ne fonctionne toujours pas, m'envoyer une nouvelle capture Wink
Donc , j'ai bien supprimer les mybb , root et bien le conte .

Voila le code que j'ai actuellement : (j'ai toujours page blanche)

Code PHP :
<?php
if($mybb->user['usergroup'] != 0) {
    
$db = new PDO('mysql:host=localhost;dbname=forum''root''****');
    if(
$mybb->user['usergroup'] == 4) {
        
// Code a exécuter pour un administrateur.
        
$q1 $db->query('SELECT `uid`, `date`, `poste`, `candidature` FROM `recrutement` WHERE `lu` = 0 ORDER BY `cid` ASC');
        while(
$f1 $q1->fetch()) {
            
$q2 $db->query('SELECT `username` FROM `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 `recrutement` SET lu = 1');
    }
    else {
        
// Code a exécuter pour tout autre membre connecté.
        
if($_GET['traitement']) {
            
$db->exec('DELETE FROM `recrutement` WHERE uid = ' $mybb->user['uid']);
            
$db->exec('INSERT INTO `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 `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="submit" value="Envoyer"/>
            </form>
            <?php
        
}
    }
}
?>
Là je dois avouer que je ne vois pas trop d'où peut venir le problème...

La structure de la table "recrutement" dans la base de données est-elle correcte ? Normalement oui puisqu'aucune erreur ne s'affiche... Essaye de rajouter ceci tout en haut du code :
Code PHP :
<?php echo "test"?>

Si le mot "test" s'affiche sur la page, il s'agit d'un problème de connexion au forum (la page ne parvient pas à reconnaître qui est connecté). Sinon, ça vient soit du code (mais je n'y vois pas d'erreur), soit la table qui est mal configurée. Est-ce bien une base MySQL (ou MySQLi) ?
Le mot test et afficher , j'ai rencontres des problème avec les caches du forum ça pourrait venir de la ?
C'est bizarre, normalement, les pages créées avec page manager récupèrent les variables de MyBB. Tu peux toujours essayer d'ajouter le code suivant, mais je ne pense pas que ça change quelque chose. Je ne vois plus vraiment d'où vient le problème....

Code PHP :
<?php include_once('./global.php'); ?>
Pour ma part, ca me met aussi page blanche. Quelqu'un a t'il trouvé une solution ?
Of course.

Je récapitule.

Les membres enregistrés, quels qu'ils soient, à l'exception des administrateurs (groupe 4) verront le formulaire de dépôt de candidature et s'il y a lieu, leur candidature.
Les administrateurs (groupe 4) verront les différentes candidatures postées par les membres enregistrés. Ils ne verront pas le formulaire !

Les invités verront une page blanche.

S'il n'y a aucune candidature à afficher, les administrateurs verront également une page blanche.
En essayant avec un compte membre, cela m'affiche encore une page blanche ...
Si l'erreur vient de là d'où je pense qu'elle vient, le code ci-dessous devrait fonctionner.

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 `recrutement` WHERE `lu` = 0 ORDER BY `cid` ASC');
        while(
$f1 $q1->fetch()) {
            
$q2 $db->query('SELECT `username` FROM `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($_GET['traitement']) {
            
$db->exec('DELETE FROM `recrutement` WHERE uid = ' $mybb->user['uid']);
            
$db->exec('INSERT INTO `recrutement` (`uid`, `poste`, `candidature`) VALUES (' $mybb->user['uid'] . ', \'' addslashes(htmlentities($_POST['poste'])) . '\', \'' nl2br(addslashes(htmlentities($_POST['candidature']))) . '\')');
        } else {
            
$q $db->query('SELECT COUNT(cid) AS j FROM recrutement WHERE uid = ' $mybb->user['uid']);
            
$f $q->fetch();
            if(
$f['j'] > 0) {
                
$q $db->query('SELECT `date`, `poste`, `candidature` FROM `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>
                <?php
            
}
            
?>
            <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="submit" value="Envoyer"/>
            </form>
            <?php
        
}
    }
}
?>

Ce qui est étrange, c'est que le code fourni dans mon tutoriel fonctionne correctement sur une installation neuve de MyBB (à condition que la table soit créée correctement).
Dans $db = new PDO('mysql:host=localhost;dbname=mybb', 'root', '');
localhost est à remplacer par l'hôte, mybb par le nom de la base de données, root par le nom d'utilisateur et l'espace vide entre les deux dernières apostrophes est à remplir avec le mot de passe de la base de données.
bonjour voilà j'ai une erreur dans la base de donnée c'est quoi le problème?

Es-tu sûr d'avoir exécuté la requête de création correctement ?
Exécute celle-ci :
Code :
DROP TABLE IF EXISTS `recrutement`;
CREATE TABLE  `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;
(Le délimiteur de requêtes doit être le point virgule.)
oui mais la db de l'hébergeur free-h n'est pas en 5.5 mais en 5.3 est ce que sa change quelque chose? d'ailleurs quand j'ai installer le forum lil y a differente mysql a ce que jai lus dans le tutoriel et moi c'était mysql improved je crois enfin du moins pas mysql normal et sur mon hébergeur la base de donnée commence toujours par mybb_ est ce que sa ne risque pas de faire un beug comme sa ne commence pas par mybb_recrutement par exemple?
Pages : 1 2 3 4
 Utilitaire de traduction fourni par Regentronique