[INFO] sur l'utilisation des sessions de phpBB3 sur son site

Ce forum aborde toutes les questions qu'un codeur ou webmaster pourrait se poser, et n'ayant aucun rapport direct avec phpBB.
Tout ce qui peut concerner la récupération des sessions de phpBB sur votre site, doit se faire dans ce forum.

Modérateur: Equipe

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar spitfire pat » 27 Nov 2010 à 19:53

dans ces lignes
function aff_fofo()
{
define('IN_PHPBB', true);
$phpbb_root_path = './phpBB3/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
ce que j'ai mis en rouge est inutile, $phpEx et $phpbb_root_path ont délà été définis et common.php déjà inclus
Avatar de l’utilisateur
spitfire pat
MOD Contest Winner
MOD Contest Winner
 
Messages: 15313
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar debugtest » 27 Nov 2010 à 23:00

Merci pour la célérité de ta réponse, mais j aurais du préciser qu'avant de remettre les includes et compagnie j'avais essayer sans et que je tombais sur une erreur, bon histoire d'en être sur j ai réessayé pour pas dire de bêtises :p et l'erreur suivante est ressortie:

Fatal error: Call to a member function on a non-object in /homepages/41/d345556543/htdocs/cyclo/index.php on line 224

ce qui correspond a:

$result = $db->sql_query($sql);

la requête sql du fofo, j'en ai déduis que je devrais sans doute passer a ma fonction un paramètre qui contiendrais un pointeur vers $db mais ne connaissant pas l'objet en question j ai du mal a voir comment le transmettre, c est pourquoi j avais essayer de repasser une 2eme fois les includes (ouai j ai essayer de tricher, pas bien).

J ai un peu plus l'habitude d'utiliser les pointeurs du C++ et comme ca existe pas vraiment en php je suis un peu perdu :( bon je suppose qu il y a une solution quand même, je vais m'obstiner un peu et si je trouve pas, je viendrais le préciser.
debugtest
Posteur néophyte
Posteur néophyte
 
Messages: 6
Inscription: 15 Nov 2007 à 17:40

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar spitfire pat » 27 Nov 2010 à 23:21

il te faut mettre au début de ta fonction
Code: Tout sélectionner
global $db;
Avatar de l’utilisateur
spitfire pat
MOD Contest Winner
MOD Contest Winner
 
Messages: 15313
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar debugtest » 28 Nov 2010 à 00:34

a bin oui peu être aussi, merci en tout cas. Cependant en cherchant j'ai fini par y arriver d'une autre manière:

appelle de fonction:

aff_fofo($db,$user);

et fonction a proprement parlé:

function aff_fofo(&$db,&$user)

Et la du coup ca roule :) ce qui tombe bien car je comptais passer des paramètres a ma fonction du style ID du fofo a afficher et nombre de post a afficher donc au lieu de passer 2 paramètres j en passe 4 et ca marche. Bon toute fois je vais voir si ca marche aussi avec global sur $db et sur le $user car il faut aussi $user sans quoi ca passe pas.

merci pour tout la réponse et bravo pour les topics très bien fait et très clair, c est un régal ;)

Edite: voilou j'ai essayé avec global ca marche très bien aussi et ca évite de charger la fonction inutilement ;) encore merci
debugtest
Posteur néophyte
Posteur néophyte
 
Messages: 6
Inscription: 15 Nov 2007 à 17:40

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar fantomeus » 28 Nov 2010 à 13:20

Bonjour à tous :)

j'ai récupéré un script de news et j'ai décidé de le protéger,... fin même sans le protéger, ca bug...
liste_news.php
Code: Tout sélectionner
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Liste des news</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <style type="text/css">
        h2, th, td
        {
            text-align:center;
        }
        table
        {
            border-collapse:collapse;
            border:2px solid black;
            margin:auto;
        }
        th, td
        {
            border:1px solid black;
        }
        </style>
    </head>
   
    <body>
 
<h2><a href="rediger_news.php">Ajouter une news</a></h2>
<?php
define('IN_PHPBB', true);
$phpbb_root_path =  '../phpbb3/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$user->session_begin();
$auth->acl($user->data);
$user->setup('');


//-----------------------------------------------------
// Vérification 1 : est-ce qu'on veut poster une news ?
//-----------------------------------------------------
if (isset($_POST['titre']) AND isset($_POST['contenu']))
{
    $titre = addslashes($_POST['titre']);
    $contenu = addslashes($_POST['contenu']);
    // On vérifie si c'est une modification de news ou pas
    if ($_POST['id_news'] == 0)
    {
        // Ce n'est pas une modification, on crée une nouvelle entrée dans la table
        mysql_query("INSERT INTO news VALUES('', '" . $titre . "', '" . $contenu . "', '" . time() . "')");
    }
    else
    {
        // On protège la variable "id_news" pour éviter une faille SQL
        $_POST['id_news'] = addslashes($_POST['id_news']);
        // C'est une modification, on met juste à jour le titre et le contenu
        mysql_query("UPDATE news SET titre='" . $titre . "', contenu='" . $contenu . "' WHERE id='" . $_POST['id_news'] . "'");
    }
}
 
//--------------------------------------------------------
// Vérification 2 : est-ce qu'on veut supprimer une news ?
//--------------------------------------------------------
if (isset($_GET['supprimer_news'])) // Si on demande de supprimer une news
{
    // Alors on supprime la news correspondante
    // On protège la variable "id_news" pour éviter une faille SQL
    $_GET['supprimer_news'] = addslashes($_GET['supprimer_news']);
    mysql_query('DELETE FROM news WHERE id=\'' . $_GET['supprimer_news'] . '\'');
}
?>
<table><tr>
<th>Modifier</th>
<th>Supprimer</th>
<th>Titre</th>
<th>Date</th>
</tr>
<?php
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr>
<td><?php echo '<a href="rediger_news.php?modifier_news=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_news.php?supprimer_news=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo stripslashes($donnees['titre']); ?></td>
<td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
</tr>
<?php
} // Fin de la boucle qui liste les news

?>
</table>
</body>
</html>


rediger_news.php
Code: Tout sélectionner
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Rédiger une news</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <style type="text/css">
        h3, form
        {
            text-align:center;
        }
        </style>
    </head>
   
    <body>
<h3><a href="liste_news.php">Retour à la liste des news</a></h3>
<?php

mysql_connect("localhost", "*******", "******");
mysql_select_db("*****");
if (isset($_GET['modifier_news'])) // Si on demande de modifier une news
{
    // On protège la variable "modifier_news" pour éviter une faille SQL
    $_GET['modifier_news'] = mysql_real_escape_string(htmlspecialchars($_GET['modifier_news']));
    // On récupère les infos de la news correspondante
    $retour = mysql_query('SELECT * FROM news WHERE id=\'' . $_GET['modifier_news'] . '\'');
    $donnees = mysql_fetch_array($retour);
   
    // On place le titre et le contenu dans des variables simples
    $titre = stripslashes($donnees['titre']);
    $contenu = stripslashes($donnees['contenu']);
    $id_news = $donnees['id']; // Cette variable va servir pour se souvenir que c'est une modification
}
else // C'est qu'on rédige une nouvelle news
{
    // Les variables $titre et $contenu sont vides, puisque c'est une nouvelle news
    $titre = '';
    $contenu = '';
    $id_news = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification
}
?>
<form action="liste_news.php" method="post">
<p>Titre : <input type="text" size="30" name="titre" value="<?php echo $titre; ?>" /></p>
<p>
    Contenu :<br />
    <textarea name="contenu" cols="50" rows="10">
    <?php echo $contenu; ?>
    </textarea><br />
   
    <input type="hidden" name="id_news" value="<?php echo $id_news; ?>" />
    <input type="submit" value="Envoyer" />
</p>
</form>
</body>
</html>
<?php


?>

j'ai l'impression que ce sont les variable $_post & $_get qui font défaut a cause du common.php qui définie aussi ces règles donc voilà je souhaiterais votre soutient car lorsque j'essaye d'insérer une news, il me balance une page vide par contre avec ce système si j'essaye de supprimer une news ca fonctionne correctement et delete mais l'ajout/modif ne fonctionne pas... je n'y comprends plus rien ^^"
fantomeus
Posteur néophyte
Posteur néophyte
 
Messages: 7
Inscription: 07 Fév 2009 à 20:49

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar spitfire pat » 28 Nov 2010 à 15:15

- d'abord une remarque: dans liste_news.php tu lances une session phpBB après avoir affiché du texte, ça n'est pas bon
- ensuite, puisque tu utilises les sessions, il vaut mieux utiliser la fonction request_var pour récupérer les varaiables $_GET ou $_POST, ça sera davantage sécurisé que addslashes($_POST[...])
Avatar de l’utilisateur
spitfire pat
MOD Contest Winner
MOD Contest Winner
 
Messages: 15313
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar fantomeus » 30 Nov 2010 à 19:13

Code: Tout sélectionner
<?php

define('IN_PHPBB', true);
$phpbb_root_path =  '../phpbb3/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common2.' . $phpEx);
$user->session_begin();
$auth->acl($user->data);
$user->setup('');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Liste des news</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <style type="text/css">
        h2, th, td
        {
            text-align:center;
        }
        table
        {
            border-collapse:collapse;
            border:2px solid black;
            margin:auto;
        }
        th, td
        {
            border:1px solid black;
        }
        </style>
    </head>
   
    <body>
 
<h2><a href="rediger_news.php">Ajouter une news</a></h2>
<?php



//-----------------------------------------------------
// Vérification 1 : est-ce qu'on veut poster une news ?
//-----------------------------------------------------


$titre = request_var('titre', '', true);
$contenu = request_var('contenu', '', true);
$id_news = request_var('id_news', '', true);
$id_news = (!empty($_POST['id_news']));
print_r($titre);
print_r($contenu);
print_r($id_news);
    // On vérifie si c'est une modification de news ou pas
    if ($id_news == 0)
    {
        // Ce n'est pas une modification, on crée une nouvelle entrée dans la table
        mysql_query("INSERT INTO news VALUES('', '" . $titre . "', '" . $contenu . "', '" . time() . "')");
    }
    else
    {
        // On protège la variable "id_news" pour éviter une faille SQL
       
        // C'est une modification, on met juste à jour le titre et le contenu
        mysql_query("UPDATE news SET titre='" . $titre . "', contenu='" . $contenu . "' WHERE id='" . $_POST['id_news'] . "'");
    }

 
//--------------------------------------------------------
// Vérification 2 : est-ce qu'on veut supprimer une news ?
//--------------------------------------------------------
if (isset($_GET['supprimer_news'])) // Si on demande de supprimer une news
{
    // Alors on supprime la news correspondante
    // On protège la variable "id_news" pour éviter une faille SQL
    $_GET['supprimer_news'] = addslashes($_GET['supprimer_news']);
    mysql_query('DELETE FROM news WHERE id=\'' . $_GET['supprimer_news'] . '\'');
}
?>
<table><tr>
<th>Modifier</th>
<th>Supprimer</th>
<th>Titre</th>
<th>Date</th>
</tr>
<?php
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr>
<td><?php echo '<a href="rediger_news.php?modifier_news=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_news.php?supprimer_news=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo stripslashes($donnees['titre']); ?></td>
<td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
</tr>
<?php
} // Fin de la boucle qui liste les news


?>
</table>
</body>
</html>


affichage des print_r => testtesttt

bon heu ... ca fait rien dep lus avec request_var j'ai quand même essayé... sans succès :/
fantomeus
Posteur néophyte
Posteur néophyte
 
Messages: 7
Inscription: 07 Fév 2009 à 20:49

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar gr3go » 30 Nov 2010 à 19:31

Le mieux est d'utiliser les function phpbb pour la connexion à la bdd et pour les requête sql
ça serait déjà mieux et y aller étape par étape

EDIT : Le script fonctionne très bien en utilisant les function de phpbb, je n'ai pas essayé ta version avant donc, je ne sais pas
J'ai juste changé les requêtes et utilisé les sessions
Avatar de l’utilisateur
gr3go
Posteur néophyte
Posteur néophyte
 
Messages: 56
Inscription: 27 Oct 2010 à 14:35

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar chapeul » 11 Déc 2010 à 06:05

Bonjour,
Tout d'abord merci pour ce tutoriel complet et utile :)

Je vais encore ressortir une erreur récurrente (d'après ce que j'ai lu), mais je n'arrive décidément pas à la résoudre seul... un peu d'aide serai donc bienvenue.
La connexion et le maintien de la session fonctionne très bien en local, je n'ai aucun soucis.
Mais dès que je met le système en prod, c'est autre chose:
si je passe par le forum pour effectuer les actions: connexion/déconnexion=> pas de soucis, sur le site, la session est maintenue entre les pages et je n'ai aucun messages d'erreurs.
En revanche, si je me connecte (ou déconnecte) depuis le site:
j'ai des séries de:
Code: Tout sélectionner
<b>[phpBB Debug] PHP Notice</b>: in file <b>/includes/session.php</b> on line <b>1007</b>: <b>Cannot modify header information - headers already sent by (output started at /homepages/***/index.php:1)</b><br />
qui s’enchaînent à tout va...
Pourtant, il me semble avoir correctement respecté votre tuto (code php avant tout le reste):
Code: Tout sélectionner
<?php
define('IN_PHPBB', true);
$phpbb_root_path =  '../forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$user->session_begin();
$auth->acl($user->data);
$user->setup();
include('../login_test.php');
?>

Pour lequel login_test.php contient la vérification de déconnexion/connexion.

J'espère avoir été le plus clair possible ;)
Merci d'avance.

EDIT: J'ai trouvé ! J'avais un problème d'encodage, j'ai tout en UTF-8, donc du coté de mon site: pas de problème, et quand je change l'encodage de mon fichier d'initialisation et de création de sessions (passer de UTF-8 à ANSI) ça fonctionne parfaitement. Plus de messages d'erreur et mes sessions restent.
Par contre, si quelqu'un peux m'expliquer pourquoi je perd automatiquement la session quand j'envois des variables POST, ça m'aiderai beaucoup :)
Dernière édition par chapeul le 18 Déc 2010 à 06:32, édité 1 fois.
chapeul
Posteur néophyte
Posteur néophyte
 
Messages: 1
Inscription: 11 Déc 2010 à 05:52

connexion au forum a partir du site

Messagepar blingo » 17 Déc 2010 à 12:27

bonjour,
j'ai installer phpbb3 sur mon site , et je veux qu'a chaque fois que je me connecte sur mon site je suis automatiquement connecter sur mon forum,
j'ai vu ce tuto mais je sais pas comment faire
merci c'est tres urgent
blingo
Posteur néophyte
Posteur néophyte
 
Messages: 3
Inscription: 02 Déc 2010 à 09:47

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar fantomeus » 28 Déc 2010 à 02:49

bon voilà j'ai externaliser la gestion des profils chose que plusieurs personnes souhaitaient avoir ^^

ce code n'est pas parfait je n'ai pas encore mit les request_var() chose que je vais implémenter par la suite :)
j'aprécierais les gens qui souhaitent completer la chose en y ajoutant son petit plus par exemple version template ou autres ce qui pourrait agréer la chose dans le tuto :)
j'ai tout d'abord décomposer en 2 morceau mon code le code pour le formulaire et ensuite la page qui gere l'update & cie ^^

Code: Tout sélectionner
<h2>Mon compte</h2><br />
<?php
?>
<form name="formulaire" action="./pages/compte_modif.php" method="post">
<input type="text" disabled="disabled" size="30" name="username"  value="<?php echo $user->data['username'];?>"  /></p><br />
Votre password<input type="text" size="%" name="password" value="" /></p><br />
Votre email <input type="text" size="30" name="email" value="<?php echo $user->data['user_email'];?>" /></p><br />
Votre adresse <input type="text" size="30" name="adresse" value="<?php echo $user->data['adresse'];?>" /></p><br />
Votre code postal <input type="text" size="30" name="postal" value="<?php echo $user->data['postal'];?>" /></p><br />
Votre ville <input type="text" size="30" name="ville" value="<?php echo $user->data['ville'];?>" /></p><br />
votre telephone <input type="text" size="30" name="telephone" value="<?php echo $user->data['telephone'];?>" /></p><br />
<input type="submit" value="Envoyer" />


Code: Tout sélectionner
<?php
define('IN_PHPBB', true);
$phpbb_root_path =  '../phpbb3/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$user->session_begin();
$auth->acl($user->data);
$user->setup('');
require($phpbb_root_path . 'includes/functions_user.' . $phpEx);
$auth->acl($user->data);
$user->setup('ucp');
$error=array();
$success = false;
$message_error = '';
$url_redirect='';

   mysql_connect("localhost", "****-", "****");
mysql_select_db("*****");
mysql_query("SET NAMES UTF8");
   if (isset($_POST['password']) AND isset($_POST['email']) AND isset($_POST['adresse']) AND isset($_POST['postal']) AND isset($_POST['ville']) AND isset($_POST['telephone']) )
{
  $password = phpbb_hash(bbcode(stripslashes($_POST['password'])));
   $email = bbcode(stripslashes($_POST['email']));
       $adresse = bbcode(stripslashes($_POST['adresse']));
  $postal = bbcode(stripslashes($_POST['postal']));
     $ville = bbcode(stripslashes($_POST['ville']));
        $telephone = bbcode(stripslashes($_POST['telephone']));
   
      if ($user->data['user_id'] == ANONYMOUS )
      {
echo 'bouh';      
  }
    else
    {
   $db->sql_query("UPDATE `*****`.`forum_users` SET  user_password='" . $password . "', user_email='" . $email . "', adresse='" . $adresse . "', postal='" . $postal . "', ville='" . $ville . "' , telephone='" . $telephone . "' WHERE username='" . $user->data['username'] . "'");
   
   }
   }
?>


voilà :) bonne chance et merci à ceux qui augmenteront la chance à ce script d'être le plus complet (j'ai des champs perso donc n'y faites pas attention ^^ )
fantomeus
Posteur néophyte
Posteur néophyte
 
Messages: 7
Inscription: 07 Fév 2009 à 20:49

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son

Messagepar arthanyx » 20 Jan 2011 à 01:20

hoffmann a écrit:Bonjour
Est ce normal que le script de "Créer une page de news - version simple" affiche tous les titres de topics même ceux que je ne suis pas censé voir (autorisations) ?

Cordialement


J'ai exactement le même problème et j'ai du mal à voir quoi faire pour inclure la vérification des autorisations des utilisateurs à voir les sujets de forums cachés.
Je pense qu'il s'agit de la fonction display_forums, mais je ne sais pas l'utiliser. Si quelqu'un peut m'aider.

Pour info, à l'époque j'avais "créé/adapté" le mod LastXpost on index pour phpbb2 et j'essaye de faire la même chose sur phpbb3

Merci
arthanyx
Posteur néophyte
Posteur néophyte
 
Messages: 29
Inscription: 09 Jan 2011 à 17:50

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar arthanyx » 20 Jan 2011 à 22:01

Personne pour m'aiguiller ? :(
arthanyx
Posteur néophyte
Posteur néophyte
 
Messages: 29
Inscription: 09 Jan 2011 à 17:50

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar spitfire pat » 21 Jan 2011 à 07:52

ça me semble un peu surréaliste que d'afficher des pages de news contenant des topics non accessibles par tous, mais bon
soit $forum_id l'id du forum que tu veux tester
si tu veux savoir si tu as les droits pour le lire tu fais
Code: Tout sélectionner
if($auth->acl_get('f_read', $forum_id))
Avatar de l’utilisateur
spitfire pat
MOD Contest Winner
MOD Contest Winner
 
Messages: 15313
Inscription: 18 Sep 2004 à 15:43
Localisation: bourgogne

Re: [INFO] sur l'utilisation des sessions de phpBB3 sur son site

Messagepar arthanyx » 21 Jan 2011 à 14:11

ok, je te remercie spitfire pat,
Pour t'expliquer le pourquoi de ma démarche, j'ai deux catégories de forums sur le site, une partie publique consultable par tout le monde et "postable" par les membres et une autre privée qui n'est rien de moins que les forums d'administration que seuls les modos et admins peuvent voir et poster.
Je vais tester ça et je reviendrais vous proposer le script, ça peut peut-être intéresser d'autres personnes.
Merci encore et bravo pour le tuto
arthanyx
Posteur néophyte
Posteur néophyte
 
Messages: 29
Inscription: 09 Jan 2011 à 17:50

PrécédenteSuivante

Retourner vers Coding, Webmastering et Sécurité informatique

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

Partenaires : phpBBHacks.com • phpBB-Seo.com • EzCom-fr.com • phpBB3 Styles • phpBB podpora • phpBB Portugal    Liens : Net Avenir • PromoBenef • Ticket Gagnant