Bonjour à toutes et tous,

Pour les besoins d'un gros travail scolaire, j'ai suivi le tuto Gestion d'image/création d'une galerie

Tout fonctionne nickel, et j'ai donc voulu adapter ce tutoriel à mon travail.
Bref, ma base de données contient, entre autre, une table "rubriques", avec un champ id, un champ nom, un champ texte, et un champ media, qui contient donc le nom du fichier image lié à telle ou telle rubrique.

J'ai donc adapté comme ceci:

Un fichier fonctions.php qui gère l'upload

<?php
    function uploadRubrique(){

        if(!empty($_FILES)){
            require("imgClass.php");

            $img = $_FILES'mediaRub'];
            $ext = strtolower(substr($img'name'],-3));
            $allow_ext = array("jpg",'png','gif');

            if(in_array($ext,$allow_ext)){
                move_uploaded_file($img'tmp_name'],"uploads/".$img'name']);
                Img::creerMini("uploads/".$img'name'],"uploads/mini",$img'name'],100,75);
                Img::convertirJPG("uploads/".$img'name']);
            }
            else{
                $erreur = "Votre fichier n'est pas une image.";
            }
        }
    }
?>

Ce fichier "fonction.php", est inclus à mon fichier index.php

Dans mon fichier index.php

J'ai réalisé le formulaire pour l'ajout de nouvelles données, et il fonctionne.
En dessous, j'ai placé un tableau qui reprend tout le contenu de ma base de données, un listing quoi...

Voici comment j'ai fait:

<table>
                        <caption>Liste des <?php echo $laTable; ?> et leur contenu:</caption>
                        <thead> <!-- En-tête du tableau -->
                            <tr>
                                <th>Titre</th>
                                <th>Texte</th>
                                <th>Date de publication</th>
                                <th>Média</th>
                                <th>Action</th>
                            </tr>
                        </thead> 
                        <tbody> <!-- Corps du tableau -->

                            <?php // début de région à répéter
                            while ($tiroir = mysql_fetch_object($resultat)) { ?>
                                <tr>
                                    <td><?php echo $tiroir->titre; ?></td>
                                    <td><?php echo $tiroir->texte; ?></td>
                                    <td><?php echo $tiroir->date; ?></td>
                                    <td id="mini"> <!-- A règler dans CSS pour bien afficher les miniatures -->
                                        <?php

                                            $dos = "uploads/mini";
                                            $dir = opendir($dos);
                                            while($file = readdir($dir)){
                                                $allow_ext = array("jpg",'png','gif');
                                                $ext = strtolower(substr($file,-3));
                                                if(in_array($ext,$allow_ext)){
                                                    ?>
                                                    <a href="uploads/<?php echo $file; ?>" class="zoombox zgallery1">
                                                        <img src="uploads/mini/<?php echo $file; ?>" />
                                                    </a>
                                                    <h5><?php echo $file; ?></h5>
                                                    <?php
                                                }
                                            }
                                        ?>
                                    </td>
                                    <td><a href="<?php echo $_SERVER"PHP_SELF"];?>?show=<?php echo $tiroir->id; ?>">Modifier</a></td>
                                </tr>
                            <?php } // fin de région à répéter ?>  

                        </tbody>
                    </table>

Le soucis se situe donc au niveau de ma 2° boucle: en fait, l'image que j'ajoute s'affiche pour chaque article, alors qu'elle ne devrait s'afficher que pour un article...

L'envoi de fichier images, avec création de vignettes, et pour moi une nouveauté... C'est la 1° fois que je tente cela lol, mais j'en ai besoin pour la réalisation de ce travail.

Pourriez vous m'aiguiller au mieux afin de comprendre mon erreur?

D'avance, un grand merci à vous pour votre aide.

Et merci à l'auteur du site pour ce travail de qualité :-p

Bon week end!

10 réponses


CaporalDead
Réponse acceptée

Si t'es dispo ce week end qu'on voit ça sur IRC dis moi quand

caema
Auteur
Réponse acceptée

J'allais justement poster cette aprem, j'ai finalement trouvé comment réaliser ce que je souhaitais, la force de la persévérance ;-)

Grand merci pour l'aide en tout cas!

caema
Auteur

Personne n'a une idée svp?

Salut @caema, bon c'est pas top clair ton truc, tu parles d'"article" et tu montres un bout de code qui à l'air de vouloir lister le contenu de ta table contenant des "medias". Peux tu être plus précis ? Description du comportement attendu, obtenu, une description de ton/tes modèle(s) et voir même la requête SQL que tu as exécuter. Merci.

caema
Auteur

Bon, et bien déjà... merci d'avoir pris la peine de répondre. Je vais essayer de me montrer plus claire.

Je suis donc occupée à la conception d'un site dynamique: site public et site d'administration.
Tout fonctionne bien, mais j'ai du mal à gérer l'upload d'image.
Voici la base de données que j'utilise:

Qu'il s'agisse de la table "rubriques" ou de la table "articles", le truc est le même: dans le champ media, j'ai un varchar, ce qui me permet d'enregistrer le nom du fichier image.

Dans le site d'administration,
J'ai donc crée un formulaire, qui permet par exemple, pour la rubrique accueil, d'ajouter une photo. Ce formulaire fonctionne, il envoi bien le fichier dans ma base de données.
Ensuite, j'ai un tableau, qui reprend le contenu de ma base de données, et j'aurai souhaité avoir la possibilité d'afficher une petite vignette de l'image qui correspond à telle rubrique. Le soucis, c'est que seul le nom du fichier s'affichait.
J'ai donc suivi le tuto, sur grafikart, concernant la création d'une galerie.

Cela semble fonctionner, sauf que je n'arrive pas à afficher l'image 1 pour la rubrique 1, l'image 2 pour la rubrique 2.... Toutes les images envoyées s'affichent pour toutes les rubriques, et non pour la rubrique spécifique que je lui ai désigné.

Voici mes requêtes SQL:

// LES VARIABLES:
        $laTable = "articles";

    // LES FONCTIONS:

        function ajouter(){
            global $laTable;
            $titre = addslashes($_POST"titreArticle"]);
            $texte = addslashes($_POST"texteArticle"]);
            $fichier = $_FILES"mediaArticle"]"name"];
            $rubrique = addslashes($_POST"rubriqueLiee"]);
            $sql = "INSERT INTO $laTable (titre,texte,date,media,rubrique)
                    VALUES ('$titre','$texte',NOW(),'$fichier','$rubrique');";
            mysql_query($sql);
        }

        function supprimer() {
            global $laTable,$tiroir;
            $id = $_GET"del"];

            montrer($id);
            $lefichier = $tiroir->media;

            if($lefichier !="" && file_exists("uploads/$lefichier")){
                unlink("uploads/$lefichier");  
            }
            $sql = "DELETE FROM $laTable
                    WHERE id = $id;";
            mysql_query($sql);
        } 

        function montrer($id){
            global $laTable,$tiroir;
            $sql = "SELECT *
                    FROM $laTable
                    WHERE id = $id ;";

            $resultat = mysql_query($sql);
            $tiroir = mysql_fetch_object($resultat);
        }
        function modifier(){
            global $laTable;
            $titre = addslashes($_POST"titreArticle"]);
            $texte = addslashes($_POST"texteArticle"]);
            $rubrique = addslashes($_POST"rubriqueLiee"]);
            $fichier = $_FILES"mediaArticle"]"name"];
            $id = $_POST"id"];
            if ($_FILES"mediaArticle"]"name"]!="") {
                    $fichier = $_FILES"mediaArticle"]"name"];
                    $sql = "UPDATE $laTable
                            SET titre = '$titre',
                                texte =' $texte',
                                date = NOW(),
                                media = '$media',
                                rubriqueLiee = '$rubrique'
                            WHERE id = $id;";
            }

            else {
                $sql = "UPDATE $laTable
                        SET titre = '$titre',
                            texte ='$texte',
                            date =NOW(),
                            rubrique = '$rubrique'
                        WHERE id = $id;";
            }
            mysql_query($sql);
        }
        // TESTS ET ROUTAGE ----------------------------------------------

// INSERT si il existe un POST id et qu'il est nul
         if (isset($_POST"id"]) && $_POST"id"]==0) {
             ajouter();
             uploadArticle();
         }

// DELETE si il existe un GET del
         if (isset($_GET"del"])) {
            supprimer();
         } 

// SHOW si il existe un GET show
         if (isset($_GET"show"])) {
            $id = $_GET"show"];
            montrer($id);
         }          
// UPDATE si il existe un POST id et qu'il est différent de 0
         if (isset($_POST"id"]) && $_POST"id"]>0) {
             modifier();
             uploadArticle();
          }
// ---------------------------------------------------------------
// Je formule ma requête et je stocke la recherche dans une armoire $resultat

                $sql = "SELECT articles.id, articles.titre, articles.texte, articles.date, articles.media, rubriques.titre AS rubriqueTitre
                        FROM articles, rubriques
                        WHERE articles.rubrique = rubriques.id;";

                $resultat = mysql_query($sql);

Voilà, j'espère avoir été plus claire cette fois?

Bon donc tu as bien tes données stockées en base, peux tu exécuter la requête suivante :

SELECT * FROM articles a LEFT JOIN rubriques r on a.rubrique = r.id

Je pars du prédicat que tu fais bien une jointure entre l'ID (PK de ta table rubrique) vers le champs "rubrique" (clé étrangère). Normalement avec ça tu devrais récupérer sur chaque ligne l'article et la rubrique correspondante.

caema
Auteur

J'ai test cette requête dans phpMyAdmin, elle fonctionne (pas d'erreur) mais je ne suis pas certaine qu'elle fasse ce que je souhaite, au vu des résultats donnés dans phpMyAdmin.

Avez vous bien compris que ma question est de savoir comment lié un fichier uploadé à tel article, ou telle rubrique?

Tu peux venir sur l'IRC pour qu'on en parle ? http://www.grafikart.fr/irc

Désolé @caema je t'ai loupé :/ si tu veux je reviens vers 18h

caema
Auteur

Je ne sais pas encore si je serais chez moi à 18h, mais si c'est le cas, j'essaye de repasser! Merci à vous ;)