Carousel lié à la bdd

Résolu/Fermé
anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 - 11 mars 2022 à 14:26
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 - 13 mars 2022 à 20:11
Bonjour,

J'ai un carousel, et j'aimerais lié les informations à ma bddmais je n'ai que des erreurs mes images ne se charges pas ...
(Au passages les erreurs ne viennent pas des url des images cars ses mêmes url je les utilise ailleurs et elle marche)

<section class="section">
        <div class="row isotope-wrap">

                <?php

                  $bdd = new PDO('mysql:host=localhost;dbname=mydb', 'root', 'root');

                  $recupPlat = $bdd->query('SELECT img_produit FROM plat WHERE id_plat = ?');
                  $recupBoisson = $bdd->query('SELECT img_boisson FROM boisson WHERE id_boisson = ?');
                  $recupDessert = $bdd->query('SELECT img_dessert FROM desserts WHERE id_dessert = ?');
                  $recupPlatdeux = $bdd->query('SELECT img_produit FROM plat WHERE id_produit = ?');
                  $recupApero = $bdd->query('SELECT img_aperitif FROM aperitif WHERE id_aperitif = ?');

                  $valuesPlat = $recupCarousel->fetch();
                  $valuesBoisson = $recupCarousel->fetch();
                  $valuesDessert = $recupCarousel->fetch();
                  $valuesPlatdeux = $recupCarousel->fetch();
                  $valuesApero = $recupCarousel->fetch();
                  
                ?>

          <!-- Isotope Content-->
          <div class="col-lg-12">
            <div class="isotope" data-isotope-layout="fitRows" data-isotope-group="gallery" data-lightgallery="group" data-lg-thumbnail="false">
              <div class="row no-gutters row-condensed">
                <div class="col-12 col-sm-6 col-md-4 isotope-item wow-outer" data-filter="*">
                  <div class="wow slideInDown">
                    <div class="gallery-item-classic"><img src="<?= $valuesPlat['img_produit']; ?>" alt="" width="640" height="429"/>
                      <div class="gallery-item-classic-caption"><a href="<?= $valuesPlat['img_produit']; ?>" data-lightgallery="item">zoom</a></div>
                    </div>
                  </div>
                </div>
                <div class="col-12 col-sm-6 col-md-4 isotope-item wow-outer" data-filter="Category 3">
                  <div class="wow slideInDown">
                    <div class="gallery-item-classic"><img src="<?= $valuesBoisson['img_boisson']; ?>" alt="" width="640" height="429"/>
                      <div class="gallery-item-classic-caption"><a href="<?= $valuesBoisson['img_boisson']; ?>" data-lightgallery="item">zoom</a></div>
                    </div>
                  </div>
                </div>
                <div class="col-12 col-sm-6 col-md-4 isotope-item wow-outer" data-filter="Category 3">
                  <div class="wow slideInDown">
                    <div class="gallery-item-classic"><img src="<?= $valuesDessert['img_dessert']; ?>" alt="" width="640" height="429"/>
                      <div class="gallery-item-classic-caption"><a href="<?= $valuesDessert['img_dessert']; ?>" data-lightgallery="item">zoom</a></div>
                    </div>
                  </div>
                </div>
                <div class="col-12 col-sm-12 col-md-6 isotope-item wow-outer" data-filter="Category 3">
                  <div class="wow fadeInUp">
                    <div class="gallery-item-classic"><img src="<?= $valuesPlatdeux['img_produit']; ?>" alt="" width="960" height="429"/>
                      <div class="gallery-item-classic-caption"><a href="<?= $valuesPlatdeux['img_produit']; ?>" data-lightgallery="item">zoom</a></div>
                    </div>
                  </div>
                </div>
                <div class="col-12 col-sm-12 col-md-6 isotope-item wow-outer" data-filter="Category 2">
                  <div class="wow fadeInUp">
                    <div class="gallery-item-classic"><img src="<?= $valuesApero['img_aperitif']; ?>" alt="" width="960" height="429"/>
                      <div class="gallery-item-classic-caption"><a href="<?= $valuesApero['img_aperitif']; ?> data-lightgallery="item">zoom</a></div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </section>


Mon problème précis est que dans mon carousel tout mes slides ne s'appelles pas de la même mannieres donc je ne peux pas tout simplement boucler ...

Configuration: Windows / Chrome 99.0.4844.51

4 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
11 mars 2022 à 15:25
Bonjour
Relis ton code php.. tu verras que tu n'utilises pas les bonnes variables
.
1
anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6
11 mars 2022 à 15:58
oui c'est vrai déjà mdrrr

<section class="section">
        <div class="row isotope-wrap">

                <?php

                  $bdd = new PDO('mysql:host=localhost;dbname=mydb', 'root', 'root');

                  $recupPlat = $bdd->query('SELECT img_produit FROM plat WHERE id_plat = 15');
                  $recupBoisson = $bdd->query('SELECT img_boisson FROM boisson WHERE id_boisson = 4');
                  $recupDessert = $bdd->query('SELECT img_dessert FROM desserts WHERE id_dessert = 4');
                  $recupPlatdeux = $bdd->query('SELECT img_produit FROM plat WHERE id_plat = 16');
                  $recupApero = $bdd->query('SELECT img_aperitif FROM aperitif WHERE id_aperitif = 1');

                  $valuesPlat = $recupPlat->fetch();
                  $valuesBoisson = $recupBoisson->fetch();
                  $valuesDessert = $recupDessert->fetch();
                  $valuesPlatdeux = $recupPlatdeux->fetch();
                  $valuesApero = $recupApero->fetch();
                  
                ?>

          <!-- Isotope Content-->
          <div class="col-lg-12">
            <div class="isotope" data-isotope-layout="fitRows" data-isotope-group="gallery" data-lightgallery="group" data-lg-thumbnail="false">
              <div class="row no-gutters row-condensed">
                <div class="col-12 col-sm-6 col-md-4 isotope-item wow-outer" data-filter="*">
                  <div class="wow slideInDown">
                    <div class="gallery-item-classic"><img src="<?= $valuesPlat['img_produit']; ?>" alt="" width="640" height="429"/>
                      <div class="gallery-item-classic-caption"><a href="<?= $valuesPlat['img_produit']; ?>" data-lightgallery="item">zoom</a></div>
                    </div>
                  </div>
                </div>
                <div class="col-12 col-sm-6 col-md-4 isotope-item wow-outer" data-filter="Category 3">
                  <div class="wow slideInDown">
                    <div class="gallery-item-classic"><img src="<?= $valuesBoisson['img_boisson']; ?>" alt="" width="640" height="429"/>
                      <div class="gallery-item-classic-caption"><a href="<?= $valuesBoisson['img_boisson']; ?>" data-lightgallery="item">zoom</a></div>
                    </div>
                  </div>
                </div>
                <div class="col-12 col-sm-6 col-md-4 isotope-item wow-outer" data-filter="Category 3">
                  <div class="wow slideInDown">
                    <div class="gallery-item-classic"><img src="<?= $valuesDessert['img_dessert']; ?>" alt="" width="640" height="429"/>
                      <div class="gallery-item-classic-caption"><a href="<?= $valuesDessert['img_dessert']; ?>" data-lightgallery="item">zoom</a></div>
                    </div>
                  </div>
                </div>
                <div class="col-12 col-sm-12 col-md-6 isotope-item wow-outer" data-filter="Category 3">
                  <div class="wow fadeInUp">
                    <div class="gallery-item-classic"><img src="<?= $valuesPlatdeux['img_produit']; ?>" alt="" width="960" height="429"/>
                      <div class="gallery-item-classic-caption"><a href="<?= $valuesPlatdeux['img_produit']; ?>" data-lightgallery="item">zoom</a></div>
                    </div>
                  </div>
                </div>
                <div class="col-12 col-sm-12 col-md-6 isotope-item wow-outer" data-filter="Category 2">
                  <div class="wow fadeInUp">
                    <div class="gallery-item-classic"><img src="<?= $valuesApero['img_aperitif']; ?>" alt="" width="960" height="429"/>
                      <div class="gallery-item-classic-caption"><a href="<?= $valuesApero['img_aperitif']; ?> data-lightgallery="item">zoom</a></div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </section>


Voici mon code corrigé mais qui n'éxécute toujours pas ce que je souhaite..
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718 > anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022
11 mars 2022 à 16:08
Regarde le code source générer de ta page et montre-nous à quoi il ressemble...
Le fichier dans lequel tu as mis ce code, se trouve-t-il au même niveau que tes autres script qui utilisent les URL de tes produits ?
1
anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6 > jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024
Modifié le 11 mars 2022 à 16:55
Oui en fait avec ce code la ses images charges et s'affiches ce que je voudrait c'est pouvoir les modifié directement depuis le backoffice au lieux d'écrire leurs "id" dans le code..
par exemple au lieu de :
- 15, 4, 4, 16, 1
avoir :
- ?, ?, ?, ?, ?
et ses points d'intérogations peuvent être modifier depuis le backoffice
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718 > anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022
11 mars 2022 à 17:57
Et bien oui.. pas de soucis.
Tu créés une table pour stocker les ID des images que tu veux afficher dans ton slider
Puis tu iras chercher, dans la page que tu viens de nous montrer, cette liste d'id pour t'en servir ensuite dans tes requêtes..
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718 > jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024
11 mars 2022 à 17:59
Par contre, pour plus de facilités, il ne faut pas découper en plusieurs tables comme tu l'as fait ...
img_produit , img_boisson ....

A la place .. il faut UNE SEULE Table ... images_produits
Et dedans, stocker chaque image.. peut importe que ça soit une boisson, un dessert, une entrée...
1
anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6
Modifié le 11 mars 2022 à 18:38
J'était sur la bonne voix tout à l'heure alors, j'avais créer une table pour mes sliders ;) en revanche si je dois créer une seule et même table pour mes images sa va complexifié tout le reste de mon code ... je peux peut être allez les cherché dans mes tables déjà prètes ?
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
Modifié le 11 mars 2022 à 18:45

en revanche si je dois créer une seule et même table pour mes images sa va complexifié tout le reste de mon code ... je peux peut être allez les cherché dans mes tables déjà prètes ?

Tout est possible ... mais le temps que tu vas perdre à remettre la structure de ta table au propre .. tu le gagneras sur le reste de ton dev et sur la maintenabilité et l'évolutivité de ton site...

J'espère que tu n'as pas non plus créé une table par type de produit ... là ça sera le pompon ...
1
anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6 > jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024
Modifié le 11 mars 2022 à 18:55
^^ non.. j'ai créer simplement une table pour mes plat avec tout mes plats, une table dessert etc...
ce que j'aimerais vraiment faire c'est de faire un lien sur mon backoffice en dessous de chaque produits avec écris "ajoutez au carousel" et un compteur avec le nombre d'image dans mon carousel qui est de 5 images donc un petit "4/5" ou "5/5" si il est complet
tu pensse que tu pourrais m'aider à faire sa ?
je peux peut etre t'envoyer mon site directement non comme sa tu regarde et on fait sa ensemble ? ^^
pour l'instant mon backoffice il ressemble à sa :



Oui je sais je devrais également rajouté un champ description cars la les description sont toutes les même, mais sinon ajoutez fonctionne supprimer fonctionne et modifier fonctionne c'est déjà bien ^^
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718 > anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022
11 mars 2022 à 18:59
Tu as bien réussi à faire tes autres pages ... pourquoi n'y arriverais tu pas pour celle la ??
Je veux bien t'aider ( mais ici uniquement .. ) à condition que tu commences à coder quelque chose et que tu reviennes nous le montrer en expliquant précisément sur quoi tu bloques.
Mais en gros .. un form pour chaque bouton "ajouter au carousel" ..
Formulaire qui enverra l'id du produit
Et pour le compteur.. une simple requête SELECT COUNT au début de ton script fera l'affaire...

Bref.. que tu "standard" ... comme tes autres boutons..
0
anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6 > anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022
Modifié le 11 mars 2022 à 19:05
voila le code pour cette interface :
<!-- boisson -->
                    <div class="tab-pane fade" id="tabs-1-4">
                    <?php
                        /* boisson */      
                    $bdd = new PDO('mysql:host=localhost;dbname=mydb', 'root', 'root');
                    $recupProd = $bdd->query('SELECT * FROM boisson');
                    
                    while ($valeurs = $recupProd->fetch())
                    {

                    ?>
                    
                        <div class="box-event-modern">
                            <div class="event-item-modern  overflow-auto">
                                <h4 style="margin: 1vh;"><?= $valeurs['id_boisson']; ?> : id du produit</h4>
                                <h4 class="event-item-modern-title"><?= $valeurs['nom_boisson']; ?></h4>
                                <p class="event-time"> prix : <?= $valeurs['prix_boisson']; ?> € </p>
                                <p class="event-time"><?= $valeurs['img_boisson']; ?></p>
                                <div class="event-item-modern-text">
                                    <p>The most popular drink in Venice: refreshing, easygoing &…happy! Perfect to be sipped as an “Aperitivo” just before dinner - delightful!</p>
                                    <a href="supp.php?id_boisson=<?=$valeurs['id_boisson']; ?>" style="background: red; color: white;">Supprimer le produit</a>
                                    <a href="modifie.php?id_boisson=<?=$valeurs['id_boisson']; ?>" style="background: blue; color: white;">Modifier</a>
                                    <form method="POST" action="add.php">
                                        <p class="h3 bg-green">Ajoutez un boisson</p>
                                        <input type="text" name="newboisson" placeholder="nom du produit">
                                        <input type="number" name="numboisson" step="0.01" placeholder="prix du produit">
                                        <input type="url" name="imgboisson" placeholder="url de l'image">
                                        <input type="submit" name="valider_boisson">
                                    </form>
                                </div>
                            </div>
                        </div>
                    
                    
                    <?php
                    }
                    ?>
                    </div>


voila le code pour la modification :
<?php
/* boisson */

if(isset($_GET['id_boisson']) AND !empty($_GET['id_boisson'])) {
    
    $getid = $_GET['id_boisson'];
    $recupProd = $bdd->prepare('SELECT * FROM boisson WHERE id_boisson = ? ');
    $recupProd->execute(array($getid));

    

    if($recupProd->rowCount() > 0){

        $alldata = $recupProd->fetch();
        $oldnameboisson = $alldata['nom_boisson'];
        $oldprixboisson = $alldata['prix_boisson'];
        $oldpictureboisson = $alldata['img_boisson'];

        if(isset($_POST['modife'])) {
            $nameprod = htmlspecialchars($_POST['newprod']);
            $prixprod = htmlspecialchars($_POST['prodnumb']);
            $imgprod = htmlspecialchars($_POST['imgprod']);

            $updateprod = $bdd->prepare('UPDATE boisson SET nom_boisson = ?, prix_boisson = ?, img_boisson = ? WHERE id_boisson = ?');
            $updateprod->execute(array($nameprod, $prixprod, $imgprod, $getid));

            header('Location: produits.php');
            exit;
        }

    } else {
        ?> <style> .boissonmodife {display: none;} </style> <?php
    }
} else {
    ?> <style> .boissonmodife {display: none;} </style> <?php
}

?>
            <div class="boissonmodife">
                <h2>Modifier la boisson</h2>

                <form method="POST">

                    <p>Ancien nom : <?= $oldnameboisson; ?></p>

                    <input type="text" name="newprod" placeholder="nom du produit">

                    <p>Ancien prix : <?= $oldprixboisson; ?></p>

                    <input type="number" name="prodnumb" placeholder="prix du produit" step="0.01">

                    <p>Ancienne img : <?= $oldpictureboisson; ?></p>

                    <input type="url" name="imgprod" placeholder="url de l'image">

                    <input type="submit" name="modife">

                </form>
                <br>
                <a href="produits.php">Retour aux produits</a>
            </div>




le code pour la suppression :

/* boisson */
if(isset($_GET['id_boisson']) AND !empty($_GET['id_boisson'])) {
    
    $getid = $_GET['id_boisson'];
    $recupProd = $bdd->prepare('SELECT * FROM boisson WHERE id_boisson = ?');
    $recupProd->execute(array($getid));
    if($recupProd->rowCount() > 0){

        $suppProd = $bdd->prepare('DELETE FROM boisson WHERE id_boisson = ?');
        $suppProd->execute(array($getid));

        header('Location: produits.php');
        exit;


    } else {
        echo "erreur ! pas de produit";
    }
} else {
    echo "erreur ! pas de produit.";
}


et le code pour l'ajout :

/* boisson */
if(isset($_POST['valider_boisson'])) {
    if(!empty(($_POST['newboisson'])) AND !empty($_POST['numboisson'])) {

        $getprod = htmlspecialchars($_POST['newboisson']);
        $getprice = $_POST['numboisson'];
        $getpicture = $_POST['imgboisson'];

        $insert = $bdd->prepare('INSERT INTO boisson (nom_boisson, prix_boisson, img_boisson) VALUES (?, ?, ?)');
        $insert->execute(array($getprod, $getprice, $getpicture));

        header('Location: produits.php');
        exit;

    } else {
        echo "Le produit n'as pas été ajoutez";
    }
} else {
    echo "erreur l'action n'as pas pu être effectuer";
}


et il y as la meme chose pour les desserts les plats, les aperitifs
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718 > anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022
11 mars 2022 à 19:06
Heuuuuu..... tu m'as bien dit que tu n'avais pas fait différentes tables pour tes produits non ??
Alors que là.. je vois une table BOISSONS .. et que tu me dis avoir la même chose pour les plats et les apéros .....
Donc .... là .. non...
Je ne te viendrai pas en aide tant que tu n'auras pas refais au propre le modèle de ta base ..
Sinon on va faire une usine à gaz .. et ça va être laborieux à mettre en place vu ton niveau de connaissances.

Bon courage.
Reviens une fois le ménage fait si tu veux mon aide.
1
anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6
11 mars 2022 à 19:21
J'ai peut être mal compris alors ^^ j'ai fait une table pour tout mes aperitifs, une table pour tout mes plâts une table pour tout mes désserts et une table pour toutes mes boissons tu voudrais que je fasse :
- une table produits
- une table prix
- une table images
c'est sa ?
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
11 mars 2022 à 19:46
Est-ce qu'il y a possiblement plusieurs prix pour un produit ?
Si oui, il faut bien une table prix si c'est non tu peux directement stocker le prix dans la table produit.

C'est quoi le but final de ce site ?
Un restaurant ?
Une gestion de menus ?
Un produit peut-il être dans différents menus ?
Les prix concerne les produits et oi les menus ?
Tu peux avoir plusieurs images pour un seul produit ?
Voici a minima les questions que tu devrais te poser afin de concevoir correctement la structure de ta base de données...
Car on ne commence à coder qu'une fois qu'on a eu cette réflexion....
1
anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6 > jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024
11 mars 2022 à 19:55
d'accord bon je vais refaire tout sa en revanche je ne sais pas si j'aurrais finni se soir ...
Je me pencherai sur mon problème d'origine demain haha je vais déjà régler les problèmes éxistants ^^
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
Modifié le 12 mars 2022 à 20:42
Je vais t'aider un peu niveau code...

Déjà, un fichier de connexion à la bdd et qui contient les fonctions utiles pour faire les requêtes SQL

<?php

/**
 * class db.class.php
 * Pour l'instancier : $objet = new db();
  ------------------------------------------------------
  METHODES
  ------------------------------------------------------
  Syntaxe :
  lafonctiopn($sql,$datas) -> $sql : string contenant la requête à executer
  -> $datas : variables (dans un array associatif) à passer à la requête
  Liste des méthodes :
  db_All() -> retourne un Array contenant TOUTES les lignes du résultat de la requête
  db_One() -> retourne un Array contenant LA PREMIERRE ligne du résultat de la requête
  db_Insert -> retourne l' ID nouvellement créé par une requête INSERT
  db_Exec() -> Pour les requêtes DELETE / UPDATE : retourne le nombre de lignes impactées
 */
class db {
 // Ne pas toucher
  private $bdd = null;
  private $prepare = NULL;
  private $rowCount = 0;
  private $res = NULL;

//A adapter à ta bdd
  private $host = "localhost";
  private $user = "LeUSerPourLaBdd";
  private $pwd = "leMotDePasse";
  private $dbname = "NomDeTaBdd";
  private $port = "3306";
  private $charset = "utf8";

  /**
    Constructeur
   */
  function __construct (){
      $this->cnx ();
  }

  /**
   * connexion à la BDD
   */
  private function cnx (){
    $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . ';charset=' . $this->charset . ';port=' . $this->port;
    try {
      $bdd = new PDO ( $dsn, $this->user, $this->pwd );
      // Activation des erreurs PDO
      $bdd->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
      // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
      $bdd->setAttribute ( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );
    } catch ( PDOException $e ) {
      echo "<br>dsn : $dsn";
      die ( 'Erreur : ' . $e->getMessage () );
    }
    $this->bdd = $bdd;
  }

  /**
   * Execute une requête SQL
   */
  private function dbQuery ( $sql, $datas = NULL ) {
    try {
      $this->prepare = $this->bdd->prepare ( $sql );
      $this->res = $this->prepare->execute ( $datas );
      $this->rowCount = $this->prepare->rowCount ();
    } catch ( Exception $e ) {
      // en cas d'erreur :
      echo "<br><b>Erreur ! " . $e->getMessage () . "</b>" . PHP_EOL;
      echo "<pre> La requete :" . $sql . "</pre>" . PHP_EOL;
      echo " <pre>Les datas : " . PHP_EOL;
      print_r ( $datas );
      echo "</pre>" . PHP_EOL;
    }
  }

  public function db_All ( $sql, $datas = NULL ) {
    $this->dbQuery ( $sql, $datas );
    return $this->prepare->fetchAll ();
  }

  public function db_One ( $sql, $datas = NULL ) {

    try {
      $this->dbQuery ( $sql, $datas );
      return $this->prepare->fetch ();
    } catch ( Exception $e ) {
      echo "Erreur " . $e->getMessage ();
      echo "<br> SQL :" . $sql;
      echo "<br> datas :" . print_r ( $datas, true );
    }
  }

  public function db_Insert ( $sql, $datas = NULL, $returnId = TRUE ) {
    $this->dbQuery ( $sql, $datas );
    return $returnId ? $this->bdd->lastInsertId () : $this->res;
  }

  public function db_Exec ( $sql, $datas = NULL ) {
    $this->dbQuery ( $sql, $datas );
    return array('$this->tbl' => $this->res, 'rowCount' => $this->rowCount);
  }
 }
 ?>
 

Ensuite, pour chacune de tes tables tu pourras faire un fichier contenant une class du genre
 <?php
 /**
  class produits.class.php
  */
class produits extends db{
   
  private $tbl = "produits"; // nom de la table principale concernée par cette class

  function __construct(){
    parent::__construct();
  }

//retourne la liste de tous les produits présents dans la table
  public function getAllProducts(){
   $sql = "SELECT * FROM " . $this->tbl;
   return $this->db_All($sql); 
  }

  // retoure un produit en fonction de son id
  public function getProductById($id){
     $sql = "SELECT * FROM " . $this->tbl . " WHERE id=:id ";
     $datas = [':id'=>$id];
     return $this->db_One($sql,$datas); 
  }
  
  //permet d'insérer un nouveau produit dans la table
  // NB: Si tu comptes avoir plusieurs images par produit.. il faudra retirer la colonne de cette table et créer une table
  // spécifiquement pour gérer les produit  => image_produit ( #id, #id_produit, image )
  public function ajouter($nom,$prix, $image ,$description="",$id_categorie="1"){
      $sql = " INSERT INTO " . $this->tbl . " (nom,prix,image,description,id_categorie) VALUES (:nom,:prix,:image,:description,:id_categorie) ";
      $datas = [':nom'=>$nom, ':prix' => $prix,':image'=>$image ,':description' => $description,':id_categorie'=>$id_categorie];
      return $this->db_Insert($sql,$datas);
  }
   

  public function modifier($id,$nom,$prix, $image ,$description="",$id_categorie=1){
    $sql = " UPDATE " . $this->tbl . " SET nom = :nom
             ,prix = :prix
             ,image = :image 
             ,description = :description
             id_categorie = :id_categorie
             WHERE id=:id";
    $datas = [':nom'=>$nom, ':prix' => $prix,':image'=>$image ,':description' => $description,':id_categorie'=>$id_categorie, ':id'=>$id];
    return $this->db_Exec($sql,$datas);
  }
  
}
 


Et pour pouvoir les utiliser, il faut require les deux fichiers puis instancer la class produits
Par exemple
<?php

require_once "db.class.php";
require_once "produits.class.php";

//on instancie l'objet produits
$oProduit = new produits();

// on créé un nouveau produit
$idNouveauProduit = $oProduit->ajouter("Pizza 4 fromages","9.50","/image/pizza4f.jpeg","Pizza avec 4 frommages.. ementale, chèvre...",2);

//on modifie le produit..
$oProduit->modifier($idNouveauProduit,'Pizza ChèvreMiel', 15.88,"autreimage.jpeg","c'est bon le chèvre..",2);




0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
Modifié le 12 mars 2022 à 20:39
Tu n'as pas répondu à mes diverses questions...
mais on pourrait imaginer une structure de ce genre


ce qui donne, niveau sql, un truc du style

-- ---
-- Table 'produits'
-- 
-- ---

DROP TABLE IF EXISTS `produits`;
  
CREATE TABLE `produits` (
  `id` INTEGER NOT NULL AUTO_INCREMENT DEFAULT NULL,
  `nom` VARCHAR(256) NULL DEFAULT NULL,
  `image` VARCHAR(2048) NULL DEFAULT NULL,
  `description` MEDIUMTEXT NULL DEFAULT NULL,
  `id_categorie` TINYINT NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
);

-- ---
-- Table 'categories'
-- type de produit ( dessert, plat, boisson..)
-- ---

DROP TABLE IF EXISTS `categories`;
  
CREATE TABLE `categories` (
  `id` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
  `libelle` VARCHAR(256) NULL DEFAULT NULL COMMENT 'boisson,plat,dessert...',
  PRIMARY KEY (`id`)
) COMMENT 'type de produit ( dessert, plat, boisson..)';

-- ---
-- Table 'carousel'
-- 
-- ---

DROP TABLE IF EXISTS `carousel`;
  
CREATE TABLE `carousel` (
  `id` INTEGER NOT NULL AUTO_INCREMENT DEFAULT NULL,
  `id_produit` INTEGER NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
);

-- ---
-- Table 'menus'
-- 
-- ---

DROP TABLE IF EXISTS `menus`;
  
CREATE TABLE `menus` (
  `id` INTEGER NOT NULL AUTO_INCREMENT DEFAULT NULL,
  `nom` VARCHAR(256) NULL DEFAULT NULL COMMENT 'Nom du menu',
  `prix` DECIMAL(10,2) NULL DEFAULT 0 COMMENT 'Prix du menu',
  PRIMARY KEY (`id`)
);

-- ---
-- Table 'menu_produits'
-- un menu contient 1 ou plusieurs produits
-- ---

DROP TABLE IF EXISTS `menu_produits`;
  
CREATE TABLE `menu_produits` (
  `id` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
  `id_menu` INTEGER NULL DEFAULT NULL,
  `id_produit` INTEGER NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) COMMENT 'un menu contient 1 ou plusieurs produits';

-- ---
-- Foreign Keys 
-- ---

ALTER TABLE `produits` ADD FOREIGN KEY (id) REFERENCES `carousel` (`id`);
ALTER TABLE `produits` ADD FOREIGN KEY (id_categorie) REFERENCES `categories` (`id`);
ALTER TABLE `menu_produits` ADD FOREIGN KEY (id_menu) REFERENCES `menus` (`id`);
ALTER TABLE `menu_produits` ADD FOREIGN KEY (id_produit) REFERENCES `produits` (`id`);

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718 > jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024
13 mars 2022 à 20:11
Petite correction de la base de données
-- --------------------------------------------------------
-- Hôte :                        localhost
-- Version du serveur:           5.7.24 - MySQL Community Server (GPL)
-- SE du serveur:                Win64
-- HeidiSQL Version:             10.2.0.5599
-- --------------------------------------------------------

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

-- Listage de la structure de la table resto. carousel
DROP TABLE IF EXISTS `carousel`;
CREATE TABLE IF NOT EXISTS `carousel` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_produit` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Listage des données de la table resto.carousel : ~0 rows (environ)
DELETE FROM `carousel`;
/*!40000 ALTER TABLE `carousel` DISABLE KEYS */;
/*!40000 ALTER TABLE `carousel` ENABLE KEYS */;

-- Listage de la structure de la table resto. categories
DROP TABLE IF EXISTS `categories`;
CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `libelle` varchar(256) DEFAULT NULL COMMENT 'boisson,plat,dessert...',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='type de produit ( dessert, plat, boisson..)';

-- Listage des données de la table resto.categories : ~2 rows (environ)
DELETE FROM `categories`;
/*!40000 ALTER TABLE `categories` DISABLE KEYS */;
INSERT INTO `categories` (`id`, `libelle`) VALUES
	(1, 'Boissons'),
	(2, 'Plats'),
	(3, 'Dessert');
/*!40000 ALTER TABLE `categories` ENABLE KEYS */;

-- Listage de la structure de la table resto. menus
DROP TABLE IF EXISTS `menus`;
CREATE TABLE IF NOT EXISTS `menus` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(256) DEFAULT NULL COMMENT 'Nom du menu',
  `prix` decimal(10,2) DEFAULT '0.00' COMMENT 'Prix du menu',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- Listage des données de la table resto.menus : ~0 rows (environ)
DELETE FROM `menus`;
/*!40000 ALTER TABLE `menus` DISABLE KEYS */;
INSERT INTO `menus` (`id`, `nom`, `prix`) VALUES
	(1, 'Plat + Dessert', 12.50);
/*!40000 ALTER TABLE `menus` ENABLE KEYS */;

-- Listage de la structure de la table resto. menu_produits
DROP TABLE IF EXISTS `menu_produits`;
CREATE TABLE IF NOT EXISTS `menu_produits` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_menu` int(11) DEFAULT NULL,
  `id_produit` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='un menu contient 1 ou plusieurs produits';

-- Listage des données de la table resto.menu_produits : ~0 rows (environ)
DELETE FROM `menu_produits`;
/*!40000 ALTER TABLE `menu_produits` DISABLE KEYS */;
INSERT INTO `menu_produits` (`id`, `id_menu`, `id_produit`) VALUES
	(1, 1, 1),
	(2, 1, 2);
/*!40000 ALTER TABLE `menu_produits` ENABLE KEYS */;

-- Listage de la structure de la table resto. produits
DROP TABLE IF EXISTS `produits`;
CREATE TABLE IF NOT EXISTS `produits` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(256) DEFAULT NULL,
  `image` varchar(2048) DEFAULT NULL,
  `prix` decimal(10,2) DEFAULT NULL,
  `description` mediumtext,
  `id_categorie` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- Listage des données de la table resto.produits : ~0 rows (environ)
DELETE FROM `produits`;
/*!40000 ALTER TABLE `produits` DISABLE KEYS */;
INSERT INTO `produits` (`id`, `nom`, `image`, `prix`, `description`, `id_categorie`) VALUES
	(1, 'pizza', '', 10.00, '', 2),
	(4, 'cocal', NULL, 1.00, 'du gaz..', 1);
/*!40000 ALTER TABLE `produits` ENABLE KEYS */;

/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

0