Insertion au bon endroit d'une nouvelle ligne d'un tableau

Résolu/Fermé
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 - Modifié le 17 mars 2022 à 13:42
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 - 21 mars 2022 à 21:39
Bonjour,

Ce n'est pas très simple à expliquer mais je vais tenter d'être le plus clair possible.
Pour mon travail, j'essaie de développer un outils qui me permettra une gestion plus efficace.

Je bloque sur une insertion à un endroit précis de nouvelles données d'un tableau et franchement j'en suis à me demander si cela est possible uniquement en PHP.

Voici une capture d'écran qui montre 2 tableaux qui ont été créés automatiquement lors de la saisies de données dans une autre page contenant des formulaires. Au-dessus de chacun, il y a un formulaire qui permet d'insérer une nouvelle ligne dans le bon tableau




Seulement, le problème est que lorsque je rempli soit l'un soit l'autre des formulaires, les lignes s'insèrent toujours dans le premier tableau comme le montre cette nouvelle capture d'écran.




Est-il possible, en PHP, d'insérer cette ligne dans le tableau correspondant au formulaire ?

Je vous donne le code actuel de la page concernée. J'ai essayé de passer par des tests mais avec des var_dump() on voit que pour chaque tableau les tests sont OK donc normal je dirai que tout s'insère sur ce premier tableau puisque tout est lié à la création.

Merci d'avance pour vos réponses.


<?php

    // AFFICHAGE DES ERREURS PHP

    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);

    require_once('src/bddconnect.php'); // CONNEXION BDD

    // INSCRIPTION
    if (!empty($_POST['sous_off']) && !empty($_POST['mission']) && !empty($_POST['created_date'])) {

        // STOCKAGE DES DONNEES SAISIES DANS LES VARIABLES
        $sous_off      = trim($_POST['sous_off']);
        $mission       = trim($_POST['mission']);
        $creation_date = $_POST['created_date'];

        //ALIMENTATION BDD
        // 1 - PREPARATION DE LA REQUETE
        $sql_code    = 'INSERT INTO suivi(sous_off, mission, created_date) VALUES(?, ?, ?)';
        $datas_code  = array($sous_off, $mission, $creation_date);

        // 2 - REQUETE
        $req = $bdd->prepare($sql_code);
        $req->execute($datas_code);
        header('location: suivi.php?success=1');
        exit();
    }
?>


<!DOCTYPE html>
<html lang="fr">

    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="design/default.css">
        <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
        <title>Suivi des procédures</title>
    </head>

    <body>

        <!-- HEADER  -->
        <?php
        include "src/header.php"
        ?>

        <!-- Bouton retour haut de page -->
        <a href="#" class="btn">
            <img src="/images/fleche_haut.ico" class="icon">
        </a>

        <!-- BARRE DE NAVIGATION -->
        <?php
        include "menu.php";

        // LECTURE DES DONNEES DES REQUETES
        $requete = $bdd->query('SELECT * FROM procedures ORDER BY numbers');
        $requite = $bdd->query('SELECT * FROM suivi');
        while ($num_proc = $requete->fetch()) {
            $codeHash = $num_proc['keycode'];
            if ($num_proc['keycode'] == password_verify($num_proc['numbers'], $codeHash)) {
        ?>

        <div class="suivi">
            <h4 id="<?= $num_proc["numbers"] ?>">Procédure n° <?= $num_proc["numbers"] ?></h4>

            <div class="attribution">
                <form method="POST" action="suivi.php">
                    <label>Militaire</label>
                    <input type="text" name="sous_off" placeholder="Militaire" required />

                    <label>Mission</label>
                    <textarea name="mission" cols="30" rows="1"></textarea>

                    <label>Date</label>
                    <input type="date" name="created_date" value="<?= date('Y-m-d') ?>" placeholder="Date" required />

                    <button type="submit" id="<?= $num_proc['keycode'] ?>">Valider</button>
                </form>
            </div>


            <table border class="proc">
                <tr>
                    <th>Militaires</th>
                    <th>Mission</th>
                    <th>Date Exécution</th>
                </tr>
            </table>

            <?php
                while ($suivre = $requite->fetch()) {
            ?>

            <table border class="proc">
                <tr>
                    <td><?= $suivre['sous_off'] ?></td>
                    <td><?= $suivre['mission'] ?></td>
                    <td><?= $suivre['created_date'] ?></td>
                </tr>
            </table>

            <?php
                }

            var_dump($num_proc['keycode']);
            var_dump(password_verify($num_proc['numbers'], $codeHash));
            ?>

        </div>

        <?php
            }
        }
        ?>
    </body>

</html>



Configuration: Windows / Firefox 98.0
A voir également:

9 réponses

jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 680
18 mars 2022 à 11:13
Bonjour,

Il y aurait pleins de petites choses à dire au sujet de ton code .. mais commençons par ta question.

Déjà .. quel est le lien entre les tables procedures et suivi ?

Je pense qu'un suivi doit être rattaché à une procédure (d'après ce que je comprends de ta demande)
hors, il ne me semble pas que tu gères cette données lors de l'insertion en bdd ...
D'ailleurs... as tu prévu, dans ta table suivi, un champ pour stocker cette relation ??
Peux tu nous montrer la structure de tes tables ?

A noter que si tu n'as pas encore mis de champ pour gérer le lien entre ces deux tables... ajoutes le de suite.
Soit le numéro de procédure... soit son id .... ( id_procedure ) a moins qu'on puisse utiliser le keycode que tu sembles avoir ??

Ensuite, dans ton formulaire il faudra ajouter un input hidden qui contiendra cette valeur

Et pour finir .. nul besoin de faire deux requêtes ( c'est même fortement déconseillé...)
A la place, il suffira de faire une seule requête avec une jointure sur ces deux tables..

0
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 1
Modifié le 18 mars 2022 à 13:57
Bonjour Jordane,

Oui, je me doute bien que mon code est très loin d'être parfait mais j'essaie de m'améliorer avec les conseils que l'on me donne.

Concernant le lien entre ces deux tables :

Sur une page nommée "saisie.php", je rentre les informations d'une procédures qui vont se stocker dans la table "procedures". Je récupère ces informations ce qui me permet d'afficher sur une page nommée "encours.php" la totalité des procédures en cours avec la possibilité de faire une recherche par numéro et de les supprimer lorsqu'elles sont terminées.
La validation d'une saisie, en plus d'alimenter la table "procédure" et la page "encours.php", va créer un tableau dans une page "suivi.php" afin que je puisse confier des missions à mes personnels (Voir screen de mon premier message).

La table "suivi" n'a pas de lien avec la table "procédure" puisque les données sont totalement différentes. Justement c'est ce que je cherche à faire pour que les formulaires de la page "suivi.php" trouvent un lien avec la table "procedures" afin de remplir le bon tableau.

Concernant le keycode, il fait partie des nombreux essais que j'ai fait. Et d'ailleurs, l'erreur est que je l'ai mis dans la table "procédure" au lieu de" suivi". De plus son traitement est assez lourd, donc autant le retirer. Du coup, j'ai rajouté un id_procédure dans ma table "suivi".

Les 2 tables :





Je te communique les codes des pages concernées.

Pour la page saisie.php qui alimente la table "procedures".


<?php

    // AFFICHAGE DES ERREURS PHP
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);

    // SAISIE DES DONNEES
    if(!empty($_POST['datum']) && !empty($_POST['numbers']) && !empty($_POST['synthesis'])) {

        require_once('src/bddconnect.php'); // CONNEXION BDD

  // ON STOCK LES DONNEES DANS DES VARIABLES
  $date                   = trim($_POST['datum']);
  $numbers                = trim($_POST['numbers']);
        $synthesis              = trim($_POST['synthesis']);        


        // TEST SI NUMERO DE PROCEDURE DEJA SAISI
        // 1 - PREPARATION DES VARIABLES
        $sql   = 'SELECT COUNT(*) AS numProc FROM procedures WHERE numbers = ?';
        $datas = array($numbers);

        // 2 - REQUETE
        try {
            $requete = $bdd->prepare($sql);
            $requete->execute($datas);
                // 3 - TEST PRESENCE PROCEDURE
            while ($consultation = $requete->fetch()) {
                if ($consultation['numProc'] != 0) {
                    header('location: saisie.php?error=1&message=procédure déjà enregistrée'); // PROCEDURE DEJA ENREGISTREE
                    exit();
                }
            }
        }
        catch (Exception $e) {
            echo " Erreur ! ".$e->getMessage();
            echo " Les datas : " ;
            print_r($datas);
        }


        // CREATION DU KEYCODE
        $key = password_hash($_POST['numbers'], PASSWORD_DEFAULT);

        // ENVOI DE LA REQUETE - ALIMENTATION DE LA BDD
        // 1 - PREPARATION DES VARIABLES
        $sql_proc  = 'INSERT INTO procedures(datum, numbers, synthesis, keycode) VALUES(?, ?, ?, ?)';
        $datas_proc = array($date, $numbers, $synthesis, $key);

        // 2 - REQUETE
        try {
            $requete = $bdd->prepare($sql_proc);
            $requete->execute($datas_proc);
            header('location: saisie.php?success=1');
            exit();
        }
        catch (Exception $e) {
            echo " Erreur ! ".$e->getMessage();
            echo " Les datas : " ;
            print_r($datas);
        }
    }
?>

<!DOCTYPE html>
<html lang="fr">

<head>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="design/default.css">
    <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
    <title>Saisie des données</title>
</head>

<body>

    <!-- HEADER  -->
    <?php        
            include "src/header.php"
        ?>

    <!-- BARRE NAVIGATION -->
    <?php
            include "src/menu.php";
        ?>

    <?php

            // VERIFICATION DES DONNEES SAISIES
            // 1 - SI ERREUR, ON L'AFFICHE
            if(isset($_GET['error'])) {
                
                if(isset($_GET['message'])) {
                    echo '<div class="alert_error">'.htmlspecialchars($_GET['message']).'</div>';
                }                       
            }

            // 2 - SINON SI LA SAISIE EST CORRECTE ON l'AFFICHE AUSSI
            else if(isset($_GET['success'])) {
                
                echo '<div class="alert_success">Enregistrement réussi</div>';
            }                    
        ?>

    <!-- Zone de saisie -->
    <div class="saisie">

        <!-- Page pour la saisie des données des procédures -->
        <h3>CHAMPS DE SAISIE</h3>

        <form action="saisie.php" method="POST">

            <label>Date d'enregistrement : </label>
            <input type="date" name="datum" value="<?= date('Y-m-d') ?>" required>

            <label>Numéro de procédure : </label>
            <input autocomplete="off" type="text" name="numbers" size="25" placeholder="Format 00000/0000" required>

            <label>Synthèse : </label>
            <input autocomplete="off" type="text" name="synthesis" size="50" placeholder="Exposé simple de la mission"
                required>

            <div class="transmission">
                <button class="trans" type="submit">Transmettre les données</button>
                <button class="trans" type="reset">Réinitialiser</button>
            </div>
        </form>
    </div>
</body>
</html>




Pour la page encours.php qui récupère les données de la table "procedures"


<!DOCTYPE html>
<html lang="fr">

<head>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="design/default.css">
    <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
    <title>Procédures enregistrées</title>
</head>

<body>

    <!-- HEADER  -->
    <?php        
            include "src/header.php"
        ?>

    <!-- Bouton retour haut de page -->
    <a href="#" class="btn">
        <img src="/images/fleche_haut.ico" class="icon">
    </a>

    <!-- BARRE DE NAVIGATION -->
    <?php        
            include "src/menu.php";
        ?>

    <div class="encours">
        <h2>LISTE DES PROCEDURES EN COURS</h2>

        <?php
        // CONNEXION BDD
        require_once('src/bddconnect.php');
        
        // LECTURE DES DONNEES PAR REQUETE
        try {

        $requete = $bdd->query('SELECT * FROM procedures ORDER BY numbers');

        } catch(Exception $e) {
            
            echo " Erreur ! ".$e->getMessage();
            echo " Les datas : " ;
            print_r($datas);
        }

        // BARRE DE RECHERCHE
        if(isset($_GET["rechercher"]) && !empty($_GET["rechercher"])) {
            $rechercher = htmlspecialchars($_GET["rechercher"]);
            $requete = $bdd->query('SELECT * FROM procedures WHERE numbers LIKE "%'.$rechercher.'%"');
        }
        ?>

        <form method="GET" class="recherche">
            <input type="search" name="rechercher" placeholder="Rechercher...">
            <input type="submit" value="Valider">
            <input type="submit" value="Réinitialiser">
        </form>

        <table border class="procedures">
            <tr>
                <th>Date</th>
                <th>Numéro de procédure</th>
                <th>Synthèse</th>
                <th>Suppression</th>
            </tr>
            <?php
        
            while($donnees = $requete->fetch()) { ?>

            <tr>
                <td><?= $donnees['datum'] ?></td>
                <td><a href="suivi.php#<?= $donnees['numbers']?>"><?= $donnees['numbers']?></a></td>
                <td><?= $donnees['synthesis']?></td>

                <td>
                    <!-- Suppression procédure -->
                    <form action="src/supp.php" method="POST">
                        <input type="hidden" type="submit" name="id" value="<?=$donnees['id'] ?>">
                        <input type="submit" name="supprimer" value="Supprimer">
                    </form>
                </td>
            </tr>

            <?php 
            }
             ?>

        </table>
    </div>
</body>

</html>




Pour la page suivi.php, celle qui me pose le plus de problèmes à coder


<?php

    // AFFICHAGE DES ERREURS PHP

    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);

    require_once('src/bddconnect.php'); // CONNEXION BDD

    // DONNEES SAISIE
    if (!empty($_POST['sous_off']) && !empty($_POST['mission']) && !empty($_POST['created_date'])) {

        // STOCKAGE DES DONNEES SAISIES DANS LES VARIABLES
        $sous_off      = trim($_POST['sous_off']);
        $mission       = trim($_POST['mission']);
        $creation_date = $_POST['created_date'];

        //ALIMENTATION BDD
        // 1 - PREPARATION DE LA REQUETE
        $sql_code    = 'INSERT INTO suivi(sous_off, mission, created_date) VALUES(?, ?, ?)';
        $datas_code  = array($sous_off, $mission, $creation_date);

        // 2 - REQUETE
        try {

            $req = $bdd->prepare($sql_code);
            $req->execute($datas_code);
            header('location: suivi.php?success=1');
            exit();

        } catch(Exception $e) {
            
            echo " Erreur ! ".$e->getMessage();
            echo " Les datas : " ;
            print_r($datas_code);
        }
    }
?>


<!DOCTYPE html>
<html lang="fr">

<head>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="design/default.css">
    <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
    <title>Suivi des procédures</title>
</head>

<body>

    <!-- HEADER  -->
    <?php
            include "src/header.php"
        ?>

    <!-- Bouton retour haut de page -->
    <a href="#" class="btn">
        <img src="/images/fleche_haut.ico" class="icon">
    </a>

    <!-- BARRE DE NAVIGATION -->
    <?php
            include "src/menu.php";

        // REQUETES
            $requete = $bdd->query('SELECT * FROM procedures ORDER BY numbers');
            $requite = $bdd->query('SELECT * FROM suivi');

        //LECTURE DES DONNEES DES REQUETES
        while ($num_proc = $requete->fetch()) {
            
        ?>

    <div class="suivi">
        <h4 id="<?= $num_proc["numbers"] ?>">Procédure n° <?= $num_proc["numbers"] ?></h4>

        <div class="attribution">
            <form method="POST" action="suivi.php">
                <label>Militaire</label>
                <input type="text" name="sous_off" placeholder="Militaire" required />

                <label>Mission</label>
                <textarea name="mission" cols="30" rows="1" placeholder="Mission" required></textarea>

                <label>Date</label>
                <input type="date" name="created_date" value="<?= date('Y-m-d') ?>" placeholder="Date" required />

                <input type="" type="submit" name="id" value="<?=$suivre['id_procedure'] ?>">
                <button type="submit" name="ajout_proc" value="Ajouter">Ajouter</button>
            </form>
        </div>


        <table border class="proc">
            <tr>
                <th>Militaires</th>
                <th>Mission</th>
                <th>Date Exécution</th>
                <th>Supression</th>
            </tr>
        </table>

        <?php
                while ($suivre = $requite->fetch()) {
            ?>

        <table border class="proc">
            <tr>
                <td><?= $suivre['sous_off'] ?></td>
                <td><?= $suivre['mission'] ?></td>
                <td><?= $suivre['created_date'] ?></td>

                <td>
                    <!-- Suppression ligne de mission -->
                    <form action="src/supp.php" method="POST">
                        <input type="hidden" type="submit" name="id" value="<?=$suivre['id'] ?>">
                        <input type="submit" name="supprimer" value="Supprimer">
                    </form>
                </td>
            </tr>
        </table>

        <?php
             var_dump($suivre['id_procedure']);   
                }            
            ?>

    </div>

    <?php
            }
        
        ?>
</body>

</html>

0
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 1
18 mars 2022 à 19:13
Bon... j'ai essayé pas mal de choses mais c'est pas encore ça.

J'ai tenté de faire ce que tu m'as demandé, je ne sais pas si c'est bon mais au moins j'aurai essayé :)

Il y a du mieux mais il reste encore un problème concernant l'insertion des lignes. Il m’insère bien une ligne sur le bon numéro de procédure mais pour cela il me cré un nouveau tableau de cette procédure.




Ce que j'ai fait dans le fichier suivi.php

<?php

    // AFFICHAGE DES ERREURS PHP

    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);

    require_once('src/bddconnect.php'); // CONNEXION BDD

    // INSCRIPTION
    if (!empty($_POST['sous_off']) && !empty($_POST['mission']) && !empty($_POST['created_date']) && !empty($_POST['numbers'])) {

        // STOCKAGE DES DONNEES SAISIES DANS LES VARIABLES
        $sous_off      = trim($_POST['sous_off']);
        $mission       = trim($_POST['mission']);
        $creation_date = trim($_POST['created_date']);
        $id_procedure  = trim($_POST['numbers']);

        //ALIMENTATION BDD
        // 1 - PREPARATION DE LA REQUETE
        $sql_code    = 'INSERT INTO suivi(id_procedure, sous_off, mission, created_date) VALUES(?, ?, ?, ?)';
        $datas_code  = array($id_procedure, $sous_off, $mission, $creation_date);

        // 2 - REQUETE
        try {
            $req = $bdd->prepare($sql_code);
            $req->execute($datas_code);
            header('location: suivi.php?success=1');
            exit();
        } 
        catch (Exception $e) {
            echo " Erreur ! ".$e->getMessage();
            echo " Les datas : " ;
            print_r($datas_code);
        }
        
    }
?>


<!DOCTYPE html>
<html lang="fr">

<head>
    <meta charset="utf-8">
    <link rel="stylesheet" type="text/css" href="design/default.css">
    <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
    <title>Suivi des procédures</title>
</head>

<body>

    <!-- HEADER  -->
    <?php
        include "src/header.php"
        ?>

    <!-- Bouton retour haut de page -->
    <a href="#" class="btn">
        <img src="/images/fleche_haut.ico" class="icon">
    </a>

    <!-- BARRE DE NAVIGATION -->
    <?php
        include "src/menu.php";

        // LECTURE DES DONNEES DES REQUETES
        $requete = $bdd->query('SELECT procedures.id, procedures.numbers, suivi.id, id_procedure, sous_off, mission, created_date 
                                FROM procedures 
                                LEFT JOIN suivi 
                                ON procedures.numbers = suivi.id_procedure
                                ORDER BY numbers');        
            while ($num_proc = $requete->fetch()) {        
        ?>

    <div class="suivi">
        <h4 id="<?= $num_proc["numbers"] ?>">Procédure n° <?= $num_proc["numbers"] ?></h4>

        <div class="attribution">
            <form method="POST" action="suivi.php">
                <label>Militaire</label>
                <input type="text" name="sous_off" placeholder="Militaire" required />

                <label>Mission</label>
                <textarea name="mission" cols="30" rows="1"></textarea>

                <label>Date</label>
                <input type="date" name="created_date" value="<?= date('Y-m-d') ?>" required />

                <label>Date</label>
                <input type="text" name="numbers" value="<?= $num_proc["numbers"] ?>" required />

                <input type="hidden" name="id_procedure" value="<?= $num_proc["numbers"] ?>" />
                <button type="submit" name="Envoyer">Valider</button>
            </form>
        </div>


        <table border class="proc">
            <tr>
                <th>Militaires</th>
                <th>Mission</th>
                <th>Date d'exécution</th>
                <th>Suppression</th>
            </tr>
        </table>


        <table border class="proc">
            <tr>
                <td><?= $num_proc['sous_off'] ?></td>
                <td><?= $num_proc['mission'] ?></td>
                <td><?= $num_proc['created_date'] ?></td>

                <td>
                    <!-- Suppression ligne de mission -->
                    <form action="src/supp.php" method="POST">
                        <input type="" type="submit" name="id" value="<?= $num_proc['id'] ?>">
                        <input type="submit" name="suppression" value="Supprimer">
                    </form>
                </td>
            </tr>
        </table>

        <?php 
               var_dump($num_proc);
               var_dump($num_proc['id']);
               var_dump($num_proc["numbers"]);
               var_dump($num_proc["id_procedure"]);
            ?>

    </div>

    <?php
        }     
        
        ?>
</body>

</html>
0
jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 680
19 mars 2022 à 07:14
Je ne crois pas que tu l'aies répondu à cette question .. tu utilises mysqli ou PDO ?
Je pense que c'est PDO .. et donc, si c'est bien ça, peux tu modifier ton code pour faire ceci :

   // LECTURE DES DONNEES DES REQUETES
       // LECTURE DES DONNEES DES REQUETES
$sql = 'SELECT P.id as ID_PROC
                                , P.numbers
                                ,S.id as ID_SUIVI
                                ,S.id_procedure
                                ,S.sous_off,
                               ,S. mission 
                               , S.created_date 
                FROM procedures  P
                LEFT JOIN suivi  S  ON P.numbers = S.id_procedure
                ORDER BY P.numbers';

try{
   $requete = $bdd->query($sql);   
   //on stocke le résultat dans un array
  $procedures = $requete->fetchAll();
}catch(Exception $e){
   // en cas d'erreur dans la requête
   // voir :  https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
   echo "Erreur " . $e->getMessage(); 
   exit;
}
//le temps des tests
echo "<pre>Procedures <br>";
 var_dump($procedures);
echo "</pre>";

//on boucle sur l'array ( ça remplace le while) 
foreach ($procedures as $num_proc) {  



ça ne corrigera pas encore ton souci mais ça me permettra de voir réellement ce que contient le résultat de ta requête...

Une fois que ça sera fait, on pourra retravailler l'array $procedures pour que tu puisses facilement recréer tes différents tableaux et refaire tes deux boucles un peu comme tu avais dans ton premier code ( boucles en foreach et non en while ce coup ci )
0
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 1
19 mars 2022 à 09:56
Bonjour Jordane,

Oui j’utilise bien PDO.
Je suis au boulot donc je vois tout ça ce soir d’un œil plus averti.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 1
Modifié le 19 mars 2022 à 18:33
Bon, j'ai modifié le code comme tu me l'as demandé.
Problème, quand je vais sur la page suivi.php, aucune erreur détectée mais rien ne s'affiche. Aucune des procédures saisies n'apparaît sous forme de tableau.

J'ai laissé la boucle foreach et j'ai remis la jointure que j'avais faite et ça marche de nouveau, les tableaux sont revenus.
Donc, il semblerait que ce problème d'affichage vienne de la nouvelle jointure que tu m'as demandé d'insérer. Bizarre car à sa lecture, rien ne m'a choqué, je regarde de plus près pour voir.
0
jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 680
19 mars 2022 à 18:25
As-tu appliqué les consignes données dans le lien qui se trouve en commentaire du code que je t'ai donné ?
0
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 1 > jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024
Modifié le 19 mars 2022 à 19:34
Oui toujours depuis une remarque que tu m'avais faite dans une précédent sujet.

Mon code de connexion à ma bdd.

<?php

    try {   

        $bdd = new PDO('mysql:host=localhost;dbname=cob_valence;charset=utf8', 'root', ''); // Connection à la Base de Données
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    }

    catch (PDOException $e) {     
        die('Erreur : ' . $e->getMessage());
    }

?>
0
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 1
Modifié le 19 mars 2022 à 18:43
C'est bon j'ai trouvé la petite erreur. Il y avait une virgule de trop dans ton code après S.sous_off

Voici le var_dump que tu as demandé.

0
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 1
21 mars 2022 à 18:51
Bon, je tourne toujours en rond.

J'ai essayé pas mal de combinaisons, de comparaisons mais rien y fait. Toujours un tableau entier qui s'affiche lorsque je fais une nouvelle saisie.
0
jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 680
21 mars 2022 à 19:28
Si tu me colles le var_dump ici ( au lieu d'une image)
je pourrais l'utiliser pour te proposer du code...
mais là, j'ai la flemme de réécrire les données depuis ta capture écran.
0
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 1 > jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024
21 mars 2022 à 19:42
Ah pas de soucis.

array (size=2)
0 =>
array (size=7)
'ID_PROC' => string '9' (length=1)
'numbers' => string '000885/2022' (length=11)
'ID_SUIVI' => string '37' (length=2)
'id_procedure' => string '000885/2022' (length=11)
'sous_off' => string 'PIERRE' (length=6)
'mission' => string 'TEST 000' (length=8)
'created_date' => string '2022-03-21' (length=10)
1 =>
array (size=7)
'ID_PROC' => string '10' (length=2)
'numbers' => string '00125/2022' (length=10)
'ID_SUIVI' => string '38' (length=2)
'id_procedure' => string '00125/2022' (length=10)
'sous_off' => string 'JEAN' (length=4)
'mission' => string 'TEST 111' (length=8)
'created_date' => string '2022-03-21' (length=10)
0
jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 680 > Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023
Modifié le 21 mars 2022 à 19:56
on retravaille l'array pour en faire un array à 2 dimensions.
//
$procFinal = [];
foreach( $procedures as $P ){
  $procFinal[$P['numbers']][$P['ID_SUIVI']] = ['sous_off'=>$P['sous_off'],'mission'=>$P['mission'],'created_date'=>$P['created_date']];
}


Ensuite, dans ton code, tu peux faire deux boucles imbriquées
par exemple : (je te laisse refaire la structure que tu veux pour tes tableaux.. )
foreach($procFinal as $numbers=>$V ){
  echo "Numbers :" . $numbers;
  echo "<table>";
    
  foreach($V as $ID_SUIVI=>$SP) {
    echo "<tr>";
    echo "<td>".$SP['sous_off']."</td>";
    echo "<td>".$SP['mission']."</td>";
    echo "<td>".$SP['created_date']."</td>";
    echo '<td> <!-- Suppression ligne de mission -->
                  <form action="src/supp.php" method="POST">
                      <input type="" type="submit" name="id" value="'.$ID_SUIVI['id'].'">
                      <input type="submit" name="suppression" value="Supprimer">
                  </form></td>';
    echo "</tr>";
  }
  
  echo "</table>";
  
}
0
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 1
21 mars 2022 à 21:07
Merci pour ton aide efficace Jordane mais malheureusement, je n'ai pas encore les connaissances suffisantes pour pouvoir comprendre intégralement ce que tu m'as proposé.
Par conséquent, je ne te cache pas que, malgré une lecture attentive et plusieurs tentatives, je n'ai toujours pas réussi à intégrer tes codes dans ma page suivi.php afin d'en voir le fonctionnement.

Je te remets mon code de la page suivi.php, pour voir si tu peux me guider.
Merci d'avance

<?php

    // AFFICHAGE DES ERREURS PHP

    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    require_once('src/bddconnect.php'); // CONNEXION BDD

    // INSCRIPTION
    if (!empty($_POST['sous_off']) && !empty($_POST['mission']) && !empty($_POST['created_date']) && !empty($_POST['numbers'])) {

        // STOCKAGE DES DONNEES SAISIES DANS LES VARIABLES
        $sous_off      = htmlspecialchars(trim($_POST['sous_off']));
        $mission       = htmlspecialchars(trim($_POST['mission']));
        $creation_date = htmlspecialchars(trim($_POST['created_date']));
        $id_procedure  = htmlspecialchars(trim($_POST['numbers']));

        //ALIMENTATION BDD
        // 1 - PREPARATION DE LA REQUETE
        $sql_code    = 'INSERT INTO suivi(id_procedure, sous_off, mission, created_date) VALUES(?, ?, ?, ?)';
        $datas_code  = array($id_procedure, $sous_off, $mission, $creation_date);

        // 2 - REQUETE
        try {
            $req = $bdd->prepare($sql_code);
            $req->execute($datas_code);
            header('location: suivi.php?success=1');
            exit();
        } 
        catch (Exception $e) {
            echo " Erreur ! ".$e->getMessage();
            echo " Les datas : " ;
            print_r($datas_code);
        }
        
    }
?>


<!DOCTYPE html>

<html lang="fr">

    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="design/default.css">
        <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
        <title>Suivi des procédures</title>
    </head>

    <body>

        <!-- HEADER  -->
        <?php
            include "src/header.php"
        ?>

        <!-- Bouton retour haut de page -->
        <a href="#" class="btn">
            <img src="/images/fleche_haut.ico" class="icon">
        </a>

        <!-- BARRE DE NAVIGATION -->
        <?php
            include "src/menu.php";

            // LECTURE DES DONNEES DES REQUETES
            $sql = 'SELECT P.id as ID_PROC
                                    , P.numbers
                                    , S.id as ID_SUIVI
                                    , S.id_procedure
                                    , S.sous_off
                                , S.mission 
                                , S.created_date 
                    FROM procedures  P
                    LEFT JOIN suivi  S  ON P.numbers = S.id_procedure
                    ORDER BY P.numbers';

            try{
                $requete = $bdd->query($sql);   
                //on stocke le résultat dans un array
                $procedures = $requete->fetchAll();
                
            }catch(Exception $e){            
                echo "Erreur " . $e->getMessage(); 
                exit;
            }  
            
            //le temps des tests
            echo "<pre>Procedures <br>";
            var_dump($procedures);
            echo "</pre>";

            //on boucle sur l'array ( ça remplace le while) 
            foreach ($procedures as $num_proc) {
        ?>      

        <div class="suivi">
            <h4 id="<?= $num_proc['numbers'] ?>">Procédure n° <?= $num_proc['numbers'] ?></h4>

            <div class="attribution">
                <form method="POST" action="suivi.php">
                    <label>Militaire</label>
                    <input type="text" name="sous_off" placeholder="Militaire" required />

                    <label>Mission</label>
                    <textarea name="mission" cols="30" rows="1"></textarea>

                    <label>Date</label>
                    <input type="date" name="created_date" value="<?= date('Y-m-d') ?>" required />


                    <input type="hidden" type="text" name="numbers" value="<?= $num_proc['numbers'] ?>" required />

                    <input type="hidden" name="id_procedure" value="<?= $num_proc['numbers'] ?>" />
                    <button type="submit" name="Envoyer">Valider</button>
                </form>
            </div>


            <table border class="proc">
                <tr>
                    <th>Militaires</th>
                    <th>Mission</th>
                    <th>Date d'exécution</th>
                    <th>Suppression</th>
                </tr>
            </table>
           
            
            <table border class="proc">
                <tr>
                    <td><?= $num_proc['sous_off'] ?></td>
                    <td><?= $num_proc['mission'] ?></td>
                    <td><?= $num_proc['created_date'] ?></td>
                    
                    <td>
                        <!-- Suppression ligne de mission -->
                        <form action="src/supp.php" method="POST">
                            <input type="hidden" type="submit" name="id" value="<?= $num_proc['ID_SUIVI'] ?>">
                            <input type="submit" name="suppression" value="Supprimer">
                        </form>                   
                    
                    <!-- Saisie pour édition PDF -->
                        <form action="src/pagePDF.php" method="POST">                            
                            <input type="submit" name="edition" value="Edition du PDF">
                        </form>
                    </td>
                </tr>
            </table>
        </div>

        <?php               
            }            
        ?>
        
    </body>
</html>
0
jordane45 Messages postés 38216 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 juin 2024 4 680
21 mars 2022 à 21:13
ça devrait ressembler à un truc du genre
<?php

// AFFICHAGE DES ERREURS PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

require_once('src/bddconnect.php'); // CONNEXION BDD

// INSCRIPTION
if (!empty($_POST['sous_off']) && !empty($_POST['mission']) && !empty($_POST['created_date']) && !empty($_POST['numbers'])) {

    // STOCKAGE DES DONNEES SAISIES DANS LES VARIABLES
    $sous_off      = htmlspecialchars(trim($_POST['sous_off']));
    $mission       = htmlspecialchars(trim($_POST['mission']));
    $creation_date = htmlspecialchars(trim($_POST['created_date']));
    $id_procedure  = htmlspecialchars(trim($_POST['numbers']));

    //ALIMENTATION BDD
    // 1 - PREPARATION DE LA REQUETE
    $sql_code    = 'INSERT INTO suivi(id_procedure, sous_off, mission, created_date) VALUES(?, ?, ?, ?)';
    $datas_code  = array($id_procedure, $sous_off, $mission, $creation_date);

    // 2 - REQUETE
    try {
        $req = $bdd->prepare($sql_code);
        $req->execute($datas_code);
        header('location: suivi.php?success=1');
        exit();
    } 
    catch (Exception $e) {
        echo " Erreur ! ".$e->getMessage();
        echo " Les datas : " ;
        print_r($datas_code);
    }
    
}

 // LECTURE DES DONNEES DES REQUETES
$sql = 'SELECT P.id as ID_PROC
                        , P.numbers
                        , S.id as ID_SUIVI
                        , S.id_procedure
                        , S.sous_off
                    , S.mission 
                    , S.created_date 
        FROM procedures  P
        LEFT JOIN suivi  S  ON P.numbers = S.id_procedure
        ORDER BY P.numbers';

try{
    $requete = $bdd->query($sql);   
    //on stocke le résultat dans un array
    $procedures = $requete->fetchAll();
    
    //le temps des tests
    echo "<pre>Procedures <br>";
    var_dump($procedures);
    echo "</pre>";
    $procFinal = [];
    foreach( $procedures as $P ){
      $procFinal[$P['numbers']][$P['ID_SUIVI']] = ['sous_off'=>$P['sous_off'],'mission'=>$P['mission'],'created_date'=>$P['created_date']];
    }
}catch(Exception $e){            
    echo "Erreur " . $e->getMessage(); 
    exit;
}  

?>


<!DOCTYPE html>

<html lang="fr">

  <head>
      <meta charset="utf-8">
      <link rel="stylesheet" type="text/css" href="design/default.css">
      <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
      <title>Suivi des procédures</title>
  </head>

  <body>

      <!-- HEADER  -->
      <?php
          include "src/header.php"
      ?>

      <!-- Bouton retour haut de page -->
      <a href="#" class="btn">
          <img src="/images/fleche_haut.ico" class="icon">
      </a>

      <!-- BARRE DE NAVIGATION -->
      <?php
        include "src/menu.php";

         
   
         foreach($procFinal as $numbers=>$V ){
      ?>      

      <div class="suivi">
          <h4 id="<?= $numbers ?>">Procédure n° <?= $numbers ?></h4>

          <div class="attribution">
              <form method="POST" action="suivi.php">
                  <label>Militaire</label>
                  <input type="text" name="sous_off" placeholder="Militaire" required />

                  <label>Mission</label>
                  <textarea name="mission" cols="30" rows="1"></textarea>

                  <label>Date</label>
                  <input type="date" name="created_date" value="<?= date('Y-m-d') ?>" required />


                  <input type="hidden" type="text" name="numbers" value="<?= $numbers ?>" required />

                  <input type="hidden" name="id_procedure" value="<?= $numbers ?>" />
                  <button type="submit" name="Envoyer">Valider</button>
              </form>
          </div>


          <table border class="proc">
              <tr>
                  <th>Militaires</th>
                  <th>Mission</th>
                  <th>Date d'exécution</th>
                  <th>Suppression</th>
              </tr>
          </table>
         
          <?php
          foreach($V as $ID_SUIVI=>$SP) {
          ?>
          <table border class="proc">
              <tr>
                  <td><?= $SP['sous_off'] ?></td>
                  <td><?= $SP['mission'] ?></td>
                  <td><?= $SP['created_date'] ?></td>
                  
                  <td>
                      <!-- Suppression ligne de mission -->
                      <form action="src/supp.php" method="POST">
                          <input type="hidden" type="submit" name="id" value="<?= $ID_SUIVI ?>">
                          <input type="submit" name="suppression" value="Supprimer">
                      </form>                   
                  
                  <!-- Saisie pour édition PDF -->
                      <form action="src/pagePDF.php" method="POST">                            
                          <input type="submit" name="edition" value="Edition du PDF">
                      </form>
                  </td>
              </tr>
          </table>
        <?php
        }
        ?>
      </div>

     <?php
      }            
      ?>
      
  </body>
</html>*
0
Izzara82 Messages postés 26 Date d'inscription dimanche 14 mars 2021 Statut Membre Dernière intervention 11 janvier 2023 1
21 mars 2022 à 21:39
Un grand merci à toi pour avoir pris le temps de résoudre mon problème.

Je vais me pencher sur ce code pour le comprendre afin de progresser dans mon apprentissage.

Je te souhaite une excellente fin de soirée et encore un grand merci.
0