probleme avec fichier news

Default
,

Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Quand j'essaie de creer ou mdifier une news j'ai une erreur en ligne 36 soit: " $req = $this->pdo->query($query);"

 public function query($query, $params = false) {
        if ($params) {
            $req = $this->pdo->prepare($query);
            $req->execute($params);
        } else {
            $req = $this->pdo->query($query);
        }

Ce que je veux

Que sa fonctionne lol!!

Ce que j'obtiens

un message d'erreur

Fatal error: in C:\wamp64\www\SiteJSP1\class\Database.php on line 36

Cde de database

<?php

class Database{

    /**
     * @var
     */
    private $pdo;

    /**
     * @param $login
     * @param $password
     * @param $database_name
     * @param string $host
     */

    public function __construct($login, $password, $database_name, $host = 'localhost'){

        $this->pdo = new PDO("mysql:dbname=$database_name; host=$host", $login, $password);
        $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

    }

     /**
     * @param $query
     * @param bool|array $params
     * @return PDOStatement
     */

     public function query($query, $params = false) {
        if ($params) {
            $req = $this->pdo->prepare($query);
            $req->execute($params);
        } else {
            $req = $this->pdo->query($query);
        }

        return $req;
    }

    /**
     * @return string
     */
    public function lastInsertId() {
        return $this->pdo->lastInsertId();
    }
}

code de gestnews pdo

<?php
class gestnewsPDO extends gest_news
{
  /**
   * Attribut contenant l'instance représentant la BDD.
   * @type PDO
   */
  protected $db;

  /**
   * Constructeur étant chargé d'enregistrer l'instance de PDO dans l'attribut $db.
   * @param $db PDO Le DAO
   * @return void
   */
  public function __construct($db)
  {
    $this->db = $db;
  }

  /**
   * @see gest_news::add()
   * @param $db
   */
  protected function add(News $news)
  {
   /* $requete = $this->db->prepare('INSERT INTO news SET auteur = :auteur, titre = :titre, contenu = :contenu, dateAjout = NOW(), dateModif = NOW()');

    $requete->bindValue(':titre', $news->titre());
    $requete->bindValue(':auteur', $news->auteur());
    $requete->bindValue(':contenu', $news->contenu());

    $requete->execute();*/
    $db->query('INSERT INTO news SET auteur =:auteur, titre =:titre, contenu = :contenu, dateAjout = NOW(), dateModif = NOW()');
  }

  /**
   * @see gest_news::count()
   */
  public function count()
  {
    return $this->db->query('SELECT COUNT(*) FROM news')->fetchColumn();
  }

  /**
   * @see gest_news::delete()
   */
  public function delete($id)
  {
    $this->db->exec('DELETE FROM news WHERE id = '.(int) $id);
  }

  /**
   * @see gest_news::getList()
   */
  public function getList($debut = -1, $limite = -1)
  {
    $sql = 'SELECT id, auteur, titre, contenu, dateAjout, dateModif FROM news ORDER BY id DESC';

    // On vérifie l'intégrité des paramètres fournis.
    if ($debut != -1 || $limite != -1)
    {
      $sql .= ' LIMIT '.(int) $limite.' OFFSET '.(int) $debut;
    }

    $requete = $this->db->query($sql);
    $requete->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'News');

    $listeNews = $requete->fetchAll();

    // On parcourt notre liste de news pour pouvoir placer des instances de DateTime en guise de dates d'ajout et de modification.
    foreach ($listeNews as $news)
    {
      $news->setDateAjout(new DateTime($news->dateAjout()));
      $news->setDateModif(new DateTime($news->dateModif()));
    }

    $requete->closeCursor();

    return $listeNews;
  }

  /**
   * @see gest_news::getUnique()
   */
  public function getUnique($id)
  {
    $requete =$this->db->query/*prepare*/('SELECT id, auteur, titre, contenu, dateAjout, dateModif FROM news WHERE id = :id');
    $requete->bindValue(':id', (int) $id, PDO::PARAM_INT);
    $requete->execute();

    $requete->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'News');

    $news = $requete->fetch();

    $news->setDateAjout(new DateTime($news->dateAjout()));
    $news->setDateModif(new DateTime($news->dateModif()));

    return $news;
  }

  /**
   * @see gest_news::update()
   */
  protected function update(News $news)
  {
    $requete = $this->db->prepare('UPDATE news SET auteur = :auteur, titre = :titre, contenu = :contenu, dateModif = NOW() WHERE id = :id');

    $requete->bindValue(':titre', $news->titre());
    $requete->bindValue(':auteur', $news->auteur());
    $requete->bindValue(':contenu', $news->contenu());
    $requete->bindValue(':id', $news->id(), PDO::PARAM_INT);

    $requete->execute();
  }
}

code de news

<?php

    class News{
        protected $erreurs =[],
                  $id,
                  $auteur,
                  $titre,
                  $contenu,
                  $dateAjout,
                  $dateModif;


/** gestion des erreurs**/

    const AUTEUR_INVALIDE = 1;
  const TITRE_INVALIDE = 2;
  const CONTENU_INVALIDE = 3;

public function __contruct($value=[]){
    if(!empty($value)){

        $this->assigne($value);
    }

}

public function assigne($donnees){
    foreach ($donnees as $attribut => $value) {
        $methode='set'.ucfirst($attribut);
        if (is_callable([$this, $methode]))
        {
            $this->$methode($value);
        }

    }
}

/** verif si la news est nouvelle**/
public function isnew(){
    return empty($this->id);
}

/** verif si la news est valide**/
public function isvalid() {
    return (!empty($this->auteur) || empty($this->titre) || empty($this->contenu));
    }


  // SETTERS //

  public function setId($id)
  {
    $this->id = (int) $id;
  }

  public function setAuteur($auteur)
  {
    if (!is_string($auteur) || empty($auteur))
    {
      $this->erreurs[] = self::AUTEUR_INVALIDE;
    }
    else
    {
      $this->auteur = $auteur;
    }
  }

  public function setTitre($titre)
  {
    if (!is_string($titre) || empty($titre))
    {
      $this->erreurs[] = self::TITRE_INVALIDE;
    }
    else
    {
      $this->titre = $titre;
    }
  }

  public function setContenu($contenu)
  {
    if (!is_string($contenu) || empty($contenu))
    {
      $this->erreurs[] = self::CONTENU_INVALIDE;
    }
    else
    {
      $this->contenu = $contenu;
    }
  }

  public function setDateAjout(DateTime $dateAjout)
  {
    $this->dateAjout = $dateAjout;
  }

  public function setDateModif(DateTime $dateModif)
  {
    $this->dateModif = $dateModif;
  }

  // GETTERS //

  public function erreurs()
  {
    return $this->erreurs;
  }

  public function id()
  {
    return $this->id;
  }

  public function auteur()
  {
    return $this->auteur;
  }

  public function titre()
  {
    return $this->titre;
  }

  public function contenu()
  {
    return $this->contenu;
  }

  public function dateAjout()
  {
    return $this->dateAjout;
  }

  public function dateModif()
  {
    return $this->dateModif;
  }
}

code de gest news

<?php
abstract class gest_news
{
  /**
   * Méthode permettant d'ajouter une news.
   * @param $news News La news à ajouter
   * @return void
   */
  abstract protected function add(News $news);

  /**
   * Méthode renvoyant le nombre de news total.
   * @return int
   */
  abstract public function count();

  /**
   * Méthode permettant de supprimer une news.
   * @param $id int L'identifiant de la news à supprimer
   * @return void
   */
  abstract public function delete($id);

  /**
   * Méthode retournant une liste de news demandée.
   * @param $debut int La première news à sélectionner
   * @param $limite int Le nombre de news à sélectionner
   * @return array La liste des news. Chaque entrée est une instance de News.
   */
  abstract public function getList($debut = -1, $limite = -1);

  /**
   * Méthode retournant une news précise.
   * @param $id int L'identifiant de la news à récupérer
   * @return News La news demandée
   */
  abstract public function getUnique($id);

  /**
   * Méthode permettant d'enregistrer une news.
   * @param $news News la news à enregistrer
   * @see self::add()
   * @see self::modify()
   * @return void
   */
  public function save(News $news)
  {
    if ($news->isValid())
    {
      $news->isNew() ? $this->add($news) : $this->update($news);
    }
    else
    {
      throw new RuntimeException('La news doit être valide pour être enregistrée');
    }
  }

  /**
   * Méthode permettant de modifier une news.
   * @param $news news la news à modifier
   * @return void
   */
  abstract protected function update(News $news);
}

Merci de votre aide!!!

88 Réponse

1 3 4 5
37685
, Il a répondu à ma question !

Salut,

Là je ne vois pas.

Tu as vérifié ce qu'il y a dans les 1ère variables, il y bien ce qu'il faudrait y avoir ?

public function __construct($login, $password, $database_name, $host = 'localhost') {
        var_dump($login);
        var_dump($password);
        var_dump($database_name);

        $this->pdo = new PDO("mysql:dbname=$database_name; host=$host", $login, $password);
        $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    }

 public function query($query, $params = false) {
        echo '<pre>';
        print_r($query);
        echo '</pre>';

        if ($params) {
            $req = $this->pdo->prepare($query);
            $req->execute($params);
        } else {
            $req = $this->pdo->query($query);
        }

        return $req;
    }

Et une "fatal error" ça peut être plein de choses.
Tu nous a montré le message d'erreur en entier ?

Default
, Il a répondu à ma question !

Bonsoir et merci SLK pour ta reponse.

Avec les var_dump j ai bien quelque chose dans la variable et ces bon, helas oui j'ai que ce petit message d'erreur!! qui est frnanchement tres vaque!!

string(4) "root" string(0) "" string(6) "db_jsp" 
Fatal error: in C:\wamp64\www\SiteJSP1\class\Database.php on line 40

A priori l'erreur se situe en ligne 36, se qui correspond a la fonction query, excatement a => $req = $this->pdo->query($query);

public function query($query, $params = false) {
        if ($params) {
            $req = $this->pdo->prepare($query);
            $req->execute($params);
        } else {
            $req = $this->pdo->query($query);
        }

        return $req;
    }

Je me creuse la tete mais je seche lol en plus mes connaissances sont limité (je suis un novice) lol.
Merci pour votre aide.

85354
, Il a répondu à ma question !

Salut, as-tu essayer en passant ta variable $pdo en public ? J'ai à peu près le même code pour ma connexion à la bdd et perso elle est en public !

Default
, Il a répondu à ma question !

Bonjour Jeremie,

Oui Jai essayer de passer la variable $pdo en public et sa change rien.

 protected function add(News $news)
  {
    $requete = $this->db->prepare('INSERT INTO news SET auteur = :auteur, titre = :titre, contenu = :contenu, dateAjout = NOW(), dateModif = NOW()');

    $requete->bindValue(':titre', $news->titre());
    $requete->bindValue(':auteur', $news->auteur());
    $requete->bindValue(':contenu', $news->contenu());

    $requete->execute();

     Si je mets la ligne si dessous en commentaire j ai l'erreur si dessous.
   /* $db->query('INSERT INTO news SET auteur =:auteur, titre =:titre, contenu = :contenu, dateAjout = NOW(), dateModif = NOW()');*/

  }
  Fatal error: Uncaught Error: Call to undefined method Database::prepare() in C:\wamp64\www\SiteJSP1\class\gestnewsPDO.php:26 Stack trace: #0 C:\wamp64\www\SiteJSP1\class\gest_news.php(50): gestnewsPDO->add(Object(News)) #1 C:\wamp64\www\SiteJSP1\membres\gest_adm\gest_news\gestion_news.php(40): gest_news->save(Object(News)) #2 {main} thrown in C:\wamp64\www\SiteJSP1\class\gestnewsPDO.php on line 26


Si je comprends bien la methode prepare est indefinie dans ma class database. ok ok , normalement avec ma fonction query je devrai pouvoir ecrire $db->query a la place de $requete = $this->db->prepare !!?? mais quand je le fait :

Notice: Undefined variable: db in C:\wamp64\www\SiteJSP1\class\gestnewsPDO.php on line 26

Fatal error: Uncaught Error: Call to a member function query() on null in C:\wamp64\www\SiteJSP1\class\gestnewsPDO.php:26 Stack trace: #0 C:\wamp64\www\SiteJSP1\class\gest_news.php(50): gestnewsPDO->add(Object(News)) #1 C:\wamp64\www\SiteJSP1\membres\gest_adm\gest_news\gestion_news.php(40): gest_news->save(Object(News)) #2 {main} thrown in C:\wamp64\www\SiteJSP1\class\gestnewsPDO.php on line 26

La je suis vraiment perdu , je comprend plus rien !!!

`

12066
, Il a répondu à ma question !

Tu ne peux pas appliquer la méthode prepare sur $db car $db n'est pas de type PDO, il faudrait, que dans le constructeur de ta classe db, tu ne prennes pas en paramètre db, mais rien, et tu instancies de cette manière : $this->db = new PDO..... et là, tu auras ton objet de type PDO, et tu pourras appliquer les méthodes de type fetchAll, prepare, execute etc...

44835
, Il a répondu à ma question !

@Mehdikacim la variable $db est fournie par le constructeur
malheureusement on ne voit pas le code de l'instanciation
il faut remonter la pile d'appels pour voir pourquoi on passe null au constructeur

Default
, Il a répondu à ma question !

Et si tu rajoutes $this devant db? $this->db->query?

Default
, Il a répondu à ma question !

Hello merci pour vos reponses.

Je suppose que la class db correspond a ma class Database ci dessous

<?php

class Database{

    /**
     * @var
     */
    public $pdo;

    /**
     * @param $login
     * @param $password
     * @param $database_name
     * @param string $host
     */

    public function __construct($login, $password, $database_name, $host = 'localhost'){

        $this->pdo = new PDO("mysql:dbname=$database_name; host=$host", $login, $password);
        $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

    }

     /**
     * @param $query
     * @param bool|array $params
     * @return PDOStatement
     */

     public function query($query, $params = false) {
        if ($params) {
            $req = $this->pdo->prepare($query);
            $req->execute($params);
        } else {
            $req = $this->pdo->query($query);
        }

        return $req;
    }

    /**
     * @return string
     */
    public function lastInsertId() {
        return $this->pdo->lastInsertId();
    }
}

Pour faire des essais afin de trouver l'erreur, j ai fait une class dbnews

<?php
class DBNews{
        public $db;

  public static function DB_News(){

    $db = new PDO('mysql:host=localhost;dbname=db_jsp', 'root', '');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    return $db;
  }

 }

Je sais plus si je vous avais mis le code du fichier gestion_news

<?php 
require_once "../../../class/bootstrap.php"; 

$auth = App::getAuth()->restrict();

$db = DBNews::DB_News();

/*$db = App::getDatabase();*/
$manager = new gestnewsPDO($db);

if (isset($_GET['modifier']))
{
  $news = $manager->getUnique((int) $_GET['modifier']);
}

if (isset($_GET['supprimer']))
{
  $manager->delete((int) $_GET['supprimer']);
  $message = 'La news a bien été supprimée !';
}

if (isset($_POST['auteur']))
{
  $news = new News(
    [
      'auteur' => $_POST['auteur'],
      'titre' => $_POST['titre'],
      'contenu' => $_POST['contenu']
    ]
  );

  if (isset($_POST['id']))
  {
    $news->setId($_POST['id']);
  }

  if ($news->isValid())
  {
    $manager->save($news);

    $message = $news->isNew() ? 'La news a bien été ajoutée !' : 'La news a bien été modifiée !';
  }
  else
  {
    $erreurs = $news->erreurs();
  }
}

require '../../../includes/haut_page.php';?>      

  <div class="conteneur">       
      <div id="menu_gauche"><h3><center>Gestion des news</center></h3>

        </br>

        <ul>
                <li><a href="../administration.php">Adminstration</a></li></br>

                <li><a href="../gest_membres/gestion_membres.php">Gestion des membres</a></li></br>

                 <li><a href="gestion_news.php">Gestion des news</a></li></br>

                <li><a href="/sitejsp1/cours/textes_referenciels/textes_referenciels.php">Textes et reférenciels</a></li>
        </ul>

               </div>

   <div class="affichenews"><h1> Gestion des news </h1>  <br/>
    <br/>


 <form action="" method="post">
      <p style="text-align: center">
<?php
if (isset($message))
{
  echo $message, '<br/>';
}
?>
        <?php if (isset($erreurs) && in_array(News::AUTEUR_INVALIDE, $erreurs)) echo 'L\'auteur est invalide.<br/>'; ?>
       <input type="text" name="auteur" value="<?php if (isset($news)) echo $news->auteur(); ?>" placeholder="Entrez votre prenom" size="45" maxlength="120" required//><br/>

       <br/> <?php if (isset($erreurs) && in_array(News::TITRE_INVALIDE, $erreurs)) echo 'Le titre est invalide.<br/>'; ?>
         <input type="text" name="titre" value="<?php if (isset($news)) echo $news->titre(); ?>" placeholder="Entrez le Titre de la news" size="45" maxlength="120" required//><br/>

         <br/><?php if (isset($erreurs) && in_array(News::CONTENU_INVALIDE, $erreurs)) echo 'Le contenu est invalide.'; ?>
       <textarea rows="20" cols="80" name="contenu" placeholder=" Ecrivez votre message!!"><?php if (isset($news)) echo $news->contenu(); ?></textarea><br/>
<?php
if(isset($news) && !$news->isNew())
{
?>
       <input type="hidden" name="id" value="<?= $news->id() ?>" />
        <input type="submit" value="Modifier" name="modifier" />
<?php
}
else
{
?>
       <br/>  <input type="submit" class="btn_primary" value="Ajouter" />
<?php
}
?>
      </p>
    </form>

    <p style="text-align: center">Il y a actuellement <?= $manager->count() ?> news. En voici la liste :</p>

    <center><table>
      <tr><th>Auteur</th><th>Titre</th><th>Date d'ajout</th><th>Dernière modification</th><th>Action</th></tr>
<?php
foreach ($manager->getList() as $news)
{
  echo '<tr><td>', $news->auteur(), '</td><td>', $news->titre(), '</td><td>', $news->dateAjout()->format('d/m/Y à H\hi'), '</td><td>', ($news->dateAjout() == $news->dateModif() ? '-' : $news->dateModif()->format('d/m/Y à H\hi')), '</td><td><a href="?modifier=', $news->id(), '">Modifier</a> | <a href="?supprimer=', $news->id(), '">Supprimer</a></td></tr>', "\n";
}
?>
    </table>
  </center>
        </div>
</div>          
        </br>

  <?php include '../../../includes/bas_page.php'; ?>

le souci maintenant c'est que je me retrouve avec une erreur tres tres vague : Fatal error: in C:\wamp64\www\SiteJSP1\class\gestnewsPDO.php on line 32 " $requete->execute();" qui correspond a la fonction add

public function add(News $news)
  {
    $requete = $this->db->prepare ('INSERT INTO news SET auteur = :auteur, titre = :titre, contenu = :contenu, dateAjout = NOW(), dateModif = NOW()');

    $requete->bindValue(':titre', $news->titre());
    $requete->bindValue(':auteur', $news->auteur());
    $requete->bindValue(':contenu', $news->contenu());

    $requete->execute();

  }

Mais pour quoi je ne peux pas utiliser $db = App::getDatabase(); comme dans mes autre fichier?

Merci pour votre patience et vtre aide!

Default
, Il a répondu à ma question !

Allo??

T'as essayé de faire comme je viens de te dire??

Default
, Il a répondu à ma question !

Il semblerait que la connexion au sgbd n'est pas établit... C'est de ce côté que ça se passe! C'est pour ça que c'est vague...

Default
, Il a répondu à ma question !

DSL Psylozoff je n'avais pas vu ton msg ci-dessous
"Psylozoff, Il y a 15 minutes - Signaler Il a répondu à ma question !
Et si tu rajoutes $this devant db? $this->db->query?"

Et oui j ai deja essayé et j ai la meme erreur "Fatal error: in C:\wamp64\www\SiteJSP1\class\gestnewsPDO.php on line 26".

sgdb?? donc visiblement le probleme viens de la connection a la base de données ?

Default
, Il a répondu à ma question !

Y'a de grandes chances... T'es sûr de tes ids de connexion?

Default
, Il a répondu à ma question !

Y'a-t-il des requêtes qui arrivent à passer?

Default
, Il a répondu à ma question !

J'ai testé l'inscription et login sa fonctionne dnc le probleme viens de la co a la bd!
Pour aller sur la page gestion news j ai besin d'etre connecté a la BD donc normalement la connection passe!

44835
, Il a répondu à ma question !

J'ai du mal à suivre,
au début c'est un bug dans ta classe Database ensuite c'est dans getNewsPDO
tu mélanges la classe PDO et ta classe Database (qui encapsule PDO)
tu devrais "typer" tous tes paramètres pour être sûr de ne pas mélanger les 2 classes.

D'une façon générale je trouve que c'est une très mauvaise idée de vouloir encapsuler PDO pour refaire la même chose en moins bien et en réutilisant les même noms de méthodes !!!! (ce forum pulule de messages de personnes qui se mélangent les pinceaux)

Avec un IDE comme netbeans ou phpstorm tu vois tout de suite ces erreurs.

Default
, Il a répondu à ma question !

Huggy a raison (comme souvent), je vois pas l'intérêt d'encapsuler PDO... Fais-en un singleton, plutôt..! Et utilise ses méthodes... C'est un objet déjà plutôt bien fait!

Default
, Il a répondu à ma question !

Pour mettre un peu de propre dans ton code, tu devrais, premièrement faire une class statique qui contient tes constantes!

class DBNewsCredentials {
    const LOGIN = "login";
    const PWD = "password";
    const HOST = "host";
    const DBNAME = "dbname";
}

class DBOtherCredentials {
    const LOGIN = "login";
    const PWD = "password";
    const HOST = "host";
    const DBNAME = "dbname";
}

Puis faire un fournisseur de PDO en singleton!

class PDOProvider {

    private static $pdoNews = null;
    private static $pdoOther = null:

    private function __construct() {}

    public static function getDBNews() {

        if (self::$pdoNews === null)  {
            self::$pdoNews = new PDO("mysql:dbname=".DBNewsCredentials::DBNAME.";host=".DBNewsCredentials::HOST, DBNewsCredentials::LOGIN, DBNewsCredentials::PWD);

            self::$pdoNews->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            self::$pdoNews->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
        }

        return self::$pdoNews;
    }

    public static function getDBOther() {

        if (self::$pdoOther === null) {
            self::$pdoOther = new PDO("mysql:dbname=".DBOtherCredentials::DBNAME.";host=".DBOtherCredentials::HOST, DBOtherCredentials::LOGIN, DBOtherCredentials::PWD);

            self::$pdoOther->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            self::$pdoOther->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
        }

        return self::$pdoOther;
    }
}

Pis, quand t'as besoin de ta db, tu fais un PDOProvider::getDBNews() et tu manipules l'objet PDO qui se suffit largement à lui-même! Et tes infos de connexion sont à l'abri dans un fichier que tu ne mets jamais sur les forums, quand t'as besoin d'aide...

Default
, Il a répondu à ma question !

Merci Psylosoff, si je comprend bien je remplace ma class Database et ma fonctin getDatabase par tes 3 class pour que je soi plus embeté avec pdo et pour que le code soi plus propre.

Vais essai sa .

Default
, Il a répondu à ma question !

Je sais pas de combien de classes t'as besoin... En lisant vite j'ai cru que tu utilisais plusieurs DB!
L'idée c'est de faire une classe pour chaque paquet de constantes en lien avec la connexion à chaque DB + un fournisseur de pdo qui gère l'instanciation de chacun des pdo nécessaires..! Après, t'adaptes!

Default
, Il a répondu à ma question !

Normalemnent j'ai qu'une class qui gere la DB et j ai qu'une DB (db_jsp) avec plusieurs tables (news, users, role et notes).

Pour essayé de comprendre j ai creer une deuxieme class pour la db(pas bien c'est provisoire!!)

Vais essayé avec ton idée apres a force de cherché, modifié j'ai peut etre empiré le problme.
Merci a vous pour votre aide.

1 3 4 5