PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 07-12-2017 11:01:14

LE CARROU
Membre
Inscription : 26-10-2017
Messages : 8

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

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, mais j'arrive pas à en sortir

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

faut-il revoir mon algo?
d’avance merci pour votre aide

data_recherche1.php

<?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>
              <td class="col1"></td>
              <td class="col3"><input class="modifier" type="submit" value="Mettre à jour"></td>
          </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


<?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');
        //header ('Refresh: 0;URL=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") ;
}
?>
 

Hors ligne

#2 07-12-2017 19:40:52

tof73
Membre
Inscription : 21-12-2014
Messages : 156
Site Web

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

peut-être avec :
         header ('location:data_recherche1.php?now='.time());

Hors ligne

#3 08-12-2017 09:25:19

LE CARROU
Membre
Inscription : 26-10-2017
Messages : 8

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

Bonjour tof73 et merci pour ta réponse
j'ai testé et malheureusement çà ne change rien
mon algo doit être à revoir...
bonne journée

Hors ligne

#4 08-12-2017 09:47:51

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

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

Salut,
L'algo et la méthodologie wink

a++

Hors ligne

#5 08-12-2017 09:54:53

LE CARROU
Membre
Inscription : 26-10-2017
Messages : 8

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

Salut Pierrot

la méthodologie ?
je début en programmation et en PHP depuis quelques semaines... je viens de valider le cours PHP d'Openclassroom et mon "appli" me sert juste de mise en pratique
peux-tu me dire ce qui ne va pas sur la méthodologie ?

Hors ligne

Pied de page des forums