begin process at 2010 03 20 17:06:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASS USER POUR FORUM VBULLETIN [PHP5]

CLASS USER POUR FORUM VBULLETIN [PHP5]




 Description

Une class User qui vous permet de lire les infos de Vbulletin comme :
-ip
-savoir si on est connecte
-l'id du user
-sa langue
-savoir si il est admin

Source

  • <?php
  • mysql_connect('****', '****', '****');
  • define('TABLE_PREFIX', '');
  • define('DEFAULT_LANGUE', 0);
  • /**
  • * @brief une class de connexion a Vbulletin
  • */
  • class User{
  • /**
  • * @param $session l'id de session (generalement : $_COOKIE['bbsessionhash'])
  • */
  • public function __construct($session){
  • $this->session=$session;
  • $r=mysql_query('SELECT * FROM forum.'.TABLE_PREFIX . 'session
  • WHERE sessionhash = "' .mysql_real_escape_string($session).'"') or die(mysql_error());
  • $info=mysql_fetch_assoc($r);
  • if ($info==false){
  • $this->id=0;
  • $this->logued=0;
  • $this->ip=ip2long($_SERVER['REMOTE_ADDR']);
  • $this->langue=DEFAULT_LANGUE;
  • }else{
  • $this->id=$info['userid'];
  • $this->logued=$info['loggedin'];
  • $this->ip=ip2long($info['host']);
  • $this->langue=$info['languageid'];
  • $info=mysql_query('SELECT 1 FROM forum.'.TABLE_PREFIX . 'administrator WHERE userid='.$this->id) or die(mysql_error()) ;
  • if (mysql_num_rows($info)==0){
  • $this->admin=false;
  • }else{
  • $this->admin=true;
  • }
  • }
  • }
  • /**
  • * @brief dit si on est logue ou non
  • * @return boolean
  • */
  • public function islogued(){return $this->logued!=0;}
  • /**
  • * @brief dit si on est admin ou non
  • * @return boolean
  • */
  • public function isadmin(){return $this->admin;}
  • /**
  • * @brief renvoie l'id
  • * @return integer
  • */
  • public function getid(){return $this->id;}
  • /**
  • * @brief renvoie l'ip
  • * a utiliser avec long2ip si on veut un format texte
  • * @return integer
  • */
  • public function getIp(){ return $this->ip; }
  • /**
  • * @brief renvoie la langue
  • * @return integer
  • */
  • public function getLangue(){ return $this->langue; }
  • //! la session
  • private $session;
  • //! l'id du user dans la table user
  • private $id;
  • //! dit si le user est logue
  • private $logued;
  • //! la langue du user
  • private $langue;
  • //! son ip au format numerique
  • private $ip;
  • }
  • $u=new User($_COOKIE['bbsessionhash']);
  • echo 'ip : '.$u->getip().'<br/>';
  • echo 'langue : '.$u->getlangue().'<br/>';
  • if ($u->islogued()){
  • echo 'id : '.$u->getId().'<br/>';
  • if ($u->isAdmin()){
  • echo 'Admin';
  • }
  • }else{
  • echo 'non logue';
  • }
  • ?>
<?php

mysql_connect('****', '****', '****');

define('TABLE_PREFIX', '');
define('DEFAULT_LANGUE', 0);

/**
* @brief une class de connexion a Vbulletin
*/
class User{
	/**
	* @param $session l'id de session (generalement : $_COOKIE['bbsessionhash'])
	*/
	public function __construct($session){
		$this->session=$session;

		$r=mysql_query('SELECT * FROM forum.'.TABLE_PREFIX . 'session
			WHERE sessionhash = "' .mysql_real_escape_string($session).'"') or die(mysql_error());
		$info=mysql_fetch_assoc($r);

		if ($info==false){
			$this->id=0;
			$this->logued=0;
			$this->ip=ip2long($_SERVER['REMOTE_ADDR']);
			$this->langue=DEFAULT_LANGUE;
		}else{
			$this->id=$info['userid'];
			$this->logued=$info['loggedin'];
			$this->ip=ip2long($info['host']);
			$this->langue=$info['languageid'];

			$info=mysql_query('SELECT 1 FROM forum.'.TABLE_PREFIX . 'administrator WHERE userid='.$this->id) or die(mysql_error()) ;
			if (mysql_num_rows($info)==0){
				$this->admin=false;
			}else{
				$this->admin=true;
			}
		}
	}
	/**
	* @brief dit si on est logue ou non
	* @return boolean
	*/
	public function islogued(){return $this->logued!=0;}
	/**
	* @brief dit si on est admin ou non
	* @return boolean
	*/
	public function isadmin(){return $this->admin;}
	/**
	* @brief renvoie l'id
	* @return integer
	*/
	public function getid(){return $this->id;}
	/**
	* @brief renvoie l'ip
	* a utiliser avec long2ip si on veut un format texte
	* @return integer
	*/
	public function getIp(){ return $this->ip; }
	/**
	* @brief renvoie la langue
	* @return integer
	*/
	public function getLangue(){ return $this->langue; }
	//! la session
	private $session;
	//! l'id du user dans la table user
	private $id;
	//! dit si le user est logue
	private $logued;
	//! la langue du user
	private $langue;
	//! son ip au format numerique
	private $ip;
}

$u=new User($_COOKIE['bbsessionhash']);

echo 'ip : '.$u->getip().'<br/>';
echo 'langue : '.$u->getlangue().'<br/>';

if ($u->islogued()){
	echo 'id : '.$u->getId().'<br/>';
	if ($u->isAdmin()){
		echo 'Admin';
	}
}else{
	echo 'non logue';
}
?>

 Conclusion

n'oubliez pas :

-modifiez vos parametres de connexion

-c'est une class php5, alors : le premier qui me dit que ca parse error parce-qu'il utilise php4 signera ici son certificat d'innaptitude a la lecture...


 Sources du même auteur

Source avec une capture IMAGES GENETIQUES
Source avec Zip Source avec une capture RUBIX CUBE
Source avec Zip INTERPRETEUR BRAINFUCK
Source avec Zip PROXY HTTP : SAUVEZ VOS VIDEOS PREFEREES.
Source avec une capture ECRIRE UN TEXTE EN CERCLE SUR UNE IMAGE

 Sources de la même categorie

Source avec Zip CLASSE TABLE HTML DYNAMIQUE par LDDL
Source avec Zip GÉNÉRATEUR DE COUCHE DAO POUR SITE WEB À PARTIR D'UNE BASE D... par alexfool
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan

 Sources en rapport avec celle ci

Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan
Source avec Zip POO - FACTORY CLASS par Waredan
Source avec Zip CLASSE "REMPLAÇANT" LES SESSIONS PHP (AVEC VÉRIFICATION DE L... par thomvaill
GARDER LES PARAMÈTRES D'UNE CLASS À TRAVERS PLUSIEURS PAGES. par massacr

Commentaires et avis

Commentaire de yoman64 le 01/12/2007 21:52:48

Salut,
Pourquoi utilisé des die() , et non un simple retour d'erreur ? die ça fou tout en l'air , c'est pas super.

Ensuite pourquoi ne pas inclure le mysql_connect dans la classe ?

Et eeeh niveau initié c'est pas un peu poussé ? , y'a rien de très complexe ici ;)

Commentaire de coucou747 le 01/12/2007 22:05:56

pour un truc comme ca, on utilise pas mysql_connect normalement, ni mysql_query, on a une class pour abstraire, sauf que pour que chacun puisse mettre sa class a la place, j'ai mis mysql_connect et mysql_query ici (pour la ou je l'utilise, je n'ai pas mis ces deux fonctions, j'ai une autre class pour gerer ca... idem, les die ne sont pas presents dans ma version en production, j'ai un truc qui lance une exception...)

ta remarque sur le niveau de la source m'etonne un peu en fait, parce-que c'est de la POO a peu pres correctement codee, quand je regarde tes sources j'en vois une niveau expert codee comme un porc et sans POO... alors permet moi de te dire que je ne passerais certainement pas ca a "debutant" si tu n'argumentes pas plus que ca...

ca a beau etre court, c'est de la POO en Php5, donc ca ne vaut pas debutant...

j'ai poste ca parce-que ca peut-etre utile a tout le monde, puisque ca peut-etre utile a tout le monde, je ne voulais pas de dependances (genre ne pas utiliser mes autres classes comme mysql_Exception ou abstration de db), et j'allais pas mettre debutant parce-que quand je vois ce qui est poste en expert ici, je me dis que cette source vaut carement mieux que debutant (sans valloir expert compare a ce que je code a cote, ou ce que code malalam, FHX, codefalse ou quelques autres...)

Commentaire de yoman64 le 01/12/2007 22:20:33

C'est drole j'étais sur que tu allais répondre ça. Ceci dit il est important de noté que ma source que j'ai noté "expert" a été posté en 2004, je débutait en php et la POO en php était peu présente.

Mais puisque cela semble t'offusqué , et avec raison, je vais corrigé la situation voir peut être meme effacer ma source, puisque tu semble te basé sur ça pour jugé de mes compétences de programmeur, ce qui est loin d'être juste.

Pour le mysql_connect, je comprends maintenant, pour le die() par contre ta version ou pas il serait judicieux de l'évité.

Et, sans vouloir t'offusquer, cela a beau être de la POO correctement codé, je n'ai vu null part une règles qui dit que POO=Expert...
La POO est la pour simplifié la vie, et la programmation en générale, Il n'y a donc rien de très complexe a comprendre dans ton code, c'est pour cette raison que j'ai "osé" dire que cela ne valait pas expert.

Commentaire de coucou747 le 01/12/2007 22:30:35

je ne juge pas ton niveau, je juge le niveau de ma source en me basant sur le niveau des autres soures que je trouve sur le net... J'espere que tu ne juges pas que je suis debutant en disant ca d'ailleur, parce-qu'apres tout ce que j'ai poste ici, ca me vexerait profondement...

j'ai pas mis expert non plus, j'ai mis initie parce-que ca vaut plus que du niveau debutant, c'est tout... la POO c'est pas pour les debutants, apres, un bon design pattern ou une source vraiment travaillee, c'est peut-etre niveau expert, ca depend comment c'est traite...

si j'ai mis un or die, c'est pour que ceux qui copient collent ma source sans ajouter de class d'abstration de bdd aient quand eme une gestion des erreurs.

Commentaire de neigedhiver le 01/12/2007 22:59:28

Salut les noobs, finie la baguarre de maternelle ? (comment c'est facile... Pardonnez mes sarcasmes et mon esprit provoc', c'est juste pour m'amuser).

Bon euh j'ai envie de mettre mon grain de sel.

Je suis d'acc avec Coucou747 sur le fait que c'est pas une source débutant. Mais ça ne vaut pas non plus expert. Et je pense que Coucou l'a parfaitement expliqué : les débutants, il suffit de le voir sur phpCS, n'utilisent pas de classes. Aucune. Jamais. Ils font de la programmation procédurale sans comprendre ce qu'est la POO.
Par expérience, je sais que quand quelqu'un comprend la puissance des classes et de la SPL de php5, il a l'impression de débarquer dans un nouvel univers de PHP. Pourtant, c'est le même language. C'est juste pas la même manière de penser. Ca fait toute la différence entre un débutant et un initié.

C'est sûr, c'est pas une classe très compliquée. Et son utilisation est simple. Mais c'est pas parce qu'elle est simple à comprendre et à utiliser qu'elle a été simple à développer. Et connaissant un peu le bonhomme à travers divers commentaires, sources etc, ben je me doute que s'il publie cette classe, c'est parce qu'elle est optimisée niveau perfs... Et pour avoir vu pas mal de sources de débutants, il est clair qu'il y a un gouffre entre les codes optimisés de Coucou et ceux d'un débutant.

Bon enfin voilà, j'ai pas apporté grand chose, j'avais juste envie de parler.

Sinon ça va ?

Commentaire de yoman64 le 01/12/2007 23:13:24

Évidement la programmation orienté objet est rarement la première chose qu'un débutant apprends. Mais comme tu dis, c'est pas forcément plus compliqué, c'est simplement une façon differente de voir les choses.

M'enfin tout ce que j'essais de dire c'est que, c'est facile de se comparé au débutants, faut quand meme bien jugé un niveau. Sur ce point je suis d'accords avec vous, un débutant ne comprends pas forcément ce qu'est une classe, mais un code orienté objets est-til automatiquement initié? Je réponderais que non. Mais évidement si on compare le code aux codes de débutants c'est une source initié.


PS: d'après moi, cette classe a été aussi facile a développer pour coucou747 qu'elle est facile a comprendre :P

Sur ce, je retire donc ma remarque a propos du niveau puisqu'il y a plusieurs façons de voir les choses.Et non coucou, je ne t'ai jamais vu comme étant un débutant en php, simplement un programmeur (avancé) qui a des idées bien arreté sur comment on devrait programmé en php :P

Commentaire de coucou747 le 01/12/2007 23:19:26

bien arretes ;) c'est pas forcement faux, ca depend seulement de la partie de php que tu consideres, on arrive rarement ici a des debats genre moteur de template classique vs XML + XSLT ou vs un modele de classe a la DOM ou a la java... pourtant c'est souvent tres interessant et la dessus, j'arrive a trouver du pour et du contre pour toutes les methodes :)

par contre je suis arrete sur <? contre <?php

mais svp, on laissera les jugements personnels pour le MP, et on parlera plus de la source :)

Commentaire de malalam le 02/12/2007 15:36:40 administrateur CS

Hello,

le débat du niveau de la source est stérile. C'est une question subjective. Cette source n'a rien à faire en débutant : un dévutant est incapable de faire ça, ou de comprendre ça. Un, dbutant ne comprend généralement rien à la POO. Il ne saura même pas l'utiliser, si simple soit la POO. C'est un fait.
Cette source ne vaut pas non plus le niveau expert.
Coucou l'a mise en initié, ça me parait correct vu que les 2 autres niveaux proposés ne correspondent pas.
Je ne comprends pas non plus les or die(), ceci dit. Le fait de ne pas vouloir implémenter d'abstraction DB pour faciliter l'utilisation de ce code ne justifie pas, pour moi, le or die. C'est un code PHP5, et donc les exceptions seraient supportées par un utilisateur lambda. Ou des trigger_error(), pourquoi pas. Mais un or die(), je ne vois pas l'intérêt ici.
En dehors de ça, c'est bien codé, évidemment, il n'y a pas grand chose à dire :-)
Ne connaissant pas vbulletin, je n'irai pas plus loin dans les commentaires!

Commentaire de coucou747 le 02/12/2007 15:40:57

je ne connais pas non plus vbulletin, j'avais juste besoin de ca pour un site...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

multi session user, moderateur, admin [ par speedylol ] Bonjour quelqu'un serais me guider vers la solutions que je recherche pour cr&#233;er un espace membre avec une multi session , mon script tour deja a Probleme de session [ par chris tuckers ] Bonjour a vous CSistes !!!Je n'arrive pas &#224; recuperer des donn&#233;es qui ont &#233;t&#233; mises en cession de cette facon : $_SESSION['nom_adm Encore et toujours les sessions [ par chris tuckers ] Hi !J'ai encore et toujours un problemes de session.Voici les donn&#233;es que je mets en session :if ($loginOK) {$_SESSION['id_admin'] = $data['id_ad session avec objet [ par Rhazou ] Bonjour,Je me tourne vers vous car je suis face a un pb que je n'arrive pas a résoudre.Je reg un objet dans une session, par d'erreur. si j'essay de l question sur LDAP [ par Dyr3e ] bonjour,je dois r&#233;aliser une page de login / mot de passe avec ldap sous php.j'ai regarder ce qui existait deja mais je ne peux pas utiliser dans /!\Help/!\ Problème de variable session [ par ripoux ] Bonjour,J'ai un gros soucis... je dois rendre mon travail de dipl&#244;me d'ici &#224; ce soir et j'ai d&#233;couvert un gros bug et faisant mes Test problème de session php [ par oriviera ] Bonjour,Voil&#224; gros problme avec les sessions je sais ce n'est pas nouveau, mais je ne comprend rien car dans un cas de figure ca fonctionne tr&#2 Variable de session [ par Frank19 ] Jai un probleme un peu bizzare avec mes variables de sessions. Je m'explique.Sur ma station serveur tout va super bien ... jenregistre une variable qu Help session [ par Antidote ] Bonjur j'ai un probleme avec l'utilisation de me session. est ce que les _ sont autorisé dans les nom de session ? tel que $_SESSION['user_id'] parce Admin Session + Htaccess [ par KheYrO ] Bonjour a tous,&nbsp;&nbsp;&nbsp;J'ai quelques soucis Je&nbsp; ne vois pas comment on&nbsp;&nbsp; peut faire une zone d'aministration sur son site san


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales