phpBB 2.0.17

Vous trouverez les informations et les liens de téléchargement de la dernière version.
Vous trouverez également les informations pour les maj manuelles.

Modérateur: Equipe phpBB.biz

phpBB 2.0.17

Messagede FX » 19 Juil 2005 23:20

Bonjour,

Le phpBB group annonce la mise à disposition de phpBB 2.0.17, intitulé « no, we did not forget naming it last time». Cette version corrige plusieurs bugs et quelques problèmes de sécurité aussi bien que la faille XSS récemment apparue (affectant seulement l'Internet Explorer).

Veuillez consulter la fin de cette annonce pour les changements de code nécessaires afin de fixer la faille XSS, nous sommes de nouveau étonnés au sujet des personnes mettant toutes leurs énergies dans la recherche de la plus petite faille dans phpBB 2.0.x, ceux-ci doivent avoir beaucoup de temps disponible. Mais d'une part il augmente toujours la sécurité de ce produit puisque nous n'incluons pas de nouvelles fonctions dans le code de base de la branche 2.0.x.

Avec cette annonce je veux vous fournir encore plus d'information concernant la sécurité dans phpBB. psoTFX (Paul S. Owen, chef de projet) a lancé et mis en route l'idée et le concept d'un audit de sécurité complet du code de la branche 2.0.x. Nous avons présenté ceux-ci à plusieurs personnes spécialisées en sécurité, des créateurs de mod's et des personnes très douées de nos équipes pour participer à cet audit. Nous avons l'intention de mettre en application les changements nécessaires - et également fixer les failles trouvées, si tout va bien cela permettra au code très âgé maintenant (il est toujours au niveau technique datant de trois ans) d'avoir une petite mise à jour et de profiter des mécanismes et techniques de sécurité qui sont communes de nos jours.

Nous avons l'intention également d'ouvrir notre système privé de bugtracker au public pour rapporter les bogues de la branche 2.0.x dans les jours suivants.

Comme avec toutes les nouvelles versions nous vous invitons à mettre à jour aussitôt que possible. Vous pouvez naturellement trouver ce téléchargement disponible sur notre page de téléchargements. Comme à l'habitude les trois paquets habituels sont disponibles pour simplifier votre mise à jour.


  • Distribution complète
    Contient l'intégralité des sources de phpBB2 et le pack de langue anglaise
  • Fichiers modifiés uniquement
    Contient seulement les fichiers modifiés des versions précédentes de phpBB. Veuillez noter cette archive contient les fichiers modifiés pour chaque précédente version.
  • Patch
    Contient les patchs compatibles avec les précédents patchs appliqués aux versions précédentes de phpBB.

Et comme toujours, le tutoriel concernant le code change est disponible pour ceux ayant modifiés les fichiers du forums (mod's, etc...). Il peut être consulté ici.

Veuillez-vous assurer d'avoir lu les documents INSTALL et README dans le répertoire docs/ avant de procéder à l'installation ou aux mises à jour !

Qu'est-ce qui a changé dans cette version ?

Le change log (contenu dans cette version) est le suivant :

  • Added extra checks to the deletion code in privmsg.php - reported by party_fan
  • Fixed XSS issue in IE using the url BBCode
  • Fixed admin activation so that you must have administrator rights to activate accounts in this mode - reported by ieure
  • Fixed get_username returning wrong row for usernames beginning with numerics - reported by Ptirhiik
  • Pass username through phpbb_clean_username within validate_username function - AnthraX101
  • Fixed PHP error in message_die function
  • Fixed incorrect generation of {postrow.SEARCH_IMG} tag in viewtopic.php - reported by Double_J
  • Also fixed above issue in usercp_viewprofile.php
  • Fixed incorrect setting of user_level on pending members if a group is granted moderator rights - reported by halochat
  • Fixed ordering of forums on admin_ug_auth.php to be consistant with other pages
  • Correctly set username on posts when deleting a user from the admin panel


Changements de code pour fixer la faille XSS :

ouvrir includes/bbcode.php

Trouver (aux environs de la ligne 203):

Code: Tout sélectionner
$patterns[] = "#\[url\]([\w]+?://[^ \"\n\r\t<]*?)\[/url\]#is";
   $replacements[] = $bbcode_tpl['url1'];

   // [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
   $patterns[] = "#\[url\]((www|ftp)\.[^ \"\n\r\t<]*?)\[/url\]#is";
   $replacements[] = $bbcode_tpl['url2'];

   // [url=xxxx://www.phpbb.com]phpBB[/url] code..
   $patterns[] = "#\[url=([\w]+?://[^ \"\n\r\t<]*?)\]([^?\n\r\t].*?)\[/url\]#is";
   $replacements[] = $bbcode_tpl['url3'];

   // [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix).
   $patterns[] = "#\[url=((www|ftp)\.[^ \"\n\r\t<]*?)\]([^?\n\r\t].*?)\[/url\]#is";


Remplacer par

Code: Tout sélectionner
$patterns[] = "#\[url\]([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\[/url\]#is";
   $replacements[] = $bbcode_tpl['url1'];

   // [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
   $patterns[] = "#\[url\]((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\[/url\]#is";
   $replacements[] = $bbcode_tpl['url2'];

   // [url=xxxx://www.phpbb.com]phpBB[/url] code..
   $patterns[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
   $replacements[] = $bbcode_tpl['url3'];

   // [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix).
   $patterns[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";


Trouver (aux environs de la ligne 627):

Code: Tout sélectionner
$ret = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);

   // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
   // Must contain at least 2 dots. xxxx contains either alphanum, or "-"
   // zzzz is optional.. will contain everything up to the first space, newline,
   // comma, double quote or <.
   $ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);


Remplacer par

Code: Tout sélectionner
$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);

   // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
   // Must contain at least 2 dots. xxxx contains either alphanum, or "-"
   // zzzz is optional.. will contain everything up to the first space, newline,
   // comma, double quote or <.
   $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);




Source :

phpbb.com (en)
Dernière édition par FX le 20 Juil 2005 0:13, édité 1 fois.
Avatar de l’utilisateur
FX
Equipe
Equipe
 
Messages: 3847
Inscription: 20 Oct 2002 13:45
Localisation: France, Royan

Messagede FX » 19 Juil 2005 23:21

phpBB 2.0.16 to phpBB 2.0.17 Code Changes



##############################################################
## Notes de l'auteur :
##
## Lorsque vous lisez l'expression "APRES, AJOUTER" cela signifie qu'il faut ajouter le code après celui recherché, demandé par l'expression "TROUVER".
## Lorsque vous lisez l'expression "AVANT, AJOUTER" cela signifie qu'il faut ajouter le code avant celui recherché, demandé par l'expression "TROUVER".
## Lorsque vous lisez l'expression "REMPLACER PAR" cela signifie qu'il faut remplacer le code par celui recherché, demandé par l'expression "TROUVER".
## Lorsque vous lisez l'expression "SUPPRIMER" cela signifie qu'il faut supprimer le code recherché, demandé par l'expression "TROUVER".
##
## Après voir terminé ces modifications, il vous faudra envoyer le fichier : update_to_latest.php sur votre FTP (dans un répertoire que vous créez, nommé : install et que vous mettez dans le répertoire de votre forum).
## Au moyen de votre navigateur Web, pointez le vers le fichier : update_to_latest.php.
## Comme cette exemple : http://votresite.com/forum/install/update_to_latest.php.
## Une fois la mise à jour terminée, veillez à bien supprimer ce fichier de votre FTP.
  • admin/admin_ug_auth.php
  1. TROUVER - LiGne 417
    Code: Tout sélectionner

             FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u 
             WHERE ug.group_id = aa.group_id
                AND u.user_id = ug.user_id


    APRES, AJOUTER
    Code: Tout sélectionner

                AND ug.user_pending = 0

  2. TROUVER - Line 572
    Code: Tout sélectionner

       $sql = "SELECT *
          FROM " . FORUMS_TABLE . " f
          ORDER BY forum_order";


    REMPLACER, PAR
    Code: Tout sélectionner

       $sql = "SELECT f.*
          FROM " . FORUMS_TABLE . " f, " . CATEGORIES_TABLE . " c
          WHERE f.cat_id = c.cat_id
          ORDER BY c.cat_order, f.forum_order ASC";

  3. TROUVER - Line 608
    Code: Tout sélectionner

       $sql = "SELECT u.user_id, u.username, u.user_level, g.group_id, g.group_name, g.group_single_user FROM " . USERS_TABLE . " u, " . GROUPS_TABLE . " g, " . USER_GROUP_TABLE . " ug WHERE ";


    REMPLACER, PAR
    Code: Tout sélectionner

       $sql = "SELECT u.user_id, u.username, u.user_level, g.group_id, g.group_name, g.group_single_user, ug.user_pending FROM " . USERS_TABLE . " u, " . GROUPS_TABLE . " g, " . USER_GROUP_TABLE . " ug WHERE ";

  4. TROUVER - Line 836
    Code: Tout sélectionner

          $t_usergroup_list = '';
          for($i = 0; $i < count($ug_info); $i++)
          {
             $ug = ( $mode == 'user' ) ? 'group&amp;' . POST_GROUPS_URL : 'user&amp;' . POST_USERS_URL;

             $t_usergroup_list .= ( ( $t_usergroup_list != '' ) ? ', ' : '' ) . '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$ug=" . $id[$i]) . '">' . $name[$i] . '</a>';


    REMPLACER, PAR
    Code: Tout sélectionner

          $t_usergroup_list = $t_pending_list = '';
          for($i = 0; $i < count($ug_info); $i++)
          {
             $ug = ( $mode == 'user' ) ? 'group&amp;' . POST_GROUPS_URL : 'user&amp;' . POST_USERS_URL;

             if (!$ug_info[$i]['user_pending'])
             {
                $t_usergroup_list .= ( ( $t_usergroup_list != '' ) ? ', ' : '' ) . '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$ug=" . $id[$i]) . '">' . $name[$i] . '</a>';
             }
             else
             {
                $t_pending_list .= ( ( $t_pending_list != '' ) ? ', ' : '' ) . '<a href="' . append_sid("admin_ug_auth.$phpEx?mode=$ug=" . $id[$i]) . '">' . $name[$i] . '</a>';
             }

  5. TROUVER - Line 911
    Code: Tout sélectionner

             'GROUP_MEMBERSHIP' => $lang['Usergroup_members'] . ' : ' . $t_usergroup_list)


    REMPLACER, PAR
    Code: Tout sélectionner

             'GROUP_MEMBERSHIP' => $lang['Usergroup_members'] . ' : ' . $t_usergroup_list . '<br />' . $lang['Pending_members'] . ' : ' . $t_pending_list)
  • admin/admin_users.php
  1. TROUVER - Line 89
    Code: Tout sélectionner

                SET poster_id = " . DELETED . ", post_username = '$username'


    REMPLACER, PAR
    Code: Tout sélectionner

                SET poster_id = " . DELETED . ", post_username = '" . str_replace("\\'", "''", addslashes($this_userdata['username'])) . "'
  • includes/bbcode.php
  1. TROUVER - Line 203
    Code: Tout sélectionner

       $patterns[] = "#\[url\]([\w]+?://[^ \"\n\r\t<]*?)\[/url\]#is";
       $replacements[] = $bbcode_tpl['url1'];

       // [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
       $patterns[] = "#\[url\]((www|ftp)\.[^ \"\n\r\t<]*?)\[/url\]#is";
       $replacements[] = $bbcode_tpl['url2'];

       // [url=xxxx://www.phpbb.com]phpBB[/url] code..
       $patterns[] = "#\[url=([\w]+?://[^ \"\n\r\t<]*?)\]([^?\n\r\t].*?)\[/url\]#is";
       $replacements[] = $bbcode_tpl['url3'];

       // [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix).
       $patterns[] = "#\[url=((www|ftp)\.[^ \"\n\r\t<]*?)\]([^?\n\r\t].*?)\[/url\]#is";


    REMPLACER, PAR
    Code: Tout sélectionner

       $patterns[] = "#\[url\]([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\[/url\]#is";
       $replacements[] = $bbcode_tpl['url1'];

       // [url]www.phpbb.com[/url] code.. (no xxxx:// prefix).
       $patterns[] = "#\[url\]((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\[/url\]#is";
       $replacements[] = $bbcode_tpl['url2'];

       // [url=xxxx://www.phpbb.com]phpBB[/url] code..
       $patterns[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
       $replacements[] = $bbcode_tpl['url3'];

       // [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix).
       $patterns[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";

  2. TROUVER - Line 627
    Code: Tout sélectionner

       $ret = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);

       // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
       // Must contain at least 2 dots. xxxx contains either alphanum, or "-"
       // zzzz is optional.. will contain everything up to the first space, newline,
       // comma, double quote or <.
       $ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);


    REMPLACER, PAR
    Code: Tout sélectionner

       $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);

       // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
       // Must contain at least 2 dots. xxxx contains either alphanum, or "-"
       // zzzz is optional.. will contain everything up to the first space, newline,
       // comma, double quote or <.
       $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
  • includes/functions.php
  1. TROUVER - Line 120
    Code: Tout sélectionner

       if (intval($user) == 0 || $force_str)


    REMPLACER, PAR
    Code: Tout sélectionner

       if (!is_numeric($user) || $force_str)

  2. TROUVER - Line 581
    Code: Tout sélectionner

       define(HAS_DIED, 1);


    REMPLACER, PAR
    Code: Tout sélectionner

       define('HAS_DIED', 1);
  • includes/functions_validate.php
  1. TROUVER - Line 33
    Code: Tout sélectionner

       $username = preg_replace('#\s+#', ' ', $username);
       // Limit username length
       $username = substr(str_replace("\'", "'", $username), 0, 25);
       $username = str_replace("'", "''", $username);



    REMPLACER, PAR
    Code: Tout sélectionner

       $username = preg_replace('#\s+#', ' ', trim($username));
       $username = phpbb_clean_username($username);
       
  • includes/usercp_activate.php
  1. TROUVER - Line 50
    Code: Tout sélectionner

       }
       else if ((trim($row['user_actkey']) == trim($HTTP_GET_VARS['act_key'])) && (trim($row['user_actkey']) != ''))
       {


    APRES, AJOUTER
    Code: Tout sélectionner

          if (intval($board_config['require_activation']) == USER_ACTIVATION_ADMIN && $userdata['user_level'] != ADMIN)
          {
             message_die(GENERAL_MESSAGE, $lang['Not_Authorised']);
          }

  • includes/usercp_avatar.php
  1. TROUVER - Line 89
    Code: Tout sélectionner


    function user_avatar_url($mode, &$error, &$error_msg, $avatar_filename)
    {


    APRES, AJOUTER
    Code: Tout sélectionner

       global $lang;

  • includes/usercp_viewprofile.php
  1. TROUVER - Line 168
    Code: Tout sélectionner

    $search_img = '<a href="' . $temp_url . '"><img src="' . $images['icon_search'] . '" alt="' . $lang['Search_user_posts'] . '" title="' . $lang['Search_user_posts'] . '" border="0" /></a>';
    $search = '<a href="' . $temp_url . '">' . $lang['Search_user_posts'] . '</a>';


    REMPLACER, PAR
    Code: Tout sélectionner

    $search_img = '<a href="' . $temp_url . '"><img src="' . $images['icon_search'] . '" alt="' . $lang['Search_user_posts'] . '" title="' . sprintf($lang['Search_user_posts'], $profiledata['username']) . '" border="0" /></a>';
    $search = '<a href="' . $temp_url . '">' . sprintf($lang['Search_user_posts'], $profiledata['username']) . '</a>';
  • privmsg.php
  1. TROUVER - Line 701
    Code: Tout sélectionner

          if ( $delete_all )
          {
             switch($folder)
             {
                case 'inbox':
                   $delete_type = "privmsgs_to_userid = " . $userdata['user_id'] . " AND (
                   privmsgs_type = " . PRIVMSGS_READ_MAIL . " OR privmsgs_type = " . PRIVMSGS_NEW_MAIL . " OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
                   break;

                case 'outbox':
                   $delete_type = "privmsgs_from_userid = " . $userdata['user_id'] . " AND ( privmsgs_type = " . PRIVMSGS_NEW_MAIL . " OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
                   break;

                case 'sentbox':
                   $delete_type = "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_SENT_MAIL;
                   break;

                case 'savebox':
                   $delete_type = "( ( privmsgs_from_userid = " . $userdata['user_id'] . "
                      AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " )
                   OR ( privmsgs_to_userid = " . $userdata['user_id'] . "
                      AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) )";
                   break;
             }

             $sql = "SELECT privmsgs_id
                FROM " . PRIVMSGS_TABLE . "
                WHERE $delete_type";
             if ( !($result = $db->sql_query($sql)) )
             {
                message_die(GENERAL_ERROR, 'Could not obtain id list to delete all messages', '', __LINE__, __FILE__, $sql);
             }

             while ( $row = $db->sql_fetchrow($result) )
             {
                $mark_list[] = $row['privmsgs_id'];
             }

             unset($delete_type);
          }



    REMPLACER, PAR
    Code: Tout sélectionner

          $delete_sql_id = '';

          if (!$delete_all)
          {
             for ($i = 0; $i < count($mark_list); $i++)
             {
                $delete_sql_id .= (($delete_sql_id != '') ? ', ' : '') . intval($mark_list[$i]);
             }
             $delete_sql_id = "AND privmsgs_id IN ($delete_sql_id)";
          }

          switch($folder)
          {
             case 'inbox':
                $delete_type = "privmsgs_to_userid = " . $userdata['user_id'] . " AND (
                privmsgs_type = " . PRIVMSGS_READ_MAIL . " OR privmsgs_type = " . PRIVMSGS_NEW_MAIL . " OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
                break;

             case 'outbox':
                $delete_type = "privmsgs_from_userid = " . $userdata['user_id'] . " AND ( privmsgs_type = " . PRIVMSGS_NEW_MAIL . " OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
                break;

             case 'sentbox':
                $delete_type = "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_SENT_MAIL;
                break;

             case 'savebox':
                $delete_type = "( ( privmsgs_from_userid = " . $userdata['user_id'] . "
                   AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " )
                OR ( privmsgs_to_userid = " . $userdata['user_id'] . "
                   AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) )";
                break;
          }

          $sql = "SELECT privmsgs_id
             FROM " . PRIVMSGS_TABLE . "
             WHERE $delete_type $delete_sql_id";

          if ( !($result = $db->sql_query($sql)) )
          {
             message_die(GENERAL_ERROR, 'Could not obtain id list to delete messages', '', __LINE__, __FILE__, $sql);
          }

          $mark_list = array();
          while ( $row = $db->sql_fetchrow($result) )
          {
             $mark_list[] = $row['privmsgs_id'];
          }

          unset($delete_type);


  2. TROUVER - Line 1507
    Code: Tout sélectionner

                $mode = 'reply';
             }
          }


    APRES, AJOUTER
    Code: Tout sélectionner

          else
          {
             $privmsg_subject = $privmsg_message = '';
          }

  3. TROUVER - Line 2036
    Code: Tout sélectionner

             $l_box_size_status = '';
             break;
       }
    }


    APRES, AJOUTER
    Code: Tout sélectionner

    else
    {
       $inbox_limit_img_length = $inbox_limit_pct = $l_box_size_status = '';
    }
  • templates/subSilver/faq_body.tpl
  1. TROUVER - Line 37
    Code: Tout sélectionner

          <td class="{faq_block.faq_row.ROW_CLASS}" align="left" valign="top"><span class="postbody"><a name="{faq_block.faq_row.U_FAQ_ID}"></a><b>{faq_block.faq_row.FAQ_QUESTION}</b></span><br /><span class="postbody">{faq_block.faq_row.FAQ_ANSWER}<br /><a class="postlink" href="#Top">{L_BACK_TO_TOP}</a></span></td>


    REMPLACER, PAR
    Code: Tout sélectionner

          <td class="{faq_block.faq_row.ROW_CLASS}" align="left" valign="top"><span class="postbody"><a name="{faq_block.faq_row.U_FAQ_ID}"></a><b>{faq_block.faq_row.FAQ_QUESTION}</b></span><br /><span class="postbody">{faq_block.faq_row.FAQ_ANSWER}<br /><a class="postlink" href="#top">{L_BACK_TO_TOP}</a></span></td>
  • viewtopic.php
  1. TROUVER - Line 992
    Code: Tout sélectionner

       $search_img = '<a href="' . $temp_url . '"><img src="' . $images['icon_search'] . '" alt="' . $lang['Search_user_posts'] . '" title="' . $lang['Search_user_posts'] . '" border="0" /></a>';
       $search = '<a href="' . $temp_url . '">' . $lang['Search_user_posts'] . '</a>';


    REMPLACER, PAR
    Code: Tout sélectionner

       $search_img = '<a href="' . $temp_url . '"><img src="' . $images['icon_search'] . '" alt="' . $lang['Search_user_posts'] . '" title="' . sprintf($lang['Search_user_posts'], $postrow[$i]['username']) . '" border="0" /></a>';
       $search = '<a href="' . $temp_url . '">' . sprintf($lang['Search_user_posts'], $postrow[$i]['username']) . '</a>';
Fichiers joints
update_to_latest.zip
fichier de mise a jour de la base update_to_latest.php
(8.59 ) Téléchargé 1054 fois
Avatar de l’utilisateur
FX
Equipe
Equipe
 
Messages: 3847
Inscription: 20 Oct 2002 13:45
Localisation: France, Royan


Retourner vers Téléchargement de phpBB

Qui est en ligne

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

cron