FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Recherche rapide

Vous n'êtes pas identifié(e).

Version 1.4.13 : [.tar.gz][.zip] (maj 20/10/2014)
Pack langue française pour 1.4.x : [.zip] (maj 06/01/2012)

Branche 1.5.x : fluxbb.org
Pack langue française pour 1.5.x : [.zip] (maj 14/01/2016)

Ancienne Version 1.2.24 fr : [.zip] (maj 26/08/2011)

Vous avez un problème ?
Avant de poser votre question sur les forums d'entraide nous vous invitons à consulter :

#1 10-08-2011 03:44:52

Ishimaru Chiaki
Régulier
Lieu : Baie-Comeau, Québec
Inscription : 02-10-2008
Messages : 99
Site Web

Formulaire de connexion sur son site

Vous faites votre site en utilisant les sessions de FluxBB et vous voulez insérer un bloc de connexion et des raccourcis utilisateur sur votre site ?

Cette astuce vous montre à en ajouter un.

Prérequis

Vous devez avoir inclus le fichier common.php du forum avant l'entête du site avant de suivre ce tuto.  Pour le faire, consultez la page de la documentation à ce sujet

Création du fichier

Commencez d'abord par créer le nouveau fichier qui contiendra le code (quicklogin.php), puis incluez-le où vous le voulez (ex: header, menu latéral)

<?php include('include/quicklogin.php'); ?>

(faites de préférence un dossier spécifique pour les différents fichiers inclus de votre site, ça fait plus rangé)

Pour la suite, je donnerai les codes en fonction d'un affichage dans un menu latéral.  Vous n'avez qu'à adapter le code HTML pour vos besoins.
Aussi, même si j'utilise un système de clés de langue sur mon site, je donnerai les codes avec les textes en dur.  Libre à vous de les rendre localisables comme je le fais.

La condition

Puisque l'on veut que le formulaire de connexion ne s'affiche que si l'utilisateur est connecté, on doit utiliser une condition pour vérifier s'il est connecté ou non.

Pour cela, on va utiliser la variable utilisateur $pun_user['is_guest'] pour effectuer la vérification.

Et le tout, dans une condition if...else :

<?php
if ($pun_user['is_guest'])
{
    //Contenu à afficher pour les invités, c'est à dire le formulaire de connexion
}
else
{
    //Contenu à afficher pour l'utilisateur enregistré (ex: profil, messagerie, déconnexion, etc.)
}
    ?>

On est prêt pour la suite !

Le formulaire de connexion

Voici le code à insérer dans la première partie de la condition :

    <!-- Panneau de connexion -->
    <div class="submenu">
      <h2>Connexion</h2>
      <form id="login" action="<?php echo PUN_ROOT.'login.php?action=in'; ?>" method="post">
        <p class="form">
          <input type="hidden" name="form_sent" value="1" />
          <input type="hidden" name="redirect_url" value="<?php echo $_SERVER['PHP_SELF']; ?>" />
          <label for="username">Nom d'utilisateur &nbsp;</label><input class="fastlogin" id="username" type="text" name="req_username" size="10" /><br />
          <label for="password">Mot de passe &nbsp;</label><input class="fastlogin" id="password" type="password" name="req_password" size="10" /><br />
          <label for="autologin">Connexion auto ? &nbsp;</label><input class="check" id="autologin" type="checkbox" checked="checked" name="save_pass" />
        </p>
        <p class="submit">
          <input class="connect" type="submit" name="login" value="Connexion" /> <a href="<?php echo PUN_ROOT.'register.php' ?>"><button class="connect">Inscription</button></a>
        </p>
      </form>
    </div>

Vous pouvez remarquer cette ligne :

          <input type="hidden" name="redirect_url" value="<?php echo $_SERVER['PHP_SELF']; ?>" />

La variable $_SERVER['PHP_SELF'] permet de récupérer le chemin de la page courante depuis la racine de votre site.  L'utilisation de cette variable permet au script de redirection de la page login.php du forum de rediriger l'utilisateur sur la page du site et non vers l'index du forum si la connexion réussit.

Voici ce que ça donne jusqu'ici :

<?php
if ($pun_user['is_guest'])
{
    ?>
    <!-- Panneau de connexion -->
    <div class="submenu">
      <h2>Connexion</h2>
      <form id="login" action="<?php echo PUN_ROOT.'login.php?action=in'; ?>" method="post">
        <p class="form">
          <input type="hidden" name="form_sent" value="1" />
          <input type="hidden" name="redirect_url" value="<?php echo $_SERVER['PHP_SELF']; ?>" />
          <label for="username">Nom d'utilisateur &nbsp;</label><input class="fastlogin" id="username" type="text" name="req_username" size="10" /><br />
          <label for="password">Mot de passe &nbsp;</label><input class="fastlogin" id="password" type="password" name="req_password" size="10" /><br />
          <label for="autologin">Connexion auto ? &nbsp;</label><input class="check" id="autologin" type="checkbox" checked="checked" name="save_pass" />
        </p>
        <p class="submit">
          <input class="connect" type="submit" name="login" value="Connexion" /> <a href="<?php echo PUN_ROOT.'register.php' ?>"><button class="connect">Inscription</button></a>
        </p>
      </form>
    </div>
    <?php
}
else
{
    //Contenu à afficher pour l'utilisateur enregistré (ex: profil, messagerie, déconnexion, etc.)
}
?>

Maintenant, vous avez votre formulaire, mais vous aimeriez sûrement afficher des liens tels que Déconnexion, Profil, Messagerie (si vous avez installé un mod pour ça) et Mes interventions, pour les utilisateurs enregistrés.
Pour cela, suivez la partie qui suit.

Bloc de liens de l'utilisateurs

Voici le code à inclure dans la deuxième partie de la condition :

    <!-- Options de l'utilisateur -->
    <div class="submenu">
      <h2><?php echo $pun_user['username']; ?></h2>
      <ul>
        <li><a href="<?php echo PUN_ROOT.'profile.php?id='.$pun_user['id']; ?>">Profil</a></li>
        <!-- Spécifique au mod New Private Messaging System - Supprimez ce lien si vous n'utilisez pas ce mod -->
        <li><a href="<?php echo PUN_ROOT.'pmsnew.php'; ?>">Messagerie</a></li>
        <li><a href="<?php echo PUN_ROOT.'search.php?action=show_replies'; ?>">Mes interventions</a></li>
        <!-- Si vous avez un panel d'administration spécifique au site -->
        <?php if ($pun_user['is_admmod']): echo '<li><a href="admin.php">Administration</a></li>'; endif; ?>
        <li><a href="<?php echo 'logout.php?action=out&amp;id='.$pun_user['id'].'&amp;csrf_token='.pun_hash($pun_user['id'].pun_hash(get_remote_address())); ?>">Déconnexion</a></li>
      </ul>
    </div>

Vous remarquerez que seul le lien de déconnexion n'utilise pas la constante PUN_ROOT.  La raison est simple :
Lorsqu'on se déconnecte, on ne peut être redirigé que vers l'index du forum, et donc, c'est indiqué en dur dans la page login.php.  Cela obligerait donc de devoir modifier ce fichier pour être capable de rediriger vers l'index du site, en plus que c'est très difficilement pensable d'utiliser la variable $_SERVER['PHP_SELF'] pour une valeur qui sera transférée par une variable $_GET, car si le lien à transférer contient lui-même plusieurs variables, cela devient difficile à gérer sans risquer de se retrouver avec une faille de sécurité qui permettrait à un pirate de rediriger vers un site malveillant.

Afin donc de régler ce problème sans trop me casser la tête, je vous recommande de créer un fichier logout.php à la racine de votre site et d'y insérer ce code tiré du fichier login.php du forum :

<?php

/**
 * Copyright (C) 2008-2011 FluxBB
 * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
 * License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
 */

if (isset($_GET['action']))
    define('PUN_QUIET_VISIT', 1);

define('PUN_ROOT', 'fluxbb14/'); //Change this value if the board's path is different
require PUN_ROOT.'include/common.php';
define('SITE_ROOT', '/sites/ishimaru-v6/index.php'); //Page where you want your users to be redirected.  Use $_SERVER['PHP_SELF'] to find it

// Load the login.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/login.php';

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

if ($action == 'out')
{
    if ($pun_user['is_guest'] || !isset($_GET['id']) || $_GET['id'] != $pun_user['id'] || !isset($_GET['csrf_token']) || $_GET['csrf_token'] != pun_hash($pun_user['id'].pun_hash(get_remote_address())))
    {
        header('Location: index.php');
        exit;
    }

    // Remove user from "users online" list
    $db->query('DELETE FROM '.$db->prefix.'online WHERE user_id='.$pun_user['id']) or error('Unable to delete from online list', __FILE__, __LINE__, $db->error());

    // Update last_visit (make sure there's something to update it with)
    if (isset($pun_user['logged']))
        $db->query('UPDATE '.$db->prefix.'users SET last_visit='.$pun_user['logged'].' WHERE id='.$pun_user['id']) or error('Unable to update user visit data', __FILE__, __LINE__, $db->error());

    pun_setcookie(1, pun_hash(uniqid(rand(), true)), time() + 31536000);

    redirect(SITE_ROOT, $lang_login['Logout redirect']);
}
else
    header('Location: index.php');
    exit;

De cette façon, vous serez redirigé vers l'index de votre site et non vers l'index du forum.

Ensuite, si vous n'utilisez pas le mod New Private Messaging System, vous pouvez enlever la ligne suivante :

        <li><a href="<?php echo PUN_ROOT.'pmsnew.php'; ?>"><?php echo $lang['usr_pms']; ?></a></li>

Et finalement, si vous n'avez pas de panel d'administration spécifique au site, vous pouvez aussi enlever ceci :

        <?php if ($pun_user['is_admmod']): echo '<li><a href="admin.php">Administration</a></li>'; endif; ?>

Voilà ce que ça donne au final :

<?php
if ($pun_user['is_guest'])
{
    ?>
    <!-- Panneau de connexion -->
    <div class="submenu">
      <h2>Connexion</h2>
      <form id="login" action="<?php echo PUN_ROOT.'login.php?action=in'; ?>" method="post">
        <p class="form">
          <input type="hidden" name="form_sent" value="1" />
          <input type="hidden" name="redirect_url" value="<?php echo $_SERVER['PHP_SELF']; ?>" />
          <label for="username">Nom d'utilisateur &nbsp;</label><input class="fastlogin" id="username" type="text" name="req_username" size="10" /><br />
          <label for="password">Mot de passe &nbsp;</label><input class="fastlogin" id="password" type="password" name="req_password" size="10" /><br />
          <label for="autologin">Connexion auto ? &nbsp;</label><input class="check" id="autologin" type="checkbox" checked="checked" name="save_pass" />
        </p>
        <p class="submit">
          <input class="connect" type="submit" name="login" value="Connexion" /> <a href="<?php echo PUN_ROOT.'register.php' ?>"><button class="connect">Inscription</button></a>
        </p>
      </form>
    </div>
    <?php
}
else
{
    ?>
    <!-- Options de l'utilisateur -->
    <div class="submenu">
      <h2><?php echo $pun_user['username']; ?></h2>
      <ul>
        <li><a href="<?php echo PUN_ROOT.'profile.php?id='.$pun_user['id']; ?>">Profil</a></li>
        <!-- Spécifique au mod New Private Messaging System - Supprimez ce lien si vous n'utilisez pas ce mod -->
        <li><a href="<?php echo PUN_ROOT.'pmsnew.php'; ?>">Messagerie</a></li>
        <li><a href="<?php echo PUN_ROOT.'search.php?action=show_replies'; ?>">Mes interventions</a></li>
        <!-- Si vous avez un panel d'administration spécifique au site -->
        <?php if ($pun_user['is_admmod']): echo '<li><a href="admin.php">Administration</a></li>'; endif; ?>
        <li><a href="<?php echo 'logout.php?action=out&amp;id='.$pun_user['id'].'&amp;csrf_token='.pun_hash($pun_user['id'].pun_hash(get_remote_address())); ?>">Déconnexion</a></li>
      </ul>
    </div>
    <?php
}
?>

Il ne vous reste plus qu'à styler tout ça avec du CSS !


PC Alienware sous Win7 - GIMP 2.8 - XHTML/CSS (avancé) - PHP/MySQL (medium)
Convertisseur Connectix Boards vers FluxBB et Auto Poll pour 1.4/1.5 disponibles sur GitHub !
Artiste à mes heures

Hors ligne

#2 10-04-2012 02:10:59

Prizio
Nouveau Membre
Inscription : 10-04-2012
Messages : 4

Re : Formulaire de connexion sur son site

Salut Ishimaru Chiaki,

C'est parfait, merci beaucoup pour cette explication qui m'a été d'une grande utilité.

Malgré cela, je rencontre un problème : Je n'arrive pas à faire un bloc de connexion sur la page index.php du forum


Détails :
J'ai un site internet /monsite/index.php (avec quelques autres pages du même genre)
Sur chaque page, il y a un onglet "forum" qui renvoi vers /monsite/forum/index.php : Sur cette page, le forum est intégré au design, pour cela, j'ai ajouté les div (utilisée sur toutes mes pages) dans main.tpl et je les ai décrites dans le style en css que j'avais choisi.
Arrivé la, j'ai ton bloc de connexion sur toutes mes pages, mais malheureusement, je n'arrive pas à le mettre sur la page /monsite/forum/index.php car on ne peut pas intégrer du php dans main.tpl et lorsque j'ouvre la page index.php, je ne vois pas du tout ou est-ce que je peux le mettre car mes div sont sur main.tpl

Je galère depuis quelques heures et je ne trouve rien sur internet,
Merci d'avance pour votre aide,
Cordialement,

Dernière modification par Prizio (10-04-2012 02:13:29)

Hors ligne

#3 10-04-2012 08:47:00

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 483
Site Web

Re : Formulaire de connexion sur son site

Bonjour,

Si, si, on peut intégrer du php dans main.tpl, mais indirectement.
Par exemple, dans main.tpl, on peut écrire :

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<pun_head>
</head>

<body>
<pun_include "mon_fichier.php"> <!--modif oto ligne ajoutée -->
<div id="pun<pun_page>" class="pun">
<div class="top-box"><div><!-- Top Corners --></div></div>
<div class="punwrap">

La balise <pun_include .... > va inclure le fichier php qui doit être obligatoirement situé dans le dossier include\user\.


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

#4 10-04-2012 14:47:10

Prizio
Nouveau Membre
Inscription : 10-04-2012
Messages : 4

Re : Formulaire de connexion sur son site

Salut Otomatic,

Merci pour la rapidité de ta réponse smile

C'est parfait, problème résolu, j'ai réussi à faire ce que je voulais, merci pour ton aide.

Cordialement

Hors ligne

#5 10-04-2012 15:26:50

adaur
Habitué très actif
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 937
Site Web

Re : Formulaire de connexion sur son site

Salut,

Super tuto pour tous ceux qui voudraient intégrer leur site à FluxBB, ou l'inverse tongue

Une petite remarque concernant la sécurité: utiliser $_SERVER['PHP_SELF']; n'est pas sûr (voir cet article).

A la place, tu peux appliquer un pun_htmlspecialchars dessus ou $_SERVER['SCRIPT_NAME'].


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#6 11-04-2012 01:14:00

Prizio
Nouveau Membre
Inscription : 10-04-2012
Messages : 4

Re : Formulaire de connexion sur son site

(Re) Bonjour,

Je voulais ajouter un petit truc croustillant, c'est à dire l'affichage d'un nouveau MP sur ce bloc connexion.
Je veux dire par la :
-si 0 MP : affichage "MP"
-si 1 nouveau MP : affichage "(1) MP"
-->Exactement comme dans le menu du header.

J'ai ajouté ce module de message privé :
http://fluxbb.fr/forums/viewtopic.php?id=10824&p=1

J'ai ensuite fait un require de cette page (ou ce trouve le code d'origine inclue dans le menu):
plugins/apms/header_add2.php

Mais rien de rien, espace vide.

Quelqu'un à déjà essayé cela ? Une sollution ou un suggestion ?

Cordialement,

Hors ligne

#7 11-04-2012 11:45:39

adaur
Habitué très actif
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 937
Site Web

Re : Formulaire de connexion sur son site

Je t'ai répondu sur le topic de la mod (http://fluxbb.fr/forums/viewtopic.php?p … 93#p106693)


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#8 17-04-2013 19:01:29

david18
Habitué très actif
Lieu : France
Inscription : 28-10-2012
Messages : 466
Site Web

Re : Formulaire de connexion sur son site

Bonsoir ,

j'ai une question au niveau de quicklogin.php  , est ce que c'est possible de rajouter un lien dans le fichier cars lorsque l'on rendre les login et mot de passe on est rediriger sans faire apparaître la page forum ?


Ps: j'ai essayer d'inclure du php dans main.tpl ( comme oto la citer ) et j'ai ce message :

Une erreur s'est produite
Erreur: Impossible de traiter utilisateur comprend <pun_include "mon_fichier.php"> de main.tpl de modèle. Il n'y a aucun fichier ni dans le répertoire des modèles, ni dans le mode d'inclure le répertoire ..


et est ce que c'est possible d'inclure le fichier lastpost.php ici => <pun_include "mon_fichier.php">

merci d'avance

cdlt

david18

Dernière modification par david18 (17-04-2013 19:16:29)

Hors ligne

#9 18-04-2013 10:23:22

Defaz
Habitué très actif
Inscription : 30-11-2006
Messages : 700
Site Web

Re : Formulaire de connexion sur son site

Salut,

Tu as une erreur car il ne trouve pas le fichier, il faut donc suivre ce qu'Otomatic a dit précédemment.

Otomatic a écrit :

La balise <pun_include .... > va inclure le fichier php qui doit être obligatoirement situé dans le dossier include\user\.

Pour la redirection, il faut modifier une partie du fichier login.php pour être redirigé correctement et le mieux serait même d'en créer un autre à la façon de logout.php d'Ishimaru Chiaki

En modifiant ceci :

define('SITE_ROOT', '/sites/ishimaru-v6/index.php'); //Page where you want your users to be redirected.  Use $_SERVER['PHP_SELF'] to find it

Qui agit sur le ligne :

redirect(SITE_ROOT, $lang_login['Logout redirect']);

Hors ligne

Pied de page des forums