Zone membre en symbiose avec le forum phpbb

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 667 fois - Téléchargée 28 fois


Contenu du snippet

permet de creer une zone membre en symbiose avec un forum phpbb . des que l'on se logue sur phpbb on l'est aussi tot sur la zone membre et le contraire

tuto sur les cookies phpbb : http://iow4.net

Source / Exemple :


1 ere source ( autologin.php ) permet de reconnaitre un user qui c'est connecte sous phpbb 
------------------------------------------
<?php 
session_start();
///////////////////////////////////////////////////////
/* log automatique un user d'apres son cookie phpbb */ 
/////////////////////////////////////////////////////
include("config.php"); 

/* on chope le nom du cookie sous phpbb */ 
	
	// interoge la base mysql 
	$reponse = mysql_query("SELECT * FROM phpbb_config   WHERE  config_name='cookie_name'  ") ; 
	while ($donnees = mysql_fetch_array($reponse) )
	{
	$nom_cookie = $donnees['config_value']; 
	}
	
	// on ajoute le grain de sel 
	$cookie1 = $nom_cookie."_sid" ; 
	$cookie2 = $nom_cookie."_data" ; 
	
/* test de l'existence de ces petites betes ;) */
	
	if (isset ($HTTP_COOKIE_VARS[$cookie1]) AND isset ($HTTP_COOKIE_VARS[$cookie2]))
	{
	
		// extraction du cookie 
				
		$tmp = array(); 
		$tmp = unserialize($HTTP_COOKIE_VARS[$cookie2]);
	
		$autologin_id = $tmp['autologinid'];
		$user_id = $tmp['userid'];
		
		// login du membre 
		
			// recupere le pseudo 
			
					// verifie qu'il existe 
					$retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM phpbb_users WHERE user_id='$user_id'  AND user_password='$autologin_id'  ") or die("erreur dans le requete sql ") ; // compte 
					$donnees = mysql_fetch_array($retour);
					$nbr = $donnees['nbre_entrees'];
					if ( $nbr == 0 ) 
					{
					echo "erreur dans votre identification" ; 
					exit(); 
					}
					
					// chope pseudo 
					$reponse = mysql_query("SELECT * FROM phpbb_users WHERE user_id='$user_id'  AND user_password='$autologin_id'  ") ; 
					while ($donnees = mysql_fetch_array($reponse) )
					{
						$pseudo = $donnees['username']; 
					}
					
			// accorde les droits 
			echo "authentification reussite" ; 
			$_SESSION['auth'] = true ; 
			$_SESSION['pseudo'] = $pseudo ; 
			header("location:zone_rouge/"); 
	
	}
	else 
	{
		header("location:index.php"); // renvoie vers le formulaire 
	}
	
	
	
	
?>
-----------------------------
2eme page : log un membre qui ne l'ai pas deja sur le forum en creant le meme cookie que phpbb
d'apres un pseudo et un pass 
-----------------------------
<?php 
session_start(); 
include("config.php"); 
///////////////////////////////////////////////
///////////////////////////////////////////////

/* recupere les var et test */ 

	// test 
	if ( empty ($_POST['pseudo'])) 
	{
	echo "pas de pseudo renseigne" ; 
	exit(); 
	}
	if ( empty ($_POST['pass'])) 
	{
	echo "pas de pass renseigne" ; 
	exit(); 
	}
	// recup 
	$pseudo = $_POST['pseudo']; 
	$pass = $_POST['pass']; 
	
	// crypt le mot de pass en md5
	$pass_crypt = md5($pass); 
	
/* verifie dans phpbb_users */ 
	$retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM phpbb_users WHERE username='$pseudo' AND user_password='$pass_crypt'  ") or die("erreur dans le requete sql ") ; // compte 
	$donnees = mysql_fetch_array($retour);
	$nbr = $donnees['nbre_entrees'];
	if ( $nbr == 0 ) 
	{
	echo "erreur dans votre identification" ; 
	exit(); 
	}
	if ( $nbr != 0 ) // c'est ok on accorde les droits 
	{
	echo "authentification reussite" ; 
	$_SESSION['log'] = true ; 
	$_SESSION['pseudo'] = $pseudo ; 
	
	// cherche l'id du pseudo 
	$reponse = mysql_query("SELECT * FROM phpbb_users   WHERE  username='$pseudo'  ") ; 
		while ($donnees = mysql_fetch_array($reponse) )
		{
		$id = $donnees['user_id']; 
		}
	
	/* creation du cookie conforme a phpbb */
		
		// chope le nom du cookie 
		$reponse = mysql_query("SELECT * FROM phpbb_config   WHERE  config_name='cookie_name'  ") ; 
		while ($donnees = mysql_fetch_array($reponse) )
		{
		$nom_cookie = $donnees['config_value']; 
		}
		
		// sa duree 
		$reponse = mysql_query("SELECT * FROM phpbb_config   WHERE  config_name='session_length'  ") ; 
		while ($donnees = mysql_fetch_array($reponse) )
		{
		$dure_cookie = $donnees['config_value']; 
		}
		
		// on ajoute le grain de sel 
		$cookie1 = $nom_cookie."_sid" ; 
		$cookie2 = $nom_cookie."_data" ; 
		
		// on serialise les donnees pour le 2eme cookie 
		$donnees = array(); 
		$donnees['autologinid'] = $pass_crypt ; 
		$donnees['userid'] = $id ; 
		$v = serialize($donnees); 
		
		// creation de la commande de cookie
		setcookie($cookie1,session_id(),time()+$dure_cookie,"/");
	
		// 2eme cookie 
		setcookie($cookie2,$v,time()+$dure_cookie,"/");

	
	// redirige 
	header("location:zone/"); 
	}
?>
------------------------------

Conclusion :


voila je n'avais jamais vu de source semblable sur le net alors j'ai codé
pour le site http://webown.free.fr

Pour des remarques/questions allez sur : http://iow4.net/forum

A voir également

Ajouter un commentaire

Commentaires

coockiesch
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3 -
Salut!
L'idée est pas mal mais alors pourquoi utiliser des variables de session?

Ce que j'avais fais c'est que j'avais rajouté des variables à la session de phpBB ( qui est stockée dans une table mysql ) et comme ca je reste 100% phpBB

@++

R@f
iow4
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4 -
lol le systeme d'authentification de phpbb j'y comprend rien !!

alors pour la zone membre je cree une bonne variable qui me dit si oui ou non l'user est logue
cs_Shisui
Messages postés
34
Date d'inscription
jeudi 10 juin 2004
Statut
Membre
Dernière intervention
17 janvier 2007
-
Symbiose, Symbiose c'est vite dit :) Pour que ton script soit encore plus intégré au systéme de phpBB, faudrait rajouter et modifier quelques petites choses, par exemple, au tout début de ton fichier un :
define('IN_PHPBB', true); // Pour ne pas que les scripts suivants fassent un méchant die() ^^
$phpbb_dir = './'; // Indiquer ici le répertoire racine de phpBB
include($phpbb_dir . 'extension.inc'); // Extension des fichiers du forum
include($phpbb_dir . 'common.'.$phpEx); // Fichier principal de phpBB

Ensuite, avec ça, tu peut remplacer tout les noms de tables par les constantes de phpBB (et oui, ya des gens qui mettent pas forcément phpbb_ en préfixe des table ^^), à savoir les plus importantes ici : CONFIG_TABLE pour phpbb_config et USERS_TABLE pour phpbb_users.

Et aussi, tu peut réduire un bout de code de deux requetes SQL à une seule requéte :
$retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM phpbb_users WHERE user_id='$user_id' AND user_password='$autologin_id' ") or die("erreur dans le requete sql ") ; // compte
$donnees = mysql_fetch_array($retour);
$nbr = $donnees['nbre_entrees'];
if ( $nbr == 0 )
{
echo "erreur dans votre identification" ;
exit();
}

// chope pseudo
$reponse = mysql_query("SELECT * FROM phpbb_users WHERE user_id='$user_id' AND user_password='$autologin_id' ") ;
while ($donnees = mysql_fetch_array($reponse) )
{
$pseudo = $donnees['username'];
}

Peut etre remplacé par :
$retour = mysql_query("SELECT username FROM phpbb_users WHERE user_id='$user_id' AND user_password='$autologin_id' ") or die("erreur dans le requete sql ") ;
if (!mysql_num_rows($retour))
{
exit("erreur dans votre identification");
}
$donnees = mysql_fetch_array($retour)
$pseudo = $donnees['username'];

mysql_num_rows() retourne le nombre de ligne qui on été affectées par la requéte, donc si le pseudo n'existe pas ca sera 0, donc !mysql_num_rows($retour) sera vérfié ;) (NB: tu peut mettre le message de sortie directement dans exit() :) )

Voilà, sinon j'ai pas trop regardé en détail mais le reste a l'air pas mal ^^
@++
iow4
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4 -
merci mais symbiose j'entend par que il se logue entre eux

il sont pas completement ensemble enfete j'ai fait sa car le systeme de session et Phpbb est trop complique
donc sa permet d'aboutir sur une zone membre simple
cs_Anthomicro
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Salut,

"Et aussi, tu peut réduire un bout de code de deux requetes SQL à une seule requéte :"

on parle de PHPBB là, pour une parfaite symbiose faudrait une identification qui nous fasse au moins 15 requêtes ^^

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.