Nouveau sujet Répondre Imprimer Syndication RSS 2.0

Problème de connexion d'un membre

message d'erreur lors de la connexion d'un membre
Nouvelle étincelle
Avatar de laurentgraph
  • Messages : 5
  • Inscrit : 11 Juillet 2007
  Lien vers ce message 18 Juillet 2007, 18:07
Après avoir modifié les droits dans la zone d'administration du forum, version 1.04 (j'ai transformé les droits des utilisateurs d' "invité" en "membre"), j' ai un bug lorsqu'un membre se connecte. A près avoir saisi le login / mot de passe, l'action sur "se connecter" ouvre une page d'erreur avec le message suivant :


Warning: Unknown modifier '/' in /home/doigtsdefees/www/doigtsdefees.com/forum/includes/functions/fonctions.php on line 421

Warning: Cannot modify header information - headers already sent by (output started at /home/doigtsdefees/www/doigtsdefees.com/forum/includes/functions/fonctions.php:421) in /home/doigtsdefees/www/doigtsdefees.com/forum/includes/functions/fonctions.php on line 


Précision : il suffit de faire F5 ensuite pour accéder au forum. Le fonctionnement du forum est ensuite sans problèmes.

J'ai essayé de remettre le système de droits antérieur (remettre "invité"), mais le bug persiste.
De plus aprés avoir chercher dans tous les coin il semblerait que le problème vienne des page en cache "forum/cache" que je ne pas suprimer et pour arranger les choses la base de donnée pesent 60Mo donc difficile a réinstaller
Donc par avance je remercie toute personne venat à mon secour.
Help me !
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14334
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 18 Juillet 2007, 18:31
Bonjour,
peux tu me copier le contenu du fichier includes/functions/fonctions.php ici que je regarde le bug ?


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Nouvelle étincelle
Avatar de wadvise
  • Messages : 1
  • Inscrit : 11 Juillet 2007
Message édité 1 fois, dernière édition par wadvise, 06 Aout 2007, 17:31     Lien vers ce message 06 Aout 2007, 17:28
Comme convenue ci-joint le copier coller de la page fonction.php

<?php
/*******************************************************************************
*
*      [ ./includes/functions/fonctions.php (français) ]
*
* --------------------------------------------------------------------------
* Commencé le :  25 juillet 2004
* Copyright :  Groupe Fire Soft Board
* Site Web :   [url=http://www.fire-soft-board.com/]http://www.fire-soft-board.com[/url]
* E-mail :   [mail=support@fire-soft-board.com]support@fire-soft-board.com[/mail]
* --------------------------------------------------------------------------
* Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les 
* termes de la Licence Publique Générale GNU publiée par la Free Software Foundation 
* (version 2). Reportez-vous à la Licence Publique Générale GNU pour plus de détails. 
* Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même temps 
* que ce programme ; si ce n'est pas le cas, écrivez à la Free Software Foundation, 
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, États-Unis. 
* --------------------------------------------------------------------------
*
* Dernière modification le 28 mai 2006 par Genova
* Templates : 0
*
*******************************************************************************/
/************************************
* Cette fonction ajoute à l'url donnée la variable SID
* - Fonction inspirée de append_sid() de phpBB
************************************/
function ajout_sid($url, $html = TRUE)
{
global $membre, $config;

if((defined('PAGE_CONNEXION') || $membre['membre_id'] != INVITE) && !strpos($url, 'sid=') && $config['session_url'] && !defined('COOKIE_SID'))
{
     $url = ( strpos($url, '?') == FALSE ) ? $url . '?sid=' . $membre['session_sid'] : $url . (($html) ? '&amp;' : '&') . 'sid=' . $membre['session_sid'];
}

return $url;
}
/************************************
* Cette fonction liste les dossiers et / ou les fichiers d un repertoire
*  $chemin :: chemin du dossier
* $nom_select :: Nom du select
* $valeur :: Valeur de la sélection
* $type :: TRUE pour lister des fichiers, FALSE pour les dossiers
************************************/
function liste_fichier($chemin, $nom_select, $valeur, $type = FALSE)
{
if ($dossier = opendir($chemin))
{
  $fichiers .= '<select name="' . $nom_select . '" class="listing">';
  while ($fichier = readdir($dossier))
  {
   if ($fichier != '.' && $fichier != '..' && $fichier != 'index.htm')
   {
    if (($type && is_file($chemin . $fichier)) || (!$type && is_dir($chemin . $fichier)))
    {
     $filename = ($type) ? $fichier : $fichier . '/';
     $selection = ($filename == $valeur) ? 'selected="selected"' : '';
     $fichiers .= '<option value="' . $filename . '" ' . $selection . '>' . $fichier . '</option>';
    }
   }
  }
  $fichiers .= '</select>';
  closedir($dossier);
}
     
return $fichiers;
}
/************************************
*  $membre ::    Données du membre
*  $forum_m ::   Forum concerné
*  $moderation ::  Tableau contenant les données des modérateurs des forums
* $droit_forum ::  Tableau contenant les différents droits possibles
* $select ::   Tableau contenant les autorisations souhaitées (afin d'optimiser l'algorithme)
************************************/
function droits($membre, $forum_m, $moderation, $droit_forum, $select = NULL)
{
global $bdd, $categorie_personne;
//
// On récupère le niveau de droit du membre, donné par les clés du tableau:
// $categorie_personne = array('invite', 'membre', 'modo_forum', 'modo', 'modosup', 'admin');
//
$droits = array();
$droits['est_modo'] = FALSE;
if ( $membre['membre_aut'] == MODO )
{
  for ( $m = 0; $m < count($moderation); $m++ )
  {
   if ( $moderation[$m]['membre_id'] == $membre['membre_id'] && $moderation[$m]['forum_id'] == $forum_m['forum_id'] )
   {
    $droits['est_modo'] = TRUE;
    break;
   }
  }
}
else if ( $membre['membre_aut'] > MODO )
{
  $droits['est_modo'] = TRUE;
}
//
// En fonction des permissions du forum on renvoie ce que le membre a le droit et n'a pas le droit de faire.
// Dans les cas des droits d'édition et de suppresion, si le niveau est réglé sur membre
// ou invité, on lui donne le droit de toucher à ses propres messages.
// - Dark_Genova -
//
for ( $d = 0; $d < count($droit_forum); $d++ )
{
  if (is_array($select) && !in_array($droit_forum[$d], $select))
  {
   continue;
  }
  if ( $membre['membre_aut'] == ADMIN )
  {
   $droits[$droit_forum[$d]] = TRUE;
  }
  else
  {
   if (($droit_forum[$d] == 'droit_editer' || $droit_forum[$d] == 'droit_supprimer') && ($categorie_personne[$forum_m[$droit_forum[$d]]] == 'invite' || $categorie_personne[$forum_m[$droit_forum[$d]]] == 'membre') && $membre['membre_aut'] <= MODO && !$droits['est_modo'])
   {
    $droits[$droit_forum[$d]] = 0;
    if ( $forum_m[$droit_forum[$d]] > $membre['membre_aut'] + 1 )
    {
     $droits['membre_' . substr($droit_forum[$d], 6)] = FALSE;
    }
    else
    {
      $droits['membre_' . substr($droit_forum[$d], 6)] = TRUE;
    }
   }
   else
   {
    if ( ( $forum_m[$droit_forum[$d]] == 2 && ( $droits['est_modo'] || $membre['membre_aut'] > MODO ) ) || ( $forum_m[$droit_forum[$d]] == 3 && $membre['membre_aut'] > MEMBRE ) )
    {
     $droits[$droit_forum[$d]] = TRUE;
    }
    else if ( $forum_m[$droit_forum[$d]] == 0 || ( $forum_m[$droit_forum[$d]] == 1 && $membre['membre_aut'] >= MEMBRE && $membre['membre_id'] != INVITE ) || ( $forum_m[$droit_forum[$d]] == 4 && $membre['membre_aut'] >= MODOSUP ) )
    {
     $droits[$droit_forum[$d]] = TRUE;
    }
    else
    {
     $droits[$droit_forum[$d]] = FALSE;
    }
   }
  }
}
return $droits;
}
/************************************
* Cette fonction créé une liste des pages pour certaines données.
* $url ::  URL de la page vers laquelle les liens redirigeront
* $nb_page ::  Nombre de pages totales
* $get_page :: Page actuelle
* $suiv_prec :: Si TRUE, affiche les liens 'suivants' et 'précédent'
* $liste ::  Si TRUE, affiche une liste des pages
************************************/
function pagination($url, $nb_page, $get_page, $suiv_prec = TRUE, $liste = TRUE)
{
global $langue;
$ppage = $url . ( strstr($url, '?') ? '&amp;' : '?' ) . 'page=';
$pagination = '';
$boucle_ok = TRUE;
for ( $i = 1; $i <= $nb_page; $i++ )
{
  if ( $nb_page < 10 )
  {
   $pagination .= ( $i != $get_page ? '<a href="' . ajout_sid($ppage . $i) . '" class="pagination">' . $i . '</a>' : '<span style="text-decoration: underline">' . $i . '</span>' ) . ( $i < $nb_page ? ', ' : '' );
  }
  else
  {
   if ( $i <= 3 )
   {
    $pagination .= ( $i != $get_page ) ? '<a href="' . ajout_sid($ppage . $i) . '" class="pagination">' . $i . '</a>, ' : '<span style="text-decoration: underline">' . $i . '</span>, ';
   }
   else if ( $i > 3 && $i < ( $nb_page - 2 ) && $boucle_ok )
   {
    if ( $get_page > 2 && $get_page < 6 )
    {
     $pagination .= ( $get_page == 5 ) ? '<a href="' . ajout_sid($ppage . ( $get_page - 1 )) . '" class="pagination">' . ( $get_page - 1 ) . '</a>, ' : '';
     $pagination .= ( $get_page > 3 ) ? '<span style="text-decoration: underline">' . $get_page . '</span>, ' : '';
     $pagination .= '<a href="' . ajout_sid($ppage . ( $get_page + 1 )) . '" class="pagination">' . ( $get_page + 1 ) . '</a>, ';
     $pagination .= '..., ';
    }
    else if ( $get_page >= 6 && $get_page <= ( $nb_page - 5 )  )
    {
     $pagination .= '..., ';
     for ( $a = -1 ; $a <= 1 ; $a ++ )
     {
      $pagination .= ( $a != 0 ) ? '<a href="' . ajout_sid($ppage . ( $get_page + $a )) . '" class="pagination">' . ( $get_page + $a ) . '</a>, ' : '<span style="text-decoration: underline">' . $get_page . '</span>, ';
     }
     $pagination .= '..., ';
    }
    else if ( $get_page > ( $nb_page - 5 ) && $get_page < ( $nb_page - 1 ) )
    {
     $pagination .= '..., ';
     $pagination .= '<a href="' . ajout_sid($ppage . ( $get_page - 1 )) . '" class="pagination">' . ( $get_page - 1 ) . '</a>, ';
     $pagination .= ( $get_page < ( $nb_page - 2 ) ) ? '<span style="text-decoration: underline">' . $get_page . '</span>, ' : '';
     $pagination .= ( $get_page == ( $nb_page - 4 ) ) ? '<a href="' . ajout_sid($ppage . ( $get_page + 1 )) . '" class="pagination">' . ( $get_page + 1 ) . '</a>, ' : '';
    }
    else
    {
     $pagination .= '..., ';
    }
    $boucle_ok = FALSE;
   }
   else if ( $i >= ( $nb_page - 2 ) )
   {
    $pagination .= ( $i != $get_page ? '<a href="' . ajout_sid($ppage . $i) . '" class="pagination">' . $i . '</a>' : '<span style="text-decoration: underline">' . $i . '</span>' ) . ( $i < $nb_page ? ', ' : '' );
   }
  }
}
if ( $liste )
{
  $code_js = '<script language="javascript" type="text/javascript">function liste_pagination(value) { location.href="' . ajout_sid(str_replace('&amp;', '&', $url)) . ( strstr($url, '?') ? '&' : '?' ) . 'page=" + value; }</script>';
  $page_liste = '<select name="page" onchange="liste_pagination(this.value);" class="listing">';
  for ( $i = 1; $i <= $nb_page; $i++ )
  {
   $selection = ( $i == $get_page ) ? 'selected="selected"' : '';
   $page_liste .= '<option value="' . $i . '" ' . $selection . '>' . $i . '</option>';
  }
  $page_liste .= '</select>';
  
}
$pagine .= ( $suiv_prec && $get_page > 1 ? '<a href="' . ajout_sid($ppage . ( $get_page - 1 )) . '"><<</a>&nbsp;&nbsp;&nbsp;' : '' );
$pagine .= $langue['page'] . ': ' . $pagination;
$pagine .= ( $liste ? '&nbsp;&nbsp;' . $page_liste : '' );
$pagine .= ( $suiv_prec && $get_page < $nb_page ? '&nbsp;&nbsp;&nbsp;<a href="' . ajout_sid($ppage . ( $get_page + 1 )) . '">>></a>' : '' );
$tableau = array();
$tableau['pagination'] = '<b>' . $pagine . '</b>';
$tableau['code'] = $code_js;
return $tableau;
}
/************************************
* Cette fonction va récupérer le tableau d'un forum à partir de son id
*       $forum_id :: Id du forum concerné
************************************/
function forum_tableau($forum_id)
{
global $compte_forum, $forum;
$frm = array();
for( $a = 0; $a < $compte_forum; $a++ )
{
  if( $forum_id == $forum[$a]['forum_id'] )
  {
   $frm = $forum[$a];
   $frm['cle_forum'] = $a;
   return ($frm);
  }
}
return array();
}
/************************************
* Cette fonction retourne une date à partir d'un timestamp et d'un format de date
*       $timestamp :: Timestamp pour la date. S'il n'est pas fourni, le timestamp actuel sera utilisé.
*       $format :: Format de la date. S'il n'est pas fourni, la fonction choisira automatiquement le format du
*       membre ou le format par défaut.
************************************/
function aff_date($timestamp, $format = '')
{
        global $config, $langue, $membre;
        
        if( $format == '' )
        {
         $format = ($membre['membre_date_format'] != '') ? $membre['membre_date_format'] : $config['date_format'];
        }
        $timestamp = intval($timestamp) != '' ? intval($timestamp) : time();
        $date = date($format, $timestamp);
        $date = strtr($date, $langue['date']);
        return $date;
}
/************************************
* Cette fonction redirige vers une url
*       $url :: Url vers vers où rediriger
************************************/
function redir($url)
{
        header('Location: ' . ajout_sid($url, FALSE));
        exit;
}
/************************************
* Envoie un mail avec entête HTML en Bcc
************************************/
function envoyer_mail($titre, $message, $from, $to)
{
$titre = ( trim($titre) == '' ) ? 'Aucun sujet' : $titre;
$message = ( trim($message) == '' ) ? 'Aucun message' : $message;
$headers = 'From: ' . $from . "\r\n";
return ( !  @mail($to, stripslashes($titre), stripslashes($message), $headers) ) ? FALSE : TRUE;
}
/************************************
* Renvoie le niveau d'autorisation du membre sous forme de langue.
************************************/
function niveau_autorisation($membre)
{
global $langue;
switch($membre['membre_aut'])
{
  case MEMBRE:
   return ($langue['membre']);
  case MODO:
   return ($langue['modo']);
  case MODOSUP:
   return ($langue['modosup']);
  case ADMIN:
   return ($langue['admin']);
  default:
   return ($langue['invite']);
}
}
/************************************
* Rajoute des antislashes aux \ et ' uniquement
************************************/
function simpleslashes($text)
{
$text = str_replace('\\', '\\\\', $text);
$text = str_replace("'", "\'", $text);
return ($text);
}
/*
** Un print_r() mieux présenté et coloré, avec respect de l'indentation.
** Utilisé pour le débugage.
*/
function printr($array)
{
static $indentation = '';
static $array_key = '';
$cst_indentation = '&nbsp;&nbsp;&nbsp;&nbsp;';
echo $indentation . $array_key . '<b>array(</b><br />';
reset($array);
while (list($k, $v) = each($array))
{
  if (is_array($v))
  {
   $indentation .= $cst_indentation;
   $array_key = '\'<i style="color: #334499 ;">' . addslashes(htmlspecialchars($k)) . '</i>\' => ';
   printr($v);
   $indentation = substr($indentation, 0, strlen($indentation) - strlen($cst_indentation));
  }
  else
  {
   echo $indentation . $cst_indentation . '\'<i style="color: #334499 ;">' . addslashes(htmlspecialchars($k)) . '</i>\' => \'' . addslashes(htmlspecialchars($v)) . '\',<br />';
  }
}
echo $indentation . '<b>)</b>' . (($indentation === '') ? ';' : ',') . '<br />';
}
/*
** Renvoie la structure du tableau passé en paramètre sous
** forme de chaîne de caractère (qui peut ainsi être écrite
** dans un fichier cache par exemple). L'indentation et la mise
** en forme du code via des espaces et des \n est prise en 
** compte.
** -----
** $array :: Tableau dont la structure sera récupérée.
** $array_name :: Nom du tableau.
*/
if (!function_exists('var_export'))
{
function var_export($array, $end)
{
  $str = "array(\n";
  while (list($k, $v) = each($array))
  {
   if (is_array($v))
   {
    $str .= "'$k' => " . var_export($v, FALSE);
   }
   else
   {
    $str .= "'$k' => '" . simpleslashes($v) . "',\n";
   }
  }
  $str .= ")" . (($end) ? '' : ',') . "\n";
  return ($str);
}
}
function get_array_code($array, $array_name)
{
$str = '$' . $array_name . ' = ' . var_export($array, TRUE) . ';';
return ($str);
}
/*
** Vérifie si une chaîne match une seconde
** -----
** $mask ::      Premièere expression qui forme le masque
** $str ::      Chaîne de caractère matchant ou non la premièere expression
*/
function is_matching($mask, $str)
{
return ((preg_match('/' . str_replace('\*', '.*', preg_quote($mask)) . '/', $str)) ? TRUE : FALSE);
}
/*
** Encode une chaîne de caractère en caractères héxadécimaux visibles par
** le navigateur, afin d'offrir une protection contre la lecture de données dans
** la source de la page (anti spam)
** ----
** $str ::  Chaîne de caractère à encoder
*/
function hide_str($str)
{
$new = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++)
{
  $new .= '&#x' . bin2hex($str{$i}) . ';';
}
return ($new);
}
?>




Merci pour ton aide
Advise
 
Equipe des MODS
Avatar de Korko
  • Age : 21 ans
  • Messages : 2668
  • Inscrit : 06 Octobre 2004
  Lien vers ce message 07 Aout 2007, 10:37
Ligne 421... C'est çla oui...
C'est typiquement une erreur de regex donc
return ((preg_match('/' . str_replace('\*', '.*', preg_quote($mask)) . '/', $str)) ? TRUE : FALSE);


J'avoue que ta fonction métonne je l'aurais pas faite ainsi mais bon...
return ((preg_match('[' . str_replace('\*', '.*', preg_quote($mask)) . ']', $str)) ? TRUE : FALSE);


Ce ne serait pas plutot une fonction comme ça ? '/' n'est pas un méta caractère donc il n'est pas échappé par preg_quote il me semble.


Dieu vous aime. Offre soumise à conditions
Je suis une Brute
 
Nouvelle étincelle
Avatar de laurentgraph
  • Messages : 5
  • Inscrit : 11 Juillet 2007
  Lien vers ce message 08 Aout 2007, 17:06
Ligne 421... C'est çla oui...
C'est typiquement une erreur de regex donc
return ((preg_match('/' . str_replace('\*', '.*', preg_quote($mask)) . '/', $str)) ? TRUE : FALSE);


J'avoue que ta fonction métonne je l'aurais pas faite ainsi mais bon...
return ((preg_match('[' . str_replace('\*', '.*', preg_quote($mask)) . ']', $str)) ? TRUE : FALSE);


Ce ne serait pas plutot une fonction comme ça ? '/' n'est pas un méta caractère donc il n'est pas échappé par preg_quote il me semble.


Cette solution fonctionne.
Merci beaucoup!
 
Répondre


.