Re-direction vers une page et ré-actualisation de cette page

Header()

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

mon titre n’est pas très clair mais je vais essayer d’expliquer mon problème qui est un problème d’algo je pense

je lance un formulaire depuis une page data_recherche1.php vers une page data_recherche2.php ; cela va créer une table gbd_dat_tmp1 que je compare à une autre table gbd_dat et en fonction de la comparaison, j’insère ou j’update ma table gbd_dat et à la fin je re-dirige vers data_recherche1.php à l’aide de header()

mon problème est que, si je click à nouveau pour lancer mon formulaire et mettre à jour mes données (après correction des données ou ajout de nouveau manquants par exemple), je n’ai pas le résultat attendu car visiblement le script de la page data_recherche1.php n’est pas ré-exécuté après la re-direction : en clair, il n’y a pas eu de nouvelle recherche de manquants

il faut que j’actualise ma page data_recherche1.php manuellement (Ctrl+R) avant de lancer mon formulaire pour que j’obtienne le résultat que je souhaite

j’ai lu la doc PHP sur header() mais n’y comprends pas plus que çà et j’ai tenté un META refresh mais çà ne fonctionne pas

comment faire pour que le script de la page data_recherche1.php soit ré-exécuté suite à la re-direction ? faut-il revoir mon algo ? d’avance merci pour votre aide

PS : je mets mon code entier, désolé…

data_recherche1.php

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();

?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>Mereva</title>
    </head>

    <body>
        <!-- En-tête -->
        <header>
            <?php include("entete.php"); ?>
        </header>

        <!-- Le corps --> 
        <div id="corps">

        <?php include("menus.php"); ?>

        <!--Tableau avec le contenu de la table GBD_DAT-->
        <div id='contenu'>
            <!--<div id="tableau">-->

                <!--Connexion à la base de données-->
                <?php include("connexion_base.php"); ?>

                <?php
                $sql = 'SELECT Max(ddc_dat) as DAT FROM `gbd_dat` WHERE exi in (1,2)';
                $query = ($sql);
                $query = $bdd->prepare($query);
                $query->execute();
                foreach($query as $row)
                    {
                        $date_der = $row['DAT']; //à calculer par la requête
                    }
                $query->CloseCursor();
                $sql = 'SELECT Count(id) as NBR1 FROM `gbd_dat` WHERE exi in (2)';
                $query = ($sql);
                $query = $bdd->prepare($query);
                $query->execute();
                foreach($query as $row)
                    {
                        $nb1 = $row['NBR1']; //à calculer par la requête
                    }
                $query->CloseCursor();
                $sql = 'SELECT Count(id) as NBR2 FROM `gbd_dat` WHERE exi in (1)';
                $query = ($sql);
                $query = $bdd->prepare($query);
                $query->execute();
                foreach($query as $row)
                    {
                        $nb2 = $row['NBR2']; //à calculer par la requête
                    }
                    echo'<table>';
                    echo'<tr>';
                            echo'<td class="col1">Date de dernière édition</td>';
                            ?>
                            <td class="col2"><?php echo $date_der ?></td>
                            <?php
                        echo'</tr>';
                        echo'<tr>';
                            echo'<td class="col1">Nombre de demande de corrections</td>';
                            echo'<td class="col2"></td>';
                        echo'</tr>';
                        echo'<tr>';
                            echo'<td class="col3">Données (en cours)</td>';?>
                            <td class="col2"><?php echo $nb1 ?></td>
                        <?php 
                        echo'</tr>';
                        echo'<tr>';
                            echo'<td class="col3">Données (nouvelles)</td>';?>
                            <td class="col2"><?php echo $nb2 ?></td>
                        <?php
                        echo'</tr>';
                    echo'</table>';
                $query->CloseCursor();
                ?>


                <form id="update" name="update" action="data_recherche2.php" method="POST">
                <?php 
                //incrémentation des requêtes manquant/aberrant
                $i = 0;

                //act = permet d'activer une variable pour la recherche de manquants/aberrant dans la table ADM_DAT
                $sql =  'SELECT tbl, fic, var, que, lib, cri, des FROM ADM_DAT WHERE act=1 ORDER BY tbl';
                foreach($bdd->query($sql) as $row) 
                    {
                        //var_dump($row);
                        $table = $row['tbl'];
                        $critere = $row['cri'];
                        $fiche = $row['fic'];
                        $variable = $row['var'];
                        $question = $row['que'];
                        $libelle = $row['lib'];
                        $description = $row['des'];

                        //requete 2 : recherche de donnees manquantes dans les tables étude
                        $sql = 'SELECT PAT, ' . $variable . ' FROM '  . $table . ' WHERE ' . $variable . ' ' . $critere . '';
                        //var_dump($sql); //vérification de la requête SQL (détection d'erreur d'écriture)
                        $query = ($sql);
                        //On prépare la requête à son exécution. Les marqueurs seront identifiés*/
                        $query = $bdd->prepare($query);
                        $result = $query->execute();

                        //envoie des donnees à insérer dans la table gbd_dat_tmp1, table intermédiaire de stockage des DDC*/
                        while($element= $query -> fetch()) 
                            {
                                ?>
                                <input type="hidden" name="lignes[<?php echo $i; ?>][0]" value="<?php echo $i+1 ;?>">          <!--numérotation des DDC-->
                                <input type="hidden" name="lignes[<?php echo $i; ?>][1]" value="<?php echo $element[0] ;?>">   <!--numéro patient = 1er champs de la requête sql-->
                                <input type="hidden" name="lignes[<?php echo $i; ?>][det]" value="<?php echo $element[1] ;?>"> <!--$variable = 2ème champs de la requête sql-->
                                <input type="hidden" name="lignes[<?php echo $i; ?>][fic]" value="<?php echo $fiche ;?>">
                                <input type="hidden" name="lignes[<?php echo $i; ?>][var]" value="<?php echo $variable ;?>">
                                <input type="hidden" name="lignes[<?php echo $i; ?>][que]" value="<?php echo $question ;?>">
                                <input type="hidden" name="lignes[<?php echo $i; ?>][lib]" value="<?php echo $libelle ;?>">
                                <input type="hidden" name="lignes[<?php echo $i; ?>][des]" value="<?php echo $description ;?>">

                                <?php
                                $i=$i+1;
                            }
                    }

                    ?>
                    <table>
                        <tr>
                            <td class="col1">Mettre à jour les demandes de correction</td>
                            <td class="col2"><input class="modifier" type="submit" value="OK"></td>
                        </tr>
                    </table>
                    </form>
                    <?php $query->CloseCursor();?>

        <!--fin du bloc contenu-->
        </div>

        <!--fin du bloc corps-->
        </div>

        <!-- Le pied de page -->
        <footer>
        <?php include("pied_de_page.php"); ?>
        </footer>

    <script>
    </script>
    </body>

</html>

`

data_recherche2.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

//var_dump($_POST['lignes']);
//préparation de la requête
$requete = "INSERT INTO gbd_dat_tmp1 (pat, fic, var, que, lib, des, det) VALUES (:patient, :fiche, :variable, :question, :libelle, :description, :details)" ;

/* On prépare la requête à son exécution. Les marqueurs seront identifiés */
$result = $bdd->prepare($requete);

$result->bindParam('patient',$patient,PDO::PARAM_STR);
$result->bindParam('fiche',$fiche,PDO::PARAM_STR);
$result->bindParam('variable',$variable,PDO::PARAM_STR);
$result->bindParam('question',$question,PDO::PARAM_STR);
$result->bindParam('libelle',$libelle,PDO::PARAM_STR);
$result->bindParam('description',$description,PDO::PARAM_STR);
$result->bindParam('details',$details,PDO::PARAM_STR);

foreach($_POST['lignes'] as $key => $donneesLigne)
{
$patient=$donneesLigne[1];
$fiche=$donneesLigne['fic'];
$variable=$donneesLigne['var'];
$question=$donneesLigne['que'];
$libelle=$donneesLigne['lib'];
$description=$donneesLigne['des'];
$details=$donneesLigne['det'];


$result->execute();

}

    //MISE A JOUR DE LA TABLE GBD_DAT
        //requete 1 : requêtes toujours existantes       
        $bdd->exec('UPDATE gbd_dat SET exi=2 WHERE EXISTS (SELECT 1 FROM gbd_dat_tmp1 WHERE 
            gbd_dat.pat=gbd_dat_tmp1.pat AND 
            gbd_dat.fic=gbd_dat_tmp1.fic AND 
            (gbd_dat.var=gbd_dat_tmp1.var OR IsNull(gbd_dat.var) OR IsNull(gbd_dat_tmp1.var)) AND 
            (gbd_dat.lib=gbd_dat_tmp1.lib OR IsNull(gbd_dat.lib) OR IsNull(gbd_dat_tmp1.lib)) AND 
            gbd_dat.que=gbd_dat_tmp1.que AND 
            (gbd_dat.det=gbd_dat_tmp1.det OR IsNull(gbd_dat.det) OR IsNull(gbd_dat_tmp1.det))
            )');
        //requete 2 : requêtes qui n'existent plus
        $bdd->exec('UPDATE gbd_dat SET exi=0 WHERE NOT EXISTS (SELECT 1 FROM gbd_dat_tmp1 WHERE 
            gbd_dat.pat=gbd_dat_tmp1.pat AND 
            gbd_dat.fic=gbd_dat_tmp1.fic AND 
            (gbd_dat.var=gbd_dat_tmp1.var OR IsNull(gbd_dat.var) OR IsNull(gbd_dat_tmp1.var)) AND 
            (gbd_dat.lib=gbd_dat_tmp1.lib OR IsNull(gbd_dat.lib) OR IsNull(gbd_dat_tmp1.lib)) AND 
            gbd_dat.que=gbd_dat_tmp1.que AND 
            (gbd_dat.det=gbd_dat_tmp1.det OR IsNull(gbd_dat.det) OR IsNull(gbd_dat_tmp1.det))
            )');
        //requete 3 : nouvelles requêtes
        //ddc_dat correspond à la date à laquelle la DDC a été générée
        $bdd->exec('INSERT INTO gbd_dat (pat, fic, var, lib, que, des, det, exi, ddc_dat)
            SELECT pat, fic, var, lib, que, des, det, 1 AS exi, NOW() as ddc_dat
            FROM gbd_dat_tmp1
            WHERE NOT EXISTS (
            SELECT 1 FROM gbd_dat WHERE 
            gbd_dat.pat=gbd_dat_tmp1.pat AND 
            gbd_dat.fic=gbd_dat_tmp1.fic AND 
            (gbd_dat.var=gbd_dat_tmp1.var OR IsNull(gbd_dat.var) OR IsNull(gbd_dat_tmp1.var)) AND 
            (gbd_dat.lib=gbd_dat_tmp1.lib OR IsNull(gbd_dat.lib) OR IsNull(gbd_dat_tmp1.lib)) AND 
            gbd_dat.que=gbd_dat_tmp1.que AND 
            (gbd_dat.det=gbd_dat_tmp1.det OR IsNull(gbd_dat.det) OR IsNull(gbd_dat_tmp1.det))
            )
            ');

    //ON VIDE LA TABLE GBD_DAT_TMP1
        $bdd->exec('TRUNCATE TABLE gbd_dat_tmp1');

//affichage des résultats, pour savoir si la modification a marchée:
if($result)
{
        header ('location:data_recherche1.php');
        //echo '<meta http-equiv="refresh" content="0;URL=data_recherche1.php">';
        //echo("La modification à été correctement effectuée") ;
}
else
{
    echo("La modification à échouée") ;
}
?>

Édité par LE CARROU

+0 -0

Ça fait longtemps que je n’ai pas utilisé la fonction header() donc je pourrai pas t’en dire plus ce point. Il y a peut être plus facile mais j’ai pensé à plutôt faire appel au fichier et d’exécuter la (ou une) fonction du fichier.

Voici la documentation officiel concernant l’utilisation de fonctions. En principe, c’est par défaut en français mais au cas où, je préfère dire qu’il y a un menu pour changer la langue ;) .

Dans tous les cas, je pense qu’apprendre à utiliser les fonctions sera dans tous les cas bénéfiques pour toi afin de fragmenter ton code.

+0 -0
Auteur du sujet

merci, j’ai regardé les fonctions aujourd’hui suite à ton message mais ce que je ne comprends pas en quoi avoir recours à une fonction solutionnera mon problème…?

Édité par LE CARROU

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte