Accueil > Programmes > Projets PHP pour Sites WEB > Agendas > Cyber Agenda ++ > Cyber-Agenda++ (Projet) > Editer le Journal
AGENDA
Editer le Journal
PHP
mercredi 8 mars 2006, par
Toute la difficulté vient de la gestion séquentielle du fichier, qui contrairement à une base de données ne permet pas la modification ponctuelle (ou aléatoire) d’un enregistrement quelconque, (ici une seule journée) un artifice assez simple (champ masqué) a été trouvé dans ce nouveau script...
PAGE AFFICHER_JOUR.PHP
<html>
<head><title>Cyber Agenda - **{:- Bluegyn 2006 [AFFICHER JOURNEE]</title>
<style>
body {font-family:arial}
</style>
<?
require('admin/agenda.inc.php');
require('admin/mydata.inc.php');
require('admin/saints.fnc.php');
//define("_DEBUG_",TRUE );
define("_DEBUG_",FALSE);
define("_INIT_",0 );
define("_ACTION_",1 );
$_SELF=$_SERVER['PHP_SELF']; // Nom de la page elle mÝme
?>
</head>
<!-- DEBUT PAGE HTML -->
<body bgcolor="<?echo$agenda_couleur_fond?>">
<!-- Place le focus sur le lieu -->
<?
// =============================================================================
// TESTE LE MODE D'ENTREE INIT = 0 si GET/POST est vide
// =============================================================================
$mode = isset($_POST['mode'])?$_POST['mode'] : _INIT_;
$msg='';
$date_actu='1-1-2006';
if (isset($_GET["date_actu"]))
$date_actu=$_GET["date_actu"];
if (isset($_GET["msg"]))
$msg=$_GET["msg"];
$tab = explode("-",$date_actu);
?>
<table width="100%"><tr><td WIDTH="33%"><h1>
<a href="agenda.php?d=<?echo$mydata?>"><?echo$agenda_titre?></a></h1></td><td WIDTH="33%" align="center">
<h3><img src="img/add.bmp"> Editer le journal</h3></td><td align="right">
<?echo date("d-m-Y").'<br>'.saint_jour();?></td></tr>
</table>
<!-- $_GET RECUPERE L'URL -->
<hr>
<center>
<?
switch ($mode)
{
// 00000000000000000000000000000000000000000000000000000000
case _INIT_ :
// 00000000000000000000000000000000000000000000000000000000
echo '
<form method="post" action="'.$_SELF.'">
<table border=0 bgcolor="yellow" cellspacing="2" width="80%">
<caption><h1>'.$date_actu.'</font></h1></caption>
<tr>
<th bgcolor="yellow"></th>
<th>Heure</th><th valign="top" bgcolor="yellow">
'.$legende_lieu.'</th><th bgcolor="yellow">
'.$legende_objet.'</th><th bgcolor="yellow">
!</th></tr><tr>';
$_F=fopen($dir_data.'/'.$mydata,"r+"); // r+ = Lecture ET écriture
$i=0;
while(!feof($_F))
{ // $tableau[$i]=explode("|",fgets($_F,256));
$ligne=explode("|",fgets($_F,256));
$tab_date_actu=explode("-",$date_actu);
$jd_date_actu=gregoriantojd($tab_date_actu[1],$tab_date_actu[0],$tab_date_actu[2]);
if ((!empty($ligne[0])) && ($jd_date_actu==$ligne[0]))
{
if(_DEBUG_)echo "ligne 0 =$ligne[0]<br>";
echo '
<tr bgcolor='.(($i/2)==(int)($i/2) ? "silver":"snow").'>
<th width="3%">'.($i+1).'
<input type="hidden" name="index['.$i.']" value="'.$ligne[0].'">
<input type="hidden" name="dates['.$i.']" value="'.$ligne[1].'">
</td>
<th>
<input name="heures['.$i.']" value="'.$ligne[2].'" size="3"></th>
<td>
<input name="lieux['.$i.']" value="'.$ligne[3].'" size="40"></td>
<th width="10%">
<input name="objets['.$i.']" value="'.$ligne[4].'" size="80"></th>
<td>
<input name="important['.$i.']" value="'.$ligne[5].'" size="1"></td>
</tr><tr>';
}
else
// Si pas la date du jour affiche tout sous formecahcé poru garder
// l'ordre séquentiel du fichier data
{
if (!empty($ligne[0]))
{
echo'
<input type="hidden" name="index['.$i.']" value="'.$ligne[0].'">
<input type="hidden" name="dates['.$i.']" value="'.$ligne[1].'">
<input type="hidden" name="heures['.$i.']" value="'.$ligne[2].'">
<input type="hidden" name="lieux['.$i.']" value="'.$ligne[3].'">
<input type="hidden" name="objets['.$i.']" value="'.$ligne[4].'">
<input type="hidden" name="important['.$i.']" value="'.$ligne[5].'">';
};
}
$i++;
};
fclose($_F);
echo '
</tr></table><hr>
<input type="button" value="Retour" onClick="self.close();">
<input type="hidden" name="mode" value="1">
<input type="submit" value="Enregistrer les modifications">
</form>';
break;
case _ACTION_ :
$index = isset( $_POST['index']) ? $_POST['index'] : "0";
$dates = isset( $_POST['dates']) ? $_POST['dates'] : "1-1-1";
$heures = isset( $_POST['heures']) ? $_POST['heures'] : "00:00";
$lieux = isset( $_POST['lieux']) ? $_POST['lieux'] : "";
$objets = isset( $_POST['objets']) ? $_POST['objets'] : "";
$important = isset( $_POST['important']) ? $_POST['important'] : "";
$_F = fopen($dir_data.'/'.$mydata, 'w');
$i=0;
foreach($dates as $date)
{
$ligne = $index[$i]."|".$dates[$i]."|".$heures[$i]."|".
$lieux[$i]."|".$objets[$i]."|".$important[$i]."|\n";
if(_DEBUG_) echo "ligne = $ligne<br>";;
fputs ($_F,$ligne);
$i++;
}; // End (for each)
fclose ($_F);
if(!_DEBUG_) print('<meta http-equiv="refresh" content="0;URL=agenda.php">');
break;
}; /* SWITCH */
?>
</body>
</html>
Comme il s’agit d’un fichier séquentiel
Il ne peut qu’être lu en entier du premier au dernier enregistrement
Puis réécrit du 1er au dernier pour sauvegarder les modification
L’artifice utilisé ici est que tous les champs sont lus mais :
- Les enregistrements du jour sont affichés :
-
- BALISE INPUT avec l’attribut TYPE="TEXT"
- Tous les autres sont masqués :
-
- BALISE INPUT avec l’attribut TYPE="HIDDEN"
Chaque champs reçoit comme nom le numéro de la ligne dans le fichier
Pour la sauvegarde il suffit d’appeler chaque ligne, cachée ou pas, de 0 à count()-1 ...
Il suffisait d’y penser