Registre de présence(boucle dans postgrsql)

Mammouth du PHP | 1029 Messages

20 sept. 2005, 12:32

Ok, un nom de variable ne pouvant commencer que par une lettre ou un _ ça ne risquait pas de fonctionner puisque ce sont des index numériques. Il te faudra donc définir des variables toi-même au lieu d'utiliser la création dynamique du style $heure_0 = $_POST['heure'][0] quoique ce serait peut-être possible malgré tout avec quelque chose comme $h{$var} = $valeur, il faudrait tester, je n'ai jamais essayé
J'ai rien compris :shock:
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

20 sept. 2005, 12:47

On est pas sortis de l'auberge là :-k

Je me demande si tu as bien saisi le principe de fonctionnement de la récupération des valeurs de champs d'un formulaire dans la partie traitement ... :?:

Essaye de m'illustrer ce que tu en as compris avec un exemple aussi simpliste que possible pour un ou deux champs (avec le code). Ça me donnera un point de départ pour t'expliquer selon ton niveau de compréhension.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

20 sept. 2005, 13:05

Salut,

Alors j'ai bien compris le passage de formulaire au $_POST ou $_GET, je comprend également que name="heure[]", crée un array dynamique que je peux récupérer par un foreach.

Ce qui me pose problème c'est quand tu commences à parler de double variables
$h{$var} = $valeur
, je me disais que je pourais insérer mon sql grâce au foreach.

disons clairement que je ne comprend pas la fonction suivante.

if(isset($_POST['Heure']))
{
    foreach($_POST['Heure'] as $var => $valeur)
    {
        ${$var} = $valeur;
        echo $valeur;
    }
}
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

20 sept. 2005, 13:13

Bon, ce système de boucle ne fonctionne pas parce que ça génèrerait des variables $0, $1, $2 etc... or une variable PHP ne peut commencer que pas une lettre ou un _ : donc à tester:
if(isset($_POST['Heure']))
{
    foreach($_POST['Heure'] as $var => $valeur)
    {
        $h{$var} = $valeur;
        echo $valeur;
    }
}
ça va créer des variables $h0, $h1, $h2 etc...
C,est comme si on faisait la chose suivante:
if(isset($_POST['Heure']))
{
    $heure = $_POST['Heure']
    $h0 = $heure[0];
    $h1 = $heure[1];
    $h2 = $heure[2];
}
echo("<p>". $h0 ."<br />\n". $h1 ."<br />\n". $h2 ."</p>\n");
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

20 sept. 2005, 13:49

D'accord je comprend, tu veux changer le nom de la variable.

Donc maintenant je fais un var dump de la $valeurs et il me met

Code : Tout sélectionner

string(0) ""
, alors que m'attendais plus a ceci
array(30) {
    h[0]=>
    string(1) "1"
    h[1]=>
    string(1) "1"
    h[2]=>
    string(1) "1"
    h[3]=> 
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

20 sept. 2005, 14:19

fais ce même var_dump sur $heure (seconde manière) et c'est ce que tu affcheras puisque $heure est un tableau, tandis que $valeur (première manière) est une variable ordinaire (dite scalaire)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

20 sept. 2005, 15:50

Ben le var dump donne toujours ceci
array(30) {
  [0]=>
  string(1) "1"
  [1]=>
  string(0) ""
  [2]=>
  string(0) ""
  [3]=>
  string(0) ""
  [4]=>
  string(0) ""
  [5]=>
  string(0) ""
  [6]=>
  string(0) ""
  [7]=>
  string(0) ""
  [8]=>
  string(0) ""
  [9]=>
  string(0) ""
  [10]=>
  string(0) ""
  [11]=>
  string(0) ""
  [12]=>
  string(0) ""
  [13]=>
  string(0) ""
je pensais que comme cela j'y serais arriver
if(isset($_POST['Heure']))
{
    $heure = $_POST['Heure'];
    
    $i=0;
    while ($i<$heure[$i]) {
    	$h[$i]=$heure[$i];
    	echo $h;
    	$i++;
    }

    
    	
    
} 
Mais bon je me suis encore planter
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

20 sept. 2005, 16:37

De quoi a donc l'air le formulaire ...? Parce que là, je comprends de moins en moins... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

21 sept. 2005, 10:43

Voila
<?php
include("../Ekoke/Base/pgConnect.php");
$num = cal_days_in_month(CAL_JULIAN, date('m'), date('Y'));


if(isset($_POST['Heure']))
{
    $heure = $_POST['Heure'];
    
  /*ici il faudrait mettre le code sql
  je dois récupérer :

  l'id participant ok
  l'id formateur ok
  les heures préstée ceux qu'on insère dasn le champ heure
  à chaque champs 'heure' une date Y/m/d*/
  
    	
    
} 
?>
<pre>
<?php
var_dump($heure);
?>
</pre>
<form id="form_1" action="essai3.php" method="POST">
  <table border="1">
    <tr>
      <td rowspan="2">
        <select name="Nom" >
<?php
$sql = "SELECT idparticipant,parnom, parprenom FROM participant ORDER BY parnom ASC ";
$result = pg_query($Connect, $sql);
while ($row = pg_fetch_array($result))
{
	$id = $row["idparticipant"];
    $valeur = $row["parnom"] ." ". $row["parprenom"];
?>
          <option value="<?php echo($id); ?>"><?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>
<?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>
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

21 sept. 2005, 11:09

Là effectivement, je comprends d'autant mieux que tu ne récupères rien: regarde bien le champ input heure[] : tu n'as mis aucun attribut "value" : donc rien n'est envoyé. Ça devrait ressembler à ça:
<?php
include("../Ekoke/Base/pgConnect.php");
$num = cal_days_in_month(CAL_JULIAN, date('m'), date('Y'));

$heure = isset($_POST['Heure']) ? $_POST['Heure'] : null;

/*ici il faudrait mettre le code sql
je dois récupérer :

l'id participant ok
l'id formateur ok
les heures préstée ceux qu'on insère dasn le champ heure
à chaque champs 'heure' une date Y/m/d*/
if(isset($heure))
{
?>
<pre>
<?php
    var_dump($heure);
?>
</pre>
<form id="form_1" action="essai3.php" method="POST">
  <table border="1">
    <tr>
      <td rowspan="2">
        <select name="Nom" >
<?php
    $sql = "SELECT idparticipant,parnom, parprenom FROM participant ORDER BY parnom ASC ";
    $result = pg_query($Connect, $sql);
    while ($row = pg_fetch_array($result))
    {
        $id = $row["idparticipant"];
        $valeur = $row["parnom"] ." ". $row["parprenom"];
?>
          <option value="<?php echo($id); ?>"><?php echo($valeur); ?></option>
<?php
    }
?>
        </select>
      </td>
<?php
    $i=1;
    for($s = 0; $s < $num; $s++)
    {
?>
      <td><?php echo($i); ?></td>
<?php
        $i++;
    }
?>
    </tr>
    <tr>
<?php
    for ($v = 0; $v < $num; $v++)
    {
?>
      <td><input maxlength="1" size="1" name="Heure[]" value="<?php echo($heure[$v]); ?>"></td>
<?php
    }

?>
    </tr>
  </table>
  <input type="submit" name="envoi" value="Enregistrer" />
</form>
<?php
}
?>
Note que j'ai modifié le début et le formulaire n'apparaîtra que si une valeur a été envoyée avec $_POST['heure'].
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

21 sept. 2005, 11:53

Attends je crois qu'on se méprend.

Ici on est en train de construire le formulaire qui va me permettre d'encoder les heures présté par mes participants et puis l'insérer dans le bdd.

J'ai l'impression que tu es déja à l'étape où on doit récupérer les données dans le sql.

Donc on construit le formulaire d'insertion.

d'accord avec moi :-$
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

21 sept. 2005, 13:18

Je ne saisis pas, ce que je peux dire en revanche, c'est qu'un champ <input> dépourvu d'attribut value n'enverra aucune valeur. Donc à la réception, tu n'as aucune chance de récupérer quoi que ce soit.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

21 sept. 2005, 14:01

ok je reprend depuis le début

j'ai une bdd postgresql dont voici le mcd

Image

Ce que je voudrais c'est un formulaire où on peux inscrire les heures de stagiaire présté.

Les heures seront toujours soit 3 soit 6 donc pas besoin de champs timestamp un integer suffit.

Il faut également que je puisse mettre la date que les heures on été présté.

je dois également indiqué chez quel formateur c'est heures ont été présté.

D'aprés le dernier formulaires que tu me proposes, on sait déja :

Quel formateur : puisque il se connecteras via un formulaires et donc je récupère son id.

Quel participants puisque via le menu déroulant on récupère le id.

il reste a récupérer les heures que le formateur inscriras dans le formulaire et a indiquer la date que c'est heures on été réalisé.

on à donc un input qui est reproduis autant de fois que de jours dans le mois en cours, et qui sert de base pour le remplir.

question comment mettre tous ça dans la table "heuresstagiaire".

Merci de ton aide précieuse
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 1029 Messages

30 sept. 2005, 14:58

Bonjour,

Je crois que je viens bêtement d'avancer d'un grand pas, avec un input hiden j'obtient une variables avec la valeurs voulues. comme ceci.


<?php
include("../Ekoke/Base/pgConnect.php");
$num = cal_days_in_month(CAL_JULIAN, date('m'), date('Y'));

$heure = isset($_POST['Heure']) ? $_POST['Heure'] : null;
$date1 = isset($_POST['Date1']) ? $_POST['Date1'] : null;
 
if(isset($heure))
{
	
?>
<pre>
<?php
    var_dump($heure);
    var_dump($date1);
    
?>
</pre>
<?PHP
}
?>
<form id="form_1" action="essai4.php" method="POST">
  <table border="1">
    <tr>
      <td rowspan="2">
        <select name="Nom" >
<?php
    $sql = "SELECT idparticipant,parnom, parprenom FROM participant ORDER BY parnom ASC ";
    $result = pg_query($Connect, $sql);
    while ($row = pg_fetch_array($result))
    {
        $id = $row["idparticipant"];
        $valeur = $row["parnom"] ." ". $row["parprenom"];
?>
          <option value="<?php echo($id); ?>"><?php echo($valeur); ?></option>
<?php
    }
?>
        </select>
      </td>
<?php
    $i=1;
    for($s = 0; $s < $num; $s++)
    {
?>
      <td><?php echo($i); ?></td>
<?php
        $i++;
    }
?>
    </tr>
    <tr>
<?php
    for ($v = 1; $v < $num+1; $v++)
    {
?>
      <td><input maxlength="1" size="1" name="Heure[]" value=""></td>
      <INPUT type="hidden" id="date1" name="Date1[]" value="<?php echo (date('Y-m').'-'.$v)?> ">
<?php
    }

?>
    </tr>
  </table>
  <input type="submit" name="envoi" value="Enregistrer" />
</form>
<?php

?>
Maintenant que j'ai toutes les données, puis je faire un foreach avec 2 tableaux dynamique, afin de faire mon code sql?

Merci de votre aide
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 1029 Messages

07 nov. 2005, 11:26

J'approche du but.

Voila j'ai bien tous ce qu'il me faut avec le code suivant.

J'arrive à générer mon menu déroulant avec les champs correspondant et il insère dans la base de données les bons éléments grâce à une fonction créer dans PostgreSQL, et le problème de tableaux régler dans un autre post.

Voici le code
<?php
session_start();
include("Base/pgConnect.php");
//include("Passwd/PasswdAnnuaire.php");

if ($_POST['DateAnnee']) {
	

$_SESSION['DateMois'] = $_POST['DateMois'];
$_SESSION['DateAnnee'] = $_POST['DateAnnee'];
$_SESSION['DatePlus'] = $_SESSION['DateMois'] + 1;

}



if ($_POST['Heure']) {
		
	
$heure = isset($_POST['Heure']) ? $_POST['Heure'] : null;
$date1 = isset($_POST['Date1']) ? $_POST['Date1'] : null;
 
	if(isset($heure))
		{
	//parcours du 1er tableau en mettant les index dans $index et les valeurs
// dans $valeur
foreach ($_POST['Date1'] as $index=>$value) {
    //Récupération de la valeur du tableau 2 dont l'index est celui du tableau 1
    $value2 = $_POST['Heure'][$index];
    //Construction de la requete de mise à jour ou de update function créer grâce au langage pl/pgsql
    $sql = "SELECT insertupdate($value2,'".$value."',$_SESSION[idformateur],$_POST[Nom]);";
    pg_query($Connect,$sql) or die ('Erreur dans le shéma');
     //insertion ou modification du registre  
    
						}
		echo "<p>Insertion dans le registre OK</p>";
    echo "<meta http-equiv=\"refresh\" content=\"2;url=index.php?section=Registre\" />";			
		}
}
else {
	
	echo "<p>Bonjour <b>".strtoupper($_SESSION['UserName'])."</B> bienvenu(e) dans le registre pour le mois de " .$_SESSION['DateMois']." de l'année ".$_SESSION['DateAnnee']."<p>";
    /**fonction définnissant le mois choissi par le menuregistre.php */
	$num = cal_days_in_month(CAL_JULIAN, date($_SESSION['DateMois']), date($_SESSION['DateAnnee']));
?>
<form id="form_1" action="index.php?section=Registre" method="POST">
  <table border="1">
    <tr>
      <td rowspan="2">
        <select name="Nom" >
<?php
/** fonction créant le menu déroulant des personne inscrite dans l'association*/
    $sql = "SELECT idparticipant,parnom, parprenom FROM participant ORDER BY parnom ASC ";
    $result = pg_query($Connect, $sql);
    while ($row = pg_fetch_array($result))
    {
        $id = $row["idparticipant"];
        $valeur = $row["parnom"] ." ". $row["parprenom"];
?>
          <option value="<?php echo($id); ?>"><?php echo($valeur); ?></option>
<?php
    }
?>
        </select>
      </td>
<?php
/**ici on crée autant de cases que dans la mois numeroter de 1 à la fin du mois*/
    $i=1;
    for($s = 0; $s < $num; $s++)
    {
?>
      <td><?php echo($i); ?></td>
<?php
        $i++;
    }
?>
    </tr>
    <tr>
<?php
/**ici on crée le même nombres de case mais avec récupération des valeurs inscrite dans la base de données
et on crée un champs caché avec les dates du mois*/
$recupsql = "SELECT * FROM registre WHERE regjour  >='$_SESSION[DateAnnee]-$_SESSION[DateMois]-01' AND regjour  <'$_SESSION[DateAnnee]-$_SESSION[DatePlus]-01'
AND registre.idparticipant=$id
AND registre.idlogin = 1";
$soluce = pg_query($recupsql);
$row = pg_numrows($soluce);


if ($row!=0) {
	

while ($row =pg_fetch_array($soluce)){
	

	echo "<td><input maxlength=\"1\" size=\"1\" name=\"Heure[]\" value=\"$row[regheure]\"></td>";

}
}
else {
for ($v = 1; $v < $num+1; $v++)
    {
?>
      <td><input maxlength="1" size="1" name="Heure[]" value="0"></td>
    
<?php
    }
}
?>
    </tr>
  </table>
  
<?PHP
for ($v = 1; $v < $num+1; $v++)
    {
?>
 <INPUT type="hidden" id="date1" name="Date1[]" value="<?php echo (date($_SESSION['DateAnnee'].'-'.$_SESSION['DateMois']).'-'.$v)?> ">
<?PHP
    }
?>
  
 <input type="submit" name="envoi" value="Enregistrer" />
</form>
<?php
}
?>
Maintenant j'aurais besoin d'un peu d'aide concernant javascript, afin de récupérer les données déja insérer dans la base de données quand je choisit un participant dans le menu déroulant, il faudrais récupérer tous par rapport a ce bout de code
<?php
/** fonction créant le menu déroulant des personne inscrite dans l'association*/
    $sql = "SELECT idparticipant,parnom, parprenom FROM participant ORDER BY parnom ASC ";
    $result = pg_query($Connect, $sql);
    while ($row = pg_fetch_array($result))
    {
        $id = $row["idparticipant"];
        $valeur = $row["parnom"] ." ". $row["parprenom"];
?>
          <option value="<?php echo($id); ?>"><?php echo($valeur); ?></option>
<?php
    }
?>
        </select>
      </td>
<?php
/**ici on crée autant de cases que dans la mois numeroter de 1 à la fin du mois*/
    $i=1;
    for($s = 0; $s < $num; $s++)
    {
?>
      <td><?php echo($i); ?></td>
<?php
        $i++;
    }
?>
    </tr>
    <tr>
<?php
/**ici on crée le même nombres de case mais avec récupération des valeurs inscrite dans la base de données
et on crée un champs caché avec les dates du mois*/
$recupsql = "SELECT * FROM registre WHERE regjour  >='$_SESSION[DateAnnee]-$_SESSION[DateMois]-01' AND regjour  <'$_SESSION[DateAnnee]-$_SESSION[DatePlus]-01'
AND registre.idparticipant=$id
AND registre.idlogin = 1";
$soluce = pg_query($recupsql);
$row = pg_numrows($soluce);


if ($row!=0) {
    

while ($row =pg_fetch_array($soluce)){
    

    echo "<td><input maxlength=\"1\" size=\"1\" name=\"Heure[]\" value=\"$row[regheure]\"></td>";

}
}
else {
for ($v = 1; $v < $num+1; $v++)
    {
?> 
Merci
L'expérience est la somme de toutes nos erreurs.