[Doc] Could not connect to database (solution)

Découvrez ici une liste de documents concernant phpBB: son installation, sa mise à jour et enfin son utilisation.
En bref, apprenez ici à vous servir de phpBB2!

Modérateur: Equipe

[Doc] Could not connect to database (solution)

Messagede breakolami le 22 Oct 2003 à 22:32

» Could not connect to database (solution) Suite à un changement d'informations chez votre hébergeur, un transfert de votre forum, il se peut que vous tombiez sur l'erreur Could not connect to database. Il est fortement probable que le fichier config.php soit en cause, en effet c'est lui qui contient les informations de connexion à votre base de donnée. Nous allons voir comment le régénérer
    Créer / mettre à jour manuellement son config.php

      » Ouvrez un éditeur de texte tel que Wordpad, et entrez ce code

      Code: Tout sélectionner
      <?php

      //
      // phpBB 2.x auto-generated config file
      // Do not change anything in this file!
      //

      $dbms = "mysql";

      $dbhost = "localhost";
      $dbname = "nom_de_la_base_ici";
      $dbuser = "nom_d'utilisateur_de_la_base_ici";
      $dbpasswd = "mot_de_passe_de_la_base_ici";

      $table_prefix = "phpbb_"; 

      define('PHPBB_INSTALLED', true);

      ?>


      » Maintenant, modifiez le pour qu'il corresponde aux infos de votre hébergeur, à votre nom d'utilisateur et votre mot de passe. Quand c'est fait, sauvez le sous config.php et uploadez le dans la racine de votre forum via un client ftp. N'oubliez pas, si vous le pouvez, de changer le chmod en 644.
      Si vous n'arrivez pas à le mettre à jour manuellement, passer au chapitre suivant de ce tutorial afin d'y procéder de manière plus automatique.
    Créer / mettre à jour automatiquement son config.php à l'aide d'un script

      » Le répertoire contrib contient un fichier php nommé dbinformer.php, voici ci-dessous le détail de son utilisation.
      Je l'ai traduit en français.
      Ce script est très utile et peut aider dans de nombreuses situations.

        » Pour l'utiliser, copiez le code, créez un fichier php vide, collez ce code et enregistrez le fichier avec le nom que vous voulez (exemple : infodb.php).
        Envoyez-le par FTP à la racine de votre forum et appelez-le depuis votre navigateur en tapant l'adresse :
        Code: Tout sélectionner
        http://www.votre_site.xxx/infodb.php


        » Entrez les données demandées, sélectionnez le type de base de données dans le menu déroulant et envoyez en cliquant sur le bouton.
        Le script vous indiquera si la connexion à votre base de données a réussi ou si il a échoué et vous indiquera la raison de l'échec.

        » Pour savoir si votre serveur utilise mysql3 ou mysql4, vous pouvez essayer les 2 solutions, celle qui ne sera pas valide vous renverra un message d'erreur.

        » Si la connexion réussi, le script affichera la liste de vos tables, les tables dont le préfixe correspond à celui que vous avez indiqué seront affichées en caractères gras.

        » Vous pouvez aussi choisir de créer un fichier config (utile si votre fichier original a été effacé ou non envoyé, ou endommagé.......).
        » Pour créer ce fichier config vous avez 2 solutions :
          » Copier le code affiché en bas de page, ce code contient exactement 19 lignes en comptant les lignes vides, et collez le dans un nouveau fichier php vide et enregistrez-le sous config.php
          » Ou alors, cliquez sur le bouton "Download" pour télécharger un fichier config.php prêt à l'emploi et enregistrez-le sur votre disque dur.
        » Il ne vous reste plus qu'à envoyer ce fichier à la racine de votre forum.

          Image Pensez aussi à effacer ce script de votre FTP lorsque vous avez fini de l'utiliser et ce, pour des raisons de sécurité évidentes

        Code: Tout sélectionner
        <?php
        /***************************************************************************
        *                               dbinformer.php
        *                            -------------------
        *   begin                : Saturday, May 05, 2002
        *   copyright            : (C) 2002 The phpBB Group
        *   email                : n/a
        *
        *   $Id: dbinformer.php,v 1.65 2002/05/04 12:15:00 Blade Exp $
        *
        *   Coded by AL, Techie-Micheal, Blade, and Black Fluffy Lion.
        *   http://www.phpbb.com/phpBB/groupcp.php?g=7330
        *
        ***************************************************************************/
        /***************************************************************************
        *
        *   This program is free software; you can redistribute it and/or modify
        *   it under the terms of the GNU General Public License as published by
        *   the Free Software Foundation; either version 2 of the License, or
        *   (at your option) any later version.
        *
        ***************************************************************************/

        /* magic quotes, borrowed from install.php */
        set_magic_quotes_runtime(0);
        if (!get_magic_quotes_gpc())
        {
            if (is_array($HTTP_POST_VARS))
            {
                while (list($k, $v) = each($HTTP_POST_VARS))
                {
                    if (is_array($HTTP_POST_VARS[$k]))
                    {
                        while (list($k2, $v2) = each($HTTP_POST_VARS[$k]))
                        {
                            $HTTP_POST_VARS[$k][$k2] = addslashes($v2);
                        }
                        @reset($HTTP_POST_VARS[$k]);
                    }
                    else
                    {
                        $HTTP_POST_VARS[$k] = addslashes($v);
                    }
                }
                @reset($HTTP_POST_VARS);
            }
        }

        $all_connected = false;
        $error = false;
        $error_msg = '';
        $select = false;
        $connect = false;

        function make_config($dbms, $dbhost, $dbname, $dbuser, $dbpasswd, $table_prefix)
        {
            $config_file = '&lt;?php<br />' . "\n";
            $config_file .= '<br />' . "\n";
            $config_file .= '//<br />' . "\n";
            $config_file .= '// phpBB 2.x auto-generated config file<br />' . "\n";
            $config_file .= '// Do not change anything in this file!<br />' . "\n";
            $config_file .= '//<br />' . "\n";
            $config_file .= '<br />' . "\n";
            $config_file .= '$dbms = \'' . $dbms . '\';<br /><br />' . "\n\n";
            $config_file .= '$dbhost = \'' . $dbhost . '\';<br />' . "\n";
            $config_file .= '$dbname = \'' . $dbname . '\';<br />' . "\n";
            $config_file .= '$dbuser = \'' . $dbuser . '\';<br />' . "\n";
            $config_file .= '$dbpasswd = \'' . $dbpasswd . '\';<br /><br />' . "\n\n";
            $config_file .= '$table_prefix = \'' . $table_prefix . '\';<br /><br />' . "\n\n";
            $config_file .= 'define(\'PHPBB_INSTALLED\', true);<br /><br />' . "\n\n";
            $config_file .= '?>';

            return $config_file;
        }

        function make_download($dbms, $dbhost, $dbname, $dbuser, $dbpasswd, $table_prefix) 

            $config_file = '<?php' . "\n\n"; 
            $config_file .= '//' . "\n";
            $config_file .= '// phpBB 2.x auto-generated config file' . "\n"; 
            $config_file .= '// Do not change anything in this file!' . "\n"; 
            $config_file .= '//' . "\n\n"; 
            $config_file .= '$dbms = \'' . $dbms . '\';' . "\n\n"; 
            $config_file .= '$dbhost = \'' . $dbhost . '\';' . "\n"; 
            $config_file .= '$dbname = \'' . $dbname . '\';' . "\n"; 
            $config_file .= '$dbuser = \'' . $dbuser . '\';' . "\n"; 
            $config_file .= '$dbpasswd = \'' . $dbpasswd . '\';' . "\n\n"; 
            $config_file .= '$table_prefix = \'' . $table_prefix . '\';' . "\n\n";
            $config_file .= 'define(\'PHPBB_INSTALLED\', true);' . "\n\n";
            $config_file .= '?>';
             
            return $config_file;
        }

        /* make all the vars safe to display in form inputs and on the user's screen. Borrowed from usercp_register.php */
        $check_var_list = array('dbms' => 'dbms', 'dbhost' => 'dbhost', 'dbname' => 'dbname', 'dbuser' => 'dbuser', 'dbpasswd' => 'dbpasswd', 'table_prefix' => 'table_prefix');

        while (list($var, $param) = each($check_var_list))
        {
            if (!empty($HTTP_POST_VARS[$param]))
            {
                $$var = stripslashes(htmlspecialchars(strip_tags($HTTP_POST_VARS[$param])));
            }
        }

        $available_dbms = array(
            'mysql' => 'MySQL 3.x',
            'mysql4' => 'MySQL 4.x',
            'postgres' => 'PostgreSQL 7.x',
            'mssql' => 'MS SQL Server 7/2000',
            'msaccess' => 'MS Access [ ODBC ]',
            'mssql-odbc' => 'MS SQL Server [ OBDC ]',
        );

        if (isset($HTTP_POST_VARS['download_config']) && $HTTP_POST_VARS['download_config'] == true && isset($HTTP_POST_VARS['submit_download_config']) && $HTTP_POST_VARS['submit_download_config'] == 'Download')
        {
            /* borrowed from install.php */
            header('Content-Type: text/x-delimtext; name="config.php"');
            header('Content-disposition: attachment; filename=config.php');
            echo make_download($dbms, $dbhost, $dbname, $dbuser, $dbpasswd, $table_prefix);
            return;
        }
        ?>

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html" />
        <meta http-equiv="Content-Style-Type" content="text/css" />
        <title>phpBB :: dbinformer.php</title>
        <link rel="stylesheet" href="templates/subSilver/subSilver.css" type="text/css" />
        <style type="text/css">
        <!--
        p,ul,td {font-size:10pt;}
        h3 {font-size:12pt;color:blue}
        //-->
        </style>
        </head>
        <body>
        <table width="100%" border="0" cellspacing="0" cellpadding="10" align="center">
        <tr>
        <td class="bodyline"><table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
        <td>
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
        <td><img src="templates/subSilver/images/logo_phpBB.gif" border="0" alt="phpBB2 : Creating Communities" vspace="1" /></a></td>
        <td align="center" width="100%" valign="middle"><span class="maintitle">dbinformer.php</span>
        </td>
        </tr>
        </table>

        <br /><b><div align="center">
        <a href="#what">Vos infos</a> |
        <a href="#connect">Connexion à la base de données</a> |
        <a href="#tables">Tables dans la base de données</a> |
        <a href="#config">Fichier Config</a>
        </b></div>

        <table width="100%" border="0" cellspacing="0" cellpadding="10" align="center">
        <tr>
        <td align="center" width="100%" valign="middle"><span class="maintitle"></span></td>
        </tr>
        <tr>
        <td width="100%">
        <table width="100%" cellpadding="2" cellspacing="1" border="0" class="forumline">
        <tr>
        <th colspan="2">Configuration Base de Données</th>
        </tr>
        <tr>
        <td class="row1" align="right"><span class="gen">Type de Base de Données: </span></td>
        <td class="row2">
        <form action="<?php echo $HTTP_SERVER_VARS['PHP_SELF']; ?>" method="post">
        <select name="dbms">
        <?php
        /* loop through the dbms, with the correct one selected (hopefully!) */
        while (list($var, $param) = each($available_dbms))
        {
            $selected = ($dbms == $var) ? ' selected="selected"' : '';
            echo '<option value="' . $var . '"' . $selected . '>' . $param . '</option>';
        }
        ?>
        </select></td>
        </tr>
        <tr>
        <td class="row1" align="right"><span class="gen">Nom de serveur de la base de données: </span></td>
        <td class="row2"><input type="text" name="dbhost" value="<?php echo @$dbhost; ?>" /></td>
        </tr>
        <tr>
        <td class="row1" align="right"><span class="gen">Nom de votre base de données: </span></td>
        <td class="row2"><input type="text" name="dbname" value="<?php echo @$dbname; ?>" /></td>
        </tr>
        <tr>
        <td class="row1" align="right"><span class="gen">Nom d'utilisateur de la base de données: </span></td>
        <td class="row2"><input type="text" name="dbuser" value="<?php echo @$dbuser; ?>" /></td>
        </tr>
        <tr>
        <td class="row1" align="right"><span class="gen">Mot de passe de la base de données: </span></td>
        <td class="row2"><input type="password" name="dbpasswd" value="<?php echo @$dbpasswd; ?>" /></td>
        </tr>
        <tr>
        <td class="row1" align="right"><span class="gen">Choisissez le préfixe des tables (exemple <b>phpbb_ </b>): </span></td>
        <td class="row2"><input type="text" name="table_prefix" value="<?php echo @$table_prefix; ?>" /></td>
        </tr>
        <tr>
        <td class="row1" align="right"><span class="gen"><b>Créer un fichier config.php: </b></span></td>
        </td>
        <td class="row2"><input type="checkbox" name="generate_config" value="true" <?php $checked = (isset($HTTP_POST_VARS['generate_config']) && $HTTP_POST_VARS['generate_config'] == true) ? 'checked="checked"' : ''; echo $checked; ?> /></td>
        </tr>
        <tr>
        <td class="catbottom" align="center" colspan="2">
        <input class="mainoption" type="submit" name="submit" value="Submit" /></td>
        </tr>
        </form></td>
        </tr>
        </table>
        <?php
        if (!isset($HTTP_POST_VARS['submit']))
        {
            echo '<br />SVP entrez vos données.<br />';
        }
        else
        {
            /* dbal added by Techie-Micheal [and then obliterated by BFL]. weeeeeee! */
            switch ($dbms)
            {
                case 'mysql':
                    if (function_exists(@mysql_connect))
                    {
                        $db = array(
                            'choice' => 'MySQL 3.x',
                            'connect' => @mysql_connect($dbhost, $dbuser, $dbpasswd),
                            'select' => @mysql_select_db($dbname),
                            'error' => @mysql_error(),
                            'list' => @mysql_list_tables($dbname),
                            'fetch' => @mysql_fetch_row,
                            'close' => @mysql_close()
                        );
                    }
                    else
                    {
                        $error = true;
                        $error_msg = 'Les fonctions requises pour effectuer cette opération ne sont pas disponibles pour ' . $available_dbms[$dbms] . '.';
                    }
                break;

                case 'mysql4':
                    if (function_exists(@mysql_connect))
                    {
                        $db = array(
                            'choice' => 'MySQL 4.x',
                            'connect' => @mysql_connect($dbhost, $dbuser, $dbpasswd),
                            'select' => @mysql_select_db($dbname),
                            'error' => @mysql_error(),
                            'list' => @mysql_list_tables($dbname),
                            'fetch' => @mysql_fetch_row,
                            'close' => @mysql_close()
                        );
                    }
                    else
                    {
                        $error = true;
                        $error_msg = 'Les fonctions requises pour effectuer cette opération ne sont pas disponibles pour ' . $available_dbms[$dbms] . '.';
                    }
                break;
                     
                case 'msaccess':
                    if (function_exists(@odbc_connect))
                    {
                        $db = array(
                            'choice' => 'MS Access [ ODBC ]',
                            'connect' => @odbc_connect($dbhost, $dbuser, $dbpasswd),
                            'select' => 'na',
                            'error' => @odbc_errormsg(),
                            'list' => 'na', /* odbc_tables() */
                            'fetch' => 'na', /* odbc_fetch_row(), odbc_result_all() */
                            'close' => @odbc_close()
                        );
                    }
                    else
                    {
                        $error = true;
                        $error_msg = 'Les fonctions requises pour effectuer cette opération ne sont pas disponibles pour ' . $available_dbms[$dbms] . '.';
                    }
                break;
                     
                case 'postgres':
                    if (function_exists(@pg_connect))
                    {
                        $db = array(
                            'choice' => 'PostgreSQL 7.x',
                            'connect' => @pg_connect('host=' . $dbhost . ' user=' . $dbuser . ' dbname=' . $dbname . ' password=' . $dbpasswd),
                            'select' => 'na',
                            'error' => @pg_last_error(),
                            'list' => @pg_exec("SELECT relname FROM pg_class WHERE relkind = 'r' AND relname NOT LIKE 'pg\_%'"), /* provided by SuGa */
                            'fetch' => @pg_fetch_row,
                            'close' => @pg_close()
                        );
                    }
                    else
                    {
                        $error = true;
                        $error_msg = 'Les fonctions requises pour effectuer cette opération ne sont pas disponibles pour ' . $available_dbms[$dbms] . '.';
                    }
                break;                 
                case 'mssql':
                    if (function_exists(@mssql_connect))
                    {
                        $db = array(
                            'choice' => 'MS SQL Server 7/2000',
                            'connect' => @mssql_connect($dbhost, $dbuser, $dbpasswd),
                            'select' => @mssql_select_db($dbname),
                            'error' => @mssql_get_last_message(),
                            'list' => 'na',
                            'fetch' => 'na', /* mssql_fetch_row() */
                            'close' => @mssql_close()
                        );
                    }
                    else
                    {
                        $error = true;
                        $error_msg = 'Les fonctions requises pour effectuer cette opération ne sont pas disponibles pour ' . $available_dbms[$dbms] . '.';
                    }
                break; 

                case 'mssql-odbc':
                    if (function_exists(@odbc_connect))
                    {
                        $db = array(
                            'choice' => 'MS SQL Server [ ODBC ]',
                            'connect' => @odbc_connect($dbhost, $dbuser, $dbpasswd),
                            'select' => 'na',
                            'error' => @odbc_errormsg(),
                            'list' => 'na', /* odbc_tables() */
                            'fetch' => 'na', /* odbc_fetch_row(), odbc_result_all() */
                            'close' => @odbc_close()
                        );
                    }
                    else
                    {
                        $error = true;
                        $error_msg = 'Les fonctions requises pour effectuer cette opération ne sont pas disponibles pour ' . $available_dbms[$dbms] . '.';
                    }
                break; 

                default:
                    $error = true;
                    $error_msg = 'DB non reconnue.';
                break;
            }
             
            if ($error == true && $error_msg != '')
            {
                echo '<br /><b>ERREUR:</b> ' . $error_msg . '<br />';
            }
            else
            {
                echo '<a name="what"><h3><u>Vos infos</u></h3></a>';
                echo 'Type de base de données: <b>' . $db['choice']  . '</b><br />';
                echo 'Nom du serveur de la base de données: <b>' . $dbhost . '</b><br />';
                echo 'Nom de la base de données: <b>' . $dbname . '</b><br />';
                echo 'Nom de l\'utilisateur de la base de données: <b>' . $dbuser .   '</b><br />';
                echo 'Mot de passe de la base de données: <b>' . $dbpasswd   . '</b><br />';

                echo '<a name="connect"><h3><u>Connexion à la base de données</u></h3></a>';
                 
                if (!$db['connect'])
                {
                    echo 'Vous n\'avez pas établi la connexion à <b>' . $db['choice'] . '</b>.<br />';
                    echo '<b>ERREUR:</b> <i>' . $db['error'] . '</i><br /><br />';
                }
                else
                {
                    echo 'Vous avez établi la connexion à <b>' . $db['choice'] . '</b>.<br /><br />';
                    $connect = true;
                }

                if ($dbms == 'msaccess' || $dbms == 'postgres' || $dbms == 'mssql-odbc') 
                {         
                    /* for dbmses which have no db select function */
                    $select = true;
                }
                else
                {
                    if (!$db['select'])
                    {
                        echo 'Votre base de données n\'a pas été trouvée.<br />';
                        echo '<b>ERREUR:</b> <i>' . $db['error'] . '</i><br />';
                    }
                    else
                    {
                        echo 'Votre base de données a bien été trouvée.<br />';
                        $select = true;
                    }
                }

                if ($connect == true && $select == true)
                {
                    echo '<a name="tables"><h3><u>Tables da   ns la base de données</u></h3></a>';
                    if ($dbms == 'mysql' || $dbms == 'mysql4' || $dbms == 'postgres')
                    {
                        echo '<i>Les tables comportant le préfixe que vous avez spécifié sont indiquées en gras.</i>';
                        echo '<ul>';
                        while ($table = $db['fetch']($db['list']))
                        {   
                            /* Highlight tables with the table_prefix specified */
                            if (preg_match("/^$HTTP_POST_VARS[table_prefix]/i", $table[0]))
                            {
                                echo '<li><b>' . $table[0] . '</b></li><br />';
                            }
                            else
                            {
                                echo '<li>' . $table[0] . '</li><br />';
                            }
                        }
                        echo '</ul>';
                    }
                    else
                    {
                        echo 'Désolé, cette fonction n\'est pas disponible avec ' . $db['choice'] . '.';
                    }

                    /* defined a var which is only there if successfully connected to the database and the database is found */
                    $all_connected = true;
                }

                /* Create a config file if checked and if the connection went OK */
                if (isset($HTTP_POST_VARS['generate_config']) && $HTTP_POST_VARS['generate_config'] == true)
                {
                    echo '<a name="config"><h3><u>Fichier Config</u></h3></a>';
                    if ($all_connected != true)
                    {
                        echo 'La connexion à la base de données à échoué, aucun fichier config n\'a pu être créé.<br />';
                    }
                    else
                    {
                        echo 'Copiez les <b>19</b> lignes ci-dessous et enregistrez-les dans un fichier <u>config.php</u> ou cliquez sur le bouton <u>Download</u> ci-dessous pour télécharger le fichier config tout prêt.<br />Envoyez ce fichier à la racine de votre forum.<br />Assurez-vous qu\'il n\'y a rien du tout après le <u>?></u> (ceci inclus aussi les espaces ou retour à la ligne).<br>Votre fichier doit contenir uniquement les 19 lignes ci-dessous, rien de plus et rien de moins<br /><br />';

                        /* Create our config file */
                        echo '<form action="' . $HTTP_SERVER_VARS['PHP_SELF'] . '" method="post"><table cellspacing="1" cellpadding="3" border="0"><tr><td class="code">';
                        echo make_config($dbms, $dbhost, $dbname, $dbuser, $dbpasswd, $table_prefix);
                        echo '</td></tr></table>';
                        echo '<input type="hidden" name="dbms" value="' . $dbms . '" />';
                        echo '<input type="hidden" name="dbhost" value="' . $dbhost . '" />';
                        echo '<input type="hidden" name="dbname" value="' . $dbname . '" />';
                        echo '<input type="hidden" name="dbuser" value="' . $dbuser . '" />';
                        echo '<input type="hidden" name="dbpasswd" value="' . $dbpasswd . '" />';
                        echo '<input type="hidden" name="table_prefix" value="' . $table_prefix . '" />';
                        echo '<input type="hidden" name="download_config" value="true" />';
                        echo '<br /><input type="submit" name="submit_download_config" value="Download" class="mainoption" /><br />';
                    }
                }

                /* close the connection */
                if ($all_connected == true)
                {
                    $db['close'];
                }
            }
        }

        /* And they all lived happily ever after...
        The End */
        ?>

        <br /><a href="javascript:scrollTo('0','0');"><b>Retour en haut de la page</b></a>
        </td>
        </tr>
        </table>
        <div align="center"><span class="copyright">&copy; Copyright 2002 The <a href="http://www.phpbb.com/about.php" target="_phpbb" class="copyright"><b>phpBB Group</b></a><br />Traduction <a href="http://www.breakobus.net" target="_phpbb" class="copyright"><b>Breakolami</b></a></span></div>
        </td>
        </tr>
        </table>
        </body>
        </html>
Avatar de l’utilisateur
breakolami
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 3502
Inscription: 02 Juil 2002 à 19:35
Localisation: Champigny

Retourner vers [phpBB 2.0.x] Forum de documentation

Qui est en ligne

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

Liens : phpBB.biz • phpBBHacks.com • phpBB-Seo.com • EzCom-fr.com • phpBB-Services.com • phpBB3 Styles • Net Avenir • PromoBenef • Ticket Gagnant •