L'image ne s'affiche pas correctement

Résolu/Fermé
chrisCL974 Messages postés 63 Date d'inscription jeudi 30 septembre 2021 Statut Membre Dernière intervention 25 novembre 2021 - 30 sept. 2021 à 06:40
chrisCL974 Messages postés 63 Date d'inscription jeudi 30 septembre 2021 Statut Membre Dernière intervention 25 novembre 2021 - 30 sept. 2021 à 12:49
<?php
    include '../model/creerForm.php';
    include '../model/creerPogramme.php';
    include '../model/participant.php';
    $creerForm = new creerForm;
    $creerProgramme = new creerProgramme;
    $participant = new participant;
    $insert = $creerForm->createForm();
    $insertPro = $creerProgramme->createProgramme();
    $insertParticipant = $participant->participant();
    include 'create.php';
    $rowsall = $creerForm->getAllForm();
    $rowsallPro = $creerProgramme->getAllProgramme();
    $rowsallParticipant = $participant->getAllParticipant();
 
?>
<?php
 
                if(!empty($rowsall) AND ($rowsallPro)) {
                foreach($rowsall as $k => $row) {
                    $rowPro = $rowsallPro[$k];
            ?>       
 
            <div class="col">
                <div class="card" style="width: 28rem;display:inline-block;margin-bottom:20px">
                    <img src="<?php
                    echo $rowPro['imageProgramme']; ?>" class="card-img-top" alt="...">
                    <div class="card-body">
                        <h3 style="color: #FFBC42;" class="card-title"><b><?php echo $row['programme'];?></b></h3>
                        <h5 class="card-title"><?php echo $rowPro['sousTitre'];?></h5>
                        <div style="background-color: #FFBC42;color:white;border-radius:20px;height:40px">
                            <h5 style="text-align: center;padding-top:10px;padding-bottom:10px;">Durée : <?php echo $rowPro['heurePro'] . "h" . $rowPro['minutePro'];?></h5>
                        </div> <br>
                        <p><b>Formateur : </b> <?php echo $row['formateur'];?>
 
                        <div class="row">
                            <div class="col">
                                <b>Date : </b> <?php echo $row['forma_date'];?>
                            </div>
                            <div class="col">
                                <b>Heure : </b> <?php echo $row['forma_time'];?>
                            </div>
                        </div>   <br>   
                        <p><b>Lieu : </b> <?php echo $row['lieu'];?></p>
                        <p><b>Nombre de place : </b> <?php echo $row['nb_place'];?></p>
                         
                        <div class="d-flex justify-content-center">
                            <a href="#staticBackdropParticipe" class="btn btn-warning"
                            style="color:white">Participer</a>  
                            <a href="#staticBackdropVoirPlus"
                            class="btn btn-secondary" style="color:white">Voir plus</a>
                        </div>
                    </div>
                    
                </div>
            </div>
 
            <?php
            }
         
        }?>



Bonjour, je commence Php et j'ai un projet qui porte sur la création de formation. C'est comme un genre de cours qu'on peut participer en fonction des matières créées.

En gros, "programme" c'est comme une matière, j'ai réalisé un formulaire avec la method POST pour insérer l'image, le titre, la durée, les descriptions du programme. Et la "formation" qui est le cours, j'ai fait de même, un formulaire pour insérer le nom du programme, le formateur, la durée du programme, etc...

Lors de la création de formation, tout se passe bien, tout est bien importé. Le problème c'est lors de l'affichage des formations créées, l'image et la durée de la formation ne correspond pas à celui de la formation créées.

Et là en dessous, comme vous pouvez le voir, l'image ne correspond pas au titre du programme. Et la durée du programme correspond bien à l'image mais pas au reste
A voir également:

4 réponses

jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719
30 sept. 2021 à 06:52
Bonjour
Faudrait déjà voir ce que contient la variable $rowsallPro (en en faisant un var_dump)
Et aussi nous montrer le code de la fonction...
0
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719
30 sept. 2021 à 06:55
Idem pour ton autre variable $rowsall et la fonction qui te permet de l'initier..
0
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719 > jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024
30 sept. 2021 à 06:57
Sachant que le souci se situe certainement sur cette ligne
$rowPro = $rowsallPro[$k];

Et qu'il faut remplacer $k. Par $row['lechampquifaitlelien..']
0
chrisCL974 Messages postés 63 Date d'inscription jeudi 30 septembre 2021 Statut Membre Dernière intervention 25 novembre 2021 1 > jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024
30 sept. 2021 à 07:14
oups désolé j'ai répondu dans un autre commentaire
0
chrisCL974 Messages postés 63 Date d'inscription jeudi 30 septembre 2021 Statut Membre Dernière intervention 25 novembre 2021 1
30 sept. 2021 à 06:58
Ce code est pour la création de la formation/cours qui dépend de creerForm.php :
<form action="" method="post">
                                <select value="$programme" class="form-select" aria-label="Default select example" name="programme" required>
                                    <option disabled selected>Programme</option>
                                    <?php if(!empty($rowsallPro)) {
                                    foreach($rowsallPro as $rowPro){?>
                                    <option value="<?php echo $rowPro['titreProgramme'];?>"><?php echo $rowPro['titreProgramme']; ?></option>
                                 
                                        <?php 
                                        }   
                                    } ?>
                                </select>
</form>


Ce code est creerForm.php :
        public function createForm(){
            if(isset($_POST['programme']) && isset($_POST['lieu']) && isset($_POST['formateur']) && isset($_POST['nb_place']) && isset($_POST['forma_time']) && isset($_POST['forma_date'])) {
                $programme = $_POST['programme'];
                $lieu = $_POST['lieu'];
                $formateur = $_POST['formateur'];   
                $nb_place = $_POST['nb_place'];
                $forma_date = $_POST['forma_date'];
                $forma_time = $_POST['forma_time'];   
            if(empty($programme)) {
                header("Location: index_admin.php?error=Nom de la formation requis");
                exit();
            } else {
                    $query = "INSERT INTO forma (programme, lieu, formateur, forma_time, forma_date, nb_place) VALUES ('$programme', '$lieu', '$formateur', '$forma_time', '$forma_date', '$nb_place')";
                    if($sql = $this->conn->query($query)) {
                        echo "<div class='card w-25' style='padding:20px;color: #45509E; margin:auto;'>
                            <h5 style='text-align:center'>
                            <i class='fas fa-check-circle'></i>  <b>La formation sur le programme <q> ". $_POST['programme']. " </q> a bien été créé</b></h5>
                            <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers les programmes</a>
                            </div>";
                        exit();
                    }
                    else {
                        header("Location: index_admin.php");
                        exit();
                        }
                }
            }
        }



Ce code est creerProgramme.php (où le titre du programme de la formation dépend du titreProgramme) :
public function createProgramme(){
                if(isset($_POST['titreProgramme']) && isset($_POST['sousTitre']) && isset($_POST['descriProgramme']) && isset($_POST['heurePro']) && isset($_POST['minutePro']) && isset($_POST['itemProgramme']) && isset($_POST['modaliteProgramme']) && isset($_FILES['imageProgramme'])) {
                $titreProgramme = $_POST['titreProgramme'];
                $sousTitre = $_POST['sousTitre'];
                $descriProgramme = $_POST['descriProgramme'];   
                $heurePro = $_POST['heurePro'];   
                $minutePro = $_POST['minutePro']; 
                $itemProgramme = $_POST['itemProgramme'];
                $modaliteProgramme = $_POST['modaliteProgramme'];  
                $imageProgramme = $_FILES['imageProgramme']['name'];  
                if(empty($titreProgramme)) {
                    header("Location: index_admin.php?error=Nom du programme requis");
                    exit();
                } else {
                        $query = "INSERT INTO programme (titreProgramme, sousTitre, descriProgramme, heurePro, minutePro, itemProgramme, modaliteProgramme, imageProgramme) VALUES ('$titreProgramme', '$sousTitre', '$descriProgramme', '$heurePro', '$minutePro', '$itemProgramme', '$modaliteProgramme', '$imageProgramme')";
                        if($sql = $this->conn->query($query)) {
                            move_uploaded_file($_FILES['imageProgramme']['tmp_name'], "$imageProgramme");
                            echo "<div class='card w-25' style='padding:20px;color: #45509E; margin:auto;'>
                            <h5 style='text-align:center'>
                            <i class='fas fa-check-circle'></i>  <b>Le programme <q> ". $_POST['titreProgramme']. " </q> a bien été créé</b></h5>
                            <a href='../admin/programme.php' style='color:grey;text-align:center'>Retour vers les programmes</a>
                            </div>";
                            exit();
                        }
                        else {
                            header("Location:programme.php");
                            exit();
                        }
                }
            }
        }
0
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719
30 sept. 2021 à 08:36
c'est le code de ces fonctions qui m'intéresse
 $rowsallPro = $creerProgramme->getAllProgramme();
 $rowsallParticipant = $participant->getAllParticipant();


et que tu fasses un var_dump de ces deux variables
0
chrisCL974 Messages postés 63 Date d'inscription jeudi 30 septembre 2021 Statut Membre Dernière intervention 25 novembre 2021 1 > jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024
30 sept. 2021 à 08:44
Code creerProgramme.php :
        public function getAllProgramme(){
            $data = null;
            $query = "SELECT programmeID, titreProgramme, sousTitre, descriProgramme, heurePro, minutePro, itemProgramme, modaliteProgramme, imageProgramme FROM programme";
            if($sql = $this->conn->query($query)) {
                while($row = mysqli_fetch_assoc($sql)) {
                    $data[] = $row;
                }
            }
            return $data;
        }



Code participant.php :

public function getAllParticipant(){
    $data = null;
    $query = "SELECT participantID, programmeChoisi, nomParticipant, prenomParticipant, fonctionParticipant, serviceParticipant FROM participant";
    if($sql = $this->conn->query($query)) {
        while($row = mysqli_fetch_assoc($sql)) {
            $data[] = $row;
        }
    }
    return $data;
}  
0
chrisCL974 Messages postés 63 Date d'inscription jeudi 30 septembre 2021 Statut Membre Dernière intervention 25 novembre 2021 1 > chrisCL974 Messages postés 63 Date d'inscription jeudi 30 septembre 2021 Statut Membre Dernière intervention 25 novembre 2021
30 sept. 2021 à 08:44
et voici le var_dump :
0
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719
30 sept. 2021 à 09:00
Dans ta requête pour avoir les participants, à quoi correspond la colonne programmeChoisi ?
C'est l'ID de la formation ( la colonne programmeID de la table programme ) ?

Si oui, c'est ce champ là qu'il faut utiliser dans ton code..
$rowsallPro = $creerProgramme->getAllProgramme();
$rowsallParticipant = $participant->getAllParticipant();  

if(!empty($rowsall) AND ($rowsallPro)) {
  foreach($rowsall as $k => $row) {
    $programmeChoisi = $row['programmeChoisi'];
    $rowPro = $rowsallPro[$programmeChoisi];



0
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719
30 sept. 2021 à 09:05
Oupsss...
ce n'est pas la jointure avec la participants qui pose problème...
Désolé.

Donc, il nous faut le code de
 $rowsall = $creerForm->getAllForm();


et sur le principe.. c'est la même chose... il faut utiliser le champ qui sert de "lien" entre tes deux requetes
Mais en regardant tes var_dump .. je ne vois pas de champs qui correspondent ...
N'aurais tu pas oublié une table (une jointure) dans ton code ???
0
chrisCL974 Messages postés 63 Date d'inscription jeudi 30 septembre 2021 Statut Membre Dernière intervention 25 novembre 2021 1 > jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024
30 sept. 2021 à 09:30
creerForm.php fonction getAllForm:
        public function getAllForm(){
            $data = null;
            $query = "SELECT formaID, programme, lieu, formateur, forma_date, forma_time, nb_place FROM forma ORDER BY forma_date ASC";
            if($sql = $this->conn->query($query)) {
                while($row = mysqli_fetch_assoc($sql)) {
                    $data[] = $row;
                }
            }
            return $data;
        }

Comment je pourrais joindre le programme avec le titreProgramme du programme.php?
0
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719 > chrisCL974 Messages postés 63 Date d'inscription jeudi 30 septembre 2021 Statut Membre Dernière intervention 25 novembre 2021
30 sept. 2021 à 10:13
Déjà, il faut éviter de faire des "liens" en se basant sur du texte ( le titre... )
Il est largement préférable de ne travailler qu'avec des identifiants uniques ( en général, les ID (clés primaires..), de tes tables )

Quel le schéma de ta bdd ?
As tu fais le MCD de ta base ? quelles sont les cardinalités de tes tables ?
Un programme peut être lié à combien de formations ?
Une formation peut être rattachée à combien de programme ?

Si une formation peut se trouver dans plusieurs programmes et ou un programme avoir plusieurs formations .. il va te falloir une table supplémentaire pour gérer ces associations.
Si, la relation, par contre, est du un pou un ( une formation associé à un programme ).. là, il suffit d'ajouter un champ dans ta table formation ( id_programme) le lien se fera alors sur ce champ.
0
chrisCL974 Messages postés 63 Date d'inscription jeudi 30 septembre 2021 Statut Membre Dernière intervention 25 novembre 2021 1 > jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024
30 sept. 2021 à 11:31
Un programme peut se trouver dans plusieurs formations et une formation peut contenir plusieurs participants

0
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719 > chrisCL974 Messages postés 63 Date d'inscription jeudi 30 septembre 2021 Statut Membre Dernière intervention 25 novembre 2021
30 sept. 2021 à 11:40
Comme je te le disais, il faut modifier dans ta table forma, le champ "programme" pour le lier au champ programmID de ta table programme.
Ca évitera des erreurs et rendra le fonctionnement du code plus performant.

et donc, dans ton code, ça deviendra
if(!empty($rowsall) AND ($rowsallPro)) {
  foreach($rowsall as $k => $row) {
    $programmeChoisi = $row['programmID'];
    $rowPro = $rowsallPro[$programmeChoisi];
0
chrisCL974 Messages postés 63 Date d'inscription jeudi 30 septembre 2021 Statut Membre Dernière intervention 25 novembre 2021 1
30 sept. 2021 à 09:05
Les participants sont ceux qui ont choisi la formation créées.
J'ai voulu faire le lien avec mysql mais cela n'a pas marché

$rowsall et $rowsallPro sont pour récupérer les informations dont la base où les formulaires ont submit.
Et là c'est d'afficher l'image par rapport au programme choisi où la formation a été créée
Vu que la formation dépend du programme choisis. (je sais pas si c'est compréhensible.. ????????)
0