Vous n'êtes pas identifié(e).
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
?>
<!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
//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
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
Salut,
L'algo et la méthodologie
a++
Hors ligne
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