Registre de présence(boucle dans postgrsql)

Mammouth du PHP | 1029 Messages

12 sept. 2005, 16:38

Bonjour,

je voudrais mettre en place un formulaire de "registre de présence", pour mon association.

La situation est assez simple, je désire proposer un tableaux double entrée, pour un mois donné avec la liste de nos participants , j'ai fais le mpd suivant Image.

Le formateur doit pouvoir entrer le nombre d'heure(sous formes de chiffres,3 ou 6) pour chaque participant.

Une fois le formulaire remplis, il faut mettre les données dans le bdd, j'ai déja ceci .
$sql = "SELECT parnom from participant ORDER BY parnom";
	$result=pg_query($Connect,$sql);
	
echo "<TABLE border = 1>";

	echo "<TD>";
	  echo "<font style=\"font-weight: bold; text-decoration: underline;\" >";echo date('M,Y');echo"</font>";
	echo"</TD>";

		$num = cal_days_in_month(CAL_JULIAN, date('m'), date('Y')); 
		//echo "Il y a $num jours ce mois"; 
		$i=1;
		for($s=0;$s<$num;$s++) {
				echo "<TD>";
					echo $i;
				echo "</TD>";
				$i= $i+1;
		}
	
		while (list($parcivilite) = pg_fetch_array($result)) {
			echo "<TR>";
				echo "<TD>";
					echo $parcivilite;
				echo "</TD>";
				
					for ($v=0;$v<$num;$v++)
						{
							echo "<TD>";
								echo "<input maxlength=\"1\" size=\"1\" name=\"Heure\">";
							echo "</TD>";
							
						}
				
			echo "</TR>";
			
		}


echo "</TABLE>";
il faut mettre les dates, même si il n'y a pas d'heures, et en plus je voudrais pouvoir le réafficher pour modification si possible.

J'espère avoir été clair.

Juste si cela ne vous dérange pas, je suis en procesus d'apprentissage et je voudrais plus dans un premier temps être dirigé, afin que je trouve une solution, plutôt que d'en recevoir une toute faite(peut-être plus tard)

Je vous remercie de votre aide.

MaitrePylos
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

12 sept. 2005, 17:13

J'ai un peu de mal à comprendre ce que tu vherches à faire. Alors pour l'instant, le seul truc que je vois, c'est que ton code mériterai une optimisation qui le rendrait à la fois plus lisible et plus performant, si peu que ce soit, en séparant PHP et HTML:
<?php
$sql = "SELECT parnom from participant ORDER BY parnom";
$result=pg_query($Connect,$sql);
?>
<table border="1">
  <td><p style="font-weight: bold; text-decoration: underline;"><?php echo(date('M,Y')); ?></p></td>
<?php
$num = cal_days_in_month(CAL_JULIAN, date('m'), date('Y'));
//echo "Il y a $num jours ce mois";
$i=1;
for($s=0;$s<$num;$s++)
{
?>
  <td><?php echo($i); ?></td>
<?php
    $i++;
}

while (list($parcivilite) = pg_fetch_array($result))
{
?>
  <tr>
    <td><?php echo($parcivilite); ?></td>
<?php
    for ($v=0;$v<$num;$v++)
    {
?>
    <td><input maxlength="1" size="1" name="Heure"></td>
<?php
    }
?>
  </tr>
<?php
}
?>
</table>
Maintenant, ce que je voudrais comprendre, c'est ce que tu veux afficher, où et avec quelle condition ? Pouvoir modifier ? la donnée affichée dans un élément de formulaire sera de toutes façon modifiable à deux conditions: tu ne mets pas de read-only dans les input et tu prévois un traitement lors du clic sur un bouton submit.

Je note également que de la manière dont tu le fais afficher, tu risques fort d'avoir un tableau avec un nombre de colonnes qui pourrait sétirer très loin en largeur à l'écran. Tu pourrais envisager une disposition dans le sens vertical et ça te permettrait de limiter à une boucle for() au lieu de deux.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

13 sept. 2005, 09:35

Bonjour Cyrano,

Alors tout d'abord merci de ta réponse, pour ma part on m'a appris(en formation) à ne jamais séparé le code, je pense que cela doit être une question de principe et de travail.

Je vais essayer comme tu me le dis:D .

Je travaille dans un centre d'alphabétisation ici, et dans ce cadre nous donnons des formations à des participants, formations dans lesqels nous devons comptabiliser les heures prèsté par c'est participants.

Alors imaginons le professeur Cyrano et l'élèves MaitrePylos.

Une fois le cours terminé "Cyrano", va sur son pc, se logue via un mecanisme de session, et choisis le mois et l'année en cours(j'imagine à ce moment un menu déroulant).

Il arrive devant un tableaux double entrée type fichier Excel, où il pourra en comparaison du jour mettre les heures préstée(3 ou 6) par MaitrePylos, ensuite envoyer le tous dans la bdd.

Je dois également pouvoir réafficher le tableau avec les données déja inscrites.

J'ai également une dizaine de collègues qui doivent procédé de la sorte.

et je dois également pouvoir faire des calculs d'heures sur des périodes de dates définies.

Voila,voila je pense avoir décrit le problème.

Merci de ton aide.

MaitrePylos
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

13 sept. 2005, 12:45

...on m'a appris(en formation) à ne jamais séparé le code, je pense que cela doit être une question de principe et de travail...
C'est une question de performance : PHP est là pour interpréter ce qui est entre les <?php et ?> : si tu y mets du HTML, il faudra le détecter et le retourner sans l'interpréter vers le navigateur: c'est une perte de temps... et donc de performance. In écrivant ton code de la manière dont je l'ai présenté, PHP n'interprête QUE du PHP et envoie le reste directement vers le navigateur sans perte de temps.

Pour ton problème maintenant, il faut que tu génères en effet un formulaire comportant des parties non modifiables et d'autres à compléter : listes déroulantes pour les dates et heures, liste déroulante pour les noms des élèves par rapport à certains critères à définir dans ta requête SQL etc...

Pour pouvoir faire des calculs sur les dates et considérant que tu dois pouvoir compter des heures, il serait souhaitable d'utiliser un type de champ DATETIME comportant la date ET l'heure si ce type de champ existe avec PostGreSql, sinon deux champs, un type DATE l'autre type TIME. Tout ça peut être fait par requête SQL directement, les fonctions de calcul sur les dates et les heures sont très variées et ouvrent des possibilités nombreuses.

Rajoute à tout ça un système de sessions permettant à n'importe quel professeur de l'sidentifier pour agir sur ses propres fichiers.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

13 sept. 2005, 15:23

pfffffffff, je viens de perdre mon message, enfin.

je ne peux pas faire un menu déroulant pour les élèves(+/- 300), l'idéal serait vraiment de faire un tableau double entrée(jeu d'échec) et mettre dans la case A1 = MaitrePylos Cyrano 22-09-2005 3
la case A2= "MaitrePylos" "Cyrano" 23-09-2005 "" et ainsi de suite.

Puis de faire une boucle sql afin d'insérer toutes les données au bon endroit.
Pour pouvoir faire des calculs sur les dates et considérant que tu dois pouvoir compter des heures, il serait souhaitable d'utiliser un type de champ DATETIME comportant la date ET l'heure si ce type de champ existe avec PostGreSql, sinon deux champs, un type DATE l'autre type TIME
, il ne me sert à rien de mettre un champs heure puisque cela sera automatiquement 3 ou 6.

Je le vois ainsi :

1) je récupére l'id du prof
2) j'arrive je ne sais pas comment a mettre comme values dans mon input
la date et l'idparticipant.
3)on ajoute 3 ou 6 via le formulaire web

Puis on boucle???
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

13 sept. 2005, 16:07

Lors de l'identification du professeur, ce cas est déjà réglé, alors le premier problème à résoudre est le choix de l'élève. Je dirais que dans cette optique, il faut créer un petit moteur de recherche pour sélectionner un élève en particulier. Donc un premier formulaire et la génération dynamique d'une requête du style:
$eleve = $_POST['eleve']
$sql = "SELECT parnom FORM participant WHERE parnom LIKE '%".  $eleve."%'"
À partir de là, tu pourrais générer une liste déroulante pour sélectionner parmi un choix nettement moins important. Rien n'interdit non plus d'être plus précis en ayant éventuellement la possibilité de rechercher par nom ET/OU prénom ET/OU nationalité ET/OU tout autre critère pertinent permettant une identification.

Pour transférer par la suite la valeur sélectionnée dans la liste obtenue vers un champ de type text, un gestionnaire d'évènement JavaScript fera très bien l'affaire. Supposons une liste déroulante suivie d'un champ input type="text" :
<?php
$eleves = array("Dupond", "Durand", "Dutilleul");
?>
<form id="form_1" action="<?php echo($_SERVER['PHP_SELF']) ?>" method="post">
<select name="eleves" onchange="document.forms['form_1'].elements['parnom'].value=this.value">
  <option value="">Choisir un élève</option>
<?php
foreach($eleves as $eleve)
{
?>
  <option value="<?php echo($eleve); ?>"><?php echo($eleve); ?></option>
<?php
}
?>
</select>
<input type="text" name="parnom" id="parnom" value="" />
<input type="submit" name="envoi" value="Enregistrer" />
</form>
Il te reste à rajouter un choix de nombre d'heure, soit une liste déroulante ou bien des boutons radio. Le traitement de cette partie enregistre les données.

Par la suite, il faut traiter à part les statistiques et définir ce que tu veux obtenir pour concevoir les requêtes appropriées.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

13 sept. 2005, 16:46

Le faire de cette façon est-ce que c'est possible.

Le problème avec le menu déroulant est que dans la pratique, il faut être consciencieux et le faire tous les jours.

Devise de l'équipe : fais le mois prochains ce que tu devais faire il 6 semaines(devise véridique) :wink:

Si la façon que je veux faire n'est pas possible, alors mettons nous à table.

ps: est-il possible d'afficher autant d'input que de jours du mois, avec ta proposition?
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

13 sept. 2005, 17:20

Ne jamais remettre au lendemain ce qu'on pourrait faire faire par un autre le surlendemain :langue:
La page que tu me montre est possible à quelques corrections de détail près : toutes tes balises input on le même nom: comment feras-tu la différence ?

Proposition sur la base de ton code source HTML remis en forme (j'ai ramassé le html et le CSS et j,ai revu avec un peu de PHP pour générer le tableau:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Registre</title>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<!-- 
<link rel="StyleSheet" type="text/css" href="Css/Style.css">
 -->
<style type="text/css">
/* Generated by CaScadeS, a stylesheet editor for Mozilla Composer */
input, textarea, option, select { border: 1px outset rgb(251, 175, 77);
    background-color: rgb(192, 192, 192);
    font-family: Times,sans-serif;
    font-size: 12pt;
    font-weight: inherit;
}
input {
    width: 1.5em;
    margin: 0;
}
hr 
{
    color: rgb(255,123,0) 
}
h1 { 
    padding: 6px;
    background-color: rgb(0, 0, 0);
    font-family: Tahoma;
    font-style: normal;
    font-variant: normal;
    font-weight: normal;
    font-size: 18pt;
    line-height: normal;
    font-size-adjust: none;
    font-stretch: normal;
    color: silver;
    }

h2 { color: rgb(255, 170, 51);
    font-size: 14pt;
    margin-left: 5px;
    margin-bottom: 15px;
    }

h3 { margin: 5px;
    color: rgb(255, 170, 51);
    font-size: 12pt;
    }
p { margin: 10px;
    text-align: center;
    font-size: 10pt;
}
b { color: rgb(255, 255, 255);
    text-align: center;
    }
.bleu { color: blue;
    font-size: 14pt;
    }
a { font-family: Tahoma;
    font-style: normal;
    font-variant: normal;
    font-weight: bold;
    font-size: 8pt;
    line-height: normal;
    font-size-adjust: none;
    font-stretch: normal;
    text-decoration: none;
    color: rgb(250, 248, 233);
    }
a:hover { color: red;
    }
li { color: rgb(255, 255, 255);
    font-size: 10pt;
    list-style-type: square;
    text-align: center;
    }
address { padding: 6px;
    background-color: rgb(0, 0, 0);
    color: rgb(255, 255, 255);
    font-size: 9pt;
    }
.alert { color: rgb(255, 255, 255);
    font-size: 10pt;
    font-weight: bold;
    text-align: center;
    margin-left: 50px;
    margin-right: 50px;
    }

.button { border: 1pt solid rgb(102, 102, 102);
    color: rgb(204, 0, 0);
    font-weight: bold;
    text-transform: capitalize;
    text-align: center;
    font-size: large;
    line-height: 10cm;
    background-color: rgb(192, 192, 192);
    opacity: 1;
    background-repeat: no-repeat;
    background-position: left center;
    }
td { font-family: Tahoma;
    font-style: normal;
    font-variant: normal;
    font-weight: normal;
    font-size: 8pt;
    line-height: normal;
    font-size-adjust: none;
    font-stretch: normal;
    color: silver;
    width: 2em;
    }
.bouton { background: rgb(0, 0, 0) url(../image/bouton.jpg) repeat scroll 0%;
    text-align: right;
    -moz-background-clip: initial;
    -moz-background-origin: initial;
    -moz-background-inline-policy: initial;
    }
.lien { color: rgb(170, 124, 49);
    }

.nolien { font-family: Tahoma;
    font-style: normal;
    font-variant: normal;
    font-weight: bold;
    font-size: 8pt;
    line-height: normal;
    font-size-adjust: none;
    font-stretch: normal;
    color: rgb(250, 248, 233);
    }

.fond { background: rgb(51, 51, 51) none repeat scroll 0%;
    -moz-background-clip: initial;
    -moz-background-origin: initial;
    -moz-background-inline-policy: initial;
    }
.fond2 { background: rgb(255, 204, 0) none repeat scroll 0%;
    -moz-background-clip: initial;
    -moz-background-origin: initial;
    -moz-background-inline-policy: initial;
    }
.titre { font-family: Tahoma;
    font-style: normal;
    font-variant: normal;
    font-weight: bold;
    font-size: 10pt;
    line-height: normal;
    font-size-adjust: none;
    font-stretch: normal;
    color: silver;
    }
table {
    margin-left:inherit;
}
</style>
</head>
<body class="fond">
<center>
<table width="95%" cellspacing="0" cellpadding="0" border="1" bgcolor="#000000" summary="">
  <tr>
    <td width="50" nowrap class="fond" valign="bottom">
<!-- Coin Haut gauche -->
      <div align ="center">
      <p style="font-weight: bold; text-decoration: underline; font-size: 1.2em">REGISTRE DE PRESENCE</p>
      </div>
      <table cellspacing="2" cellpadding="0" border="0" summary="">
        <tr>
          <td width="102" height="21" nowrap class="bouton">
            <a class="lien" href="index.php'">Accueil</a>
          </td>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
<!-- Menu gauche -->
    <td>
<!-- Corps de la page -->
      <center>
      <table border="1" summary="" style="margin: 20% 0">
        <tr>
          <td>
            <font style="font-weight: bold; text-decoration: underline;">Sep,2005</font>
          </td>
<?php
$nb_jours = 30;
for($i = 1; $i <= $nb_jours; $i++)
{
?>
          <td><?php echo($i); ?></td>
<?php
}
?>
        </tr>
<?php
$noms = array("BOUJABOUD", "ERNAELSTEN", "QSDF");
foreach($noms as $nom)
{
?>
        <tr>
          <td><?php echo($nom); ?></td>
<?php
    for($i = 1; $i <= $nb_jours; $i++)
    {
?>
          <td><input maxlength="1" size="1" name="Heure[]"></td>
<?php
    }
?>
        </tr>
<?php
}
?>
      </table>
      </center>
    </td>
  </tr>
</table>
</center>
<br>
<table summary="">
  <tr>
    <td>
      <address>13/09/2005 <a href="mailto:">
      <img style="border: 0px solid ; width: 45px; height: 38px;" align ="right"alt="Mail webmestre" title="Mail Webmestre" src="image/dpenguin.gif">
      </a>
      </address>
      <br>
    </td>
  </tr>
</table>
</body>
</html>
Il te restera à ajouter le bouton de validation: Tu auras noté que name="Heure" est devenu name="Heure[]" : ce n'est pas suffisant comme correction puisque la différence entre une ligne et l'autre est impossible à faire tel quel, mais en revanche, ça te donne un point de départ. Ensuite mettre Heure[] envoie dans ce cas un tableau indexé. Tu peux parfaitement avoir des attributs name dynamiques d'une ligne à l'autre, je te laisse réfléchir un peu sur la question.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

14 sept. 2005, 10:33

Bonjour,

Alors aux réponses que tu as donnés sur d'autres post(mais tu es partout) :pouce:
après le bouton submit, j'arriverais au code sql suivant
$TableHeure = (isset($_POST['Heure']))?$_POST['Heure']:null;

$nb = count($TableHeure);

/* On initialise le début d'une requête SQL */
$sql = "INSERT INTO heurestagiaire (jour,heurepreste,idparticipant,idlogin) VALUES ";

//On initialise une boucle
for($i = 0; $i < $nb; $i++)
{
    $sql .= "('".$jour."','". $TableHeure[$i] ."','".$_POST['idparticipant']."','".$_SESSION['idlogin']."')";
    
}

pg_query....


il me semblerait plus logique de mettre le pg_query dans la boucle.

comment puis-je faire la différence entre un participant et un autre?
comment mettre les dates dans $jour?

suis-je dans le bon?

merci de ton aide
MaitrePylos
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

14 sept. 2005, 11:13

Tu soulignes précisément le problème que j'ai moi-même soulevé dans ma précédente réponse: tu dois pouvoir distinguer sans erreur les différentes lignes de ton tableau. Là se pose un problème simple: est-ce que tu dois traiter la liste des élèves en bloc ou individuellement ?

J'ai évoqué une liste déroulante générée suite à une recherche pour limiter le nombre de noms, mais dans mon esrit, c'était surtout pour isoler un nom et traiter celui-ci individuellement. Par conséquent, jle tableau final n'aurait qu'une seule ligne.

Mais tu sembles parti pour traiter par groupes, ce que je comprends moins, mais peu importe: dans ce cas, il faut identifier les champs de façon à pouvoir les distinguer lors le la récupération des informations du formulaire. Il te faut donc crer des attributs name dans tes input de façon à pouvoir identifier formellement l'élève à qui les données se rapportent. Ce que tu pourrais faire ressemblerait donc a ceci:
<?php
$noms = array("BOUJABOUD", "ERNAELSTEN", "QSDF");
foreach($noms as $nom)
{
?>
        <tr>
          <td><?php echo($nom); ?></td>
<?php
    for($i = 1; $i <= $nb_jours; $i++)
    {
?>
          <td><input maxlength="1" size="1" name="<?php echo($nom); ?>Heure[<?php echo($i); ?>]"></td>
<?php
    }
?>
        </tr>
<?php
}
?>
Partant de là, lors de la récupération, il faut dynamiquement créer les variable:
<?php
if(isset($_POST['envoi']))
{
    foreach($_POST as $var => $valeur)
    {
        ${$var} = $valeur;
    }
}
//...
?>
Mais à ce stade, on a une série de tableaux donc les noms ressemblent à $QSDFHeure : il faut extraire le nom de l'élève pour le distinguer des autres lors de l'insertion;
<?php
if(isset($_POST['envoi']))
{
    $eleve = array();
    foreach($_POST as $var => $valeur)
    {
        ${$var} = $valeur;
        $eleve[] = substr($var, 0, -5);
    }
}
//...
?>
Ce qui dans notre exemple va donner le tableau suivant:

Code : Tout sélectionner

array(4) { [0]=> string(9) "BOUJABOUD" [1]=> string(10) "ERNAELSTEN" [2]=> string(4) "QSDF" [3]=> string(0) "" }
Le dernier élément est le bouton submit puisque comme on ne connait pas le nom des éleves à l'origine, j'ai mis un système dynamique pour créer des variables.
Mais l'important à partir de là, c'est que tu disposes de l'élément d'identification qui te permet de faire tes mises à jour individuelles.

Est-ce que tu commences à discerner la solution de cette manière ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

14 sept. 2005, 12:09

J'ai évoqué une liste déroulante générée suite à une recherche pour limiter le nombre de noms, mais dans mon esrit, c'était surtout pour isoler un nom et traiter celui-ci individuellement. Par conséquent, jle tableau final n'aurait qu'une seule ligne.
Je ne l'avais pas imaginer sous cet angle(les mêmes mots ne veulent pas dire la même chôses) :wink:

Laisse moi 1 heure, pour que je puisse cheminer dans ma tête.

Ce qui me fais peur, c'est comment retrouver le tableau pour faire un Update.

je reviens après le repas.

Bon appétit
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 1029 Messages

14 sept. 2005, 13:50

bon ok,

Laissons tomber mon insertion en block.
(vraiment désolé de t'embéter) :oops:

Repartons sur ton idée avec un menu déroulant et une seule ligne de tableau.
De plus je viens d'en discuter avec certain collégues, et un problème se rajoute avec mon tableau en block, ce sont les prénoms.

donc, on repartirais sur une page qui permetrais de choisir le mois et l'année et en fonction de c'est deux éléménts on ferais une liste déroulante des noms ce qui me permetrais de pouvoir indiquer les heures de chaque participants dans chaque jours du mois.

comment toi tu le vois?
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 1029 Messages

14 sept. 2005, 15:14

est-ce que c'est quelque chose comme ça, que tu le vois
<?php
$eleves = array("Dupond", "Durand", "Dutilleul");
?>
<TABLE border="1">
<form id="form_1" action="<?php echo($_SERVER['PHP_SELF']) ?>" method="post">
<TD>
<select name="eleves" onchange="document.forms['form_1'].elements['parnom'].value=this.value">
  <option value="">Choisir un élève</option>
<?php
foreach($eleves as $eleve)
{
?>
  <option value="<?php echo($eleve); ?>"><?php echo($eleve); ?></option>
<?php
}


?>

</select>
</TD>
<TD>
<?PHP
$num = cal_days_in_month(CAL_JULIAN, date('m'), date('Y')); 
		//echo "Il y a $num jours ce mois"; 
		$i=1;
		for($s=0;$s<$num;$s++) { ?>
				<TD> 
				<?PHP	echo $i; ?>
				</TD>
			<?PHP	$i= $i+1;
		}
?>
</TD>
</TABLE>
<input type="text" name="parnom" id="parnom" value="" />
<input type="submit" name="envoi" value="Enregistrer" />
</form>
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 1029 Messages

15 sept. 2005, 13:50

Bonjour,

Bon voila j'ai fais ceci, mais bon le javascript et moi cela fait deux, je n'arrive pas à affciher le prenom.
<?php
include("../Ekoke/Base/pgConnect.php");
$num = cal_days_in_month(CAL_JULIAN, date('m'), date('Y')); 

?>
<TABLE border="1">
<form id="form_1" action="<?php echo($_SERVER['PHP_SELF']) ?>" method="post">
<TD>
<SELECT NAME="Nom" onchange="document.forms['form_1'].elements['parnom'].value=this.value"> 
<?php
$result = pg_query($Connect,"SELECT DISTINCT parnom FROM participant ORDER BY parnom ASC ");
while ($row = pg_fetch_array($result))
{
    $valeur = $row["parnom"];
    echo($valeur == $reg?"<option selected>".$valeur:"<option>".$valeur);
}
?>
</td
<TD>
<?php
$i=1;
for($s=0;$s<$num;$s++) {
echo "<TD>";
	echo $i;
echo "</TD>";
$i= $i+1;
		}
?>
</TD>

<tr>
<TD>

<SELECT NAME="Prenom"size="1" >
<?php
$result = pg_query($Connect,"SELECT parprenom FROM participant where parnom=$_POST[Nom] ");
while ($row = pg_fetch_array($result))
{
    $valeur = $row["parprenom"];
    echo($valeur == $reg?"<option selected>".$valeur:"<option>".$valeur);
}
?>
</TD>
<td>
<?php
for ($v=0;$v<$num;$v++)
						{
							echo "<TD>";
								echo "<input maxlength=\"1\" size=\"1\" name=\"Heure[]\">";
							echo "</TD>";
							
						}
						
?>
</TD>
</tr>
</TABLE>
<input type="submit" name="envoi" value="Enregistrer" />
</form>
Merci de ton aide

MaitrePylos
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

15 sept. 2005, 15:33

Ton code mériterai un minimum d'attention de ta part, la partie HTML est un peu n'importe quoi : ne construis pas à l'arrache, pars d'une maquette et découpe sans rajouter des morceaux n'importe comment: essaye déjà avec un code remis droit :
<?php
include("../Ekoke/Base/pgConnect.php");
$num = cal_days_in_month(CAL_JULIAN, date('m'), date('Y'));

?>
<form id="form_1" action="<?php echo($_SERVER['PHP_SELF']) ?>" method="post">
  <table border="1">
    <tr>
      <td>
        <select name="Nom" onchange="document.forms['form_1'].elements['parnom'].value=this.value;">
<?php
$sql = "SELECT DISTINCT parnom FROM participant ORDER BY parnom ASC ";
$result = pg_query($Connect, $sql);
while ($row = pg_fetch_array($result))
{
    $valeur = $row["parnom"];
    $selected = ($valeur == $reg) ? " selected" : null;
?>
          <option value="<?php echo($valeur); ?>"<?php echo($selected); ?>><?php echo($valeur); ?></option>
<?php
}
?>
        </select>
      </td>
<?php
$i=1;
for($s = 0; $s < $num; $s++)
{
?>
      <td><?php echo($i); ?></td>
<?php
    $i= $i+1;
}
?>
    </tr>
    <tr>
      <td>
        <select name="Prenom"size="1">
<?php
$sql2 = "SELECT parprenom FROM participant where parnom= '". $_POST['Nom'] ."'";
$result = pg_query($Connect, $sql2);
while ($row = pg_fetch_array($result))
{
    $valeur = $row["parprenom"];
    $selected = ($valeur == $reg) ? " selected" : null;
?>
          <option value="<?php echo($valeur); ?>"<?php echo($selected); ?>><?php echo($valeur); ?></option>
<?php
}
?>
        </select>
      </td>
<?php
for ($v = 0; $v < $num; $v++)
{
?>
      <td><input maxlength="1" size="1" name="Heure[]"></td>
<?php
}

?>
    </tr>
  </table>
  <input type="submit" name="envoi" value="Enregistrer" />
</form>
Ensuite tu me diras ce qui ne fonctionne pas. Un truc à faire systématiquement: quand tu affiches les résultat d'un script dans u navigateur, prends donc l'habitude sytématique de jeter un coup d'oeil au code source html généré : Surtout quand il y a des tableaux, certains éléments mal conçus risquent de s'afficher là où tu ne l'attends pas ou pire là où tu ne pourras même pas le voir sauf dans le code source.

Et vérifie donc à quoi correspond ta variable $reg qu'on trouve à deux endroits mais qui n'est définie nulle part... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: