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") ; } ?> |