Problème de UPDATE

Résolu
Bonjour,
Je dois crée un petit code pour faire une gestion de présence journalier.

Je vais vous expliquer brièvement l'idée général.
Un chef de service se log, un listing avec tous ses agents en charage apparait.
Il choisit une date, en règle général la date du jour, puis il met l'état de chaque agent "présent" "malade" "congès" et pour terminer il valide et tous s'ajoute dans la BDD.
Pour cette parti pas de soucis.

Maintenant j'aimerai reprendre le même formulaire ajouter un bouton "mise à jour" et quand je saisis une date déjà dans la BDD et que je modifier l'état d'un ou plusieurs agent et bien cette mise à jour s'effectue dans la BDD mais c'est sur se point la que ça merde :'(!

Je vous joint mon formulaire, mon code de création ainsi que mon code de Mise à jour.

Formulaire
<?php
$query_users = "SELECT * FROM utilisateurs,agent WHERE utilisateurs.nservice = '1' AND agent.nservice = '1'"; // Tri la table agent sur le champs Nservice
$users = mysql_query($query_users, $dbprotect) or die(mysql_error());
$indice = 0;
?>
<form action="crea.php" method="post">
Entrez la Date <input type="button" value="Calendrier" onClick="displayCalendar(document.forms[0].date,'yyyy/mm/dd',this)">
 <input readonly type="text" name="date" value="">
<?php

    while( $result = mysql_fetch_object( $users ) )
    {
?>
<table width="495" border="1">
  <tr>
    <td>Agent:</td>
    <td><input type="text" size="20" name="agent<?php echo $indice;?>" value="<?php echo ($result->nom);?> <?php echo ($result->prenom);?>"> <select name="etat<?php echo $indice;?>">
<option>Pr&eacute;sent</option>
<option>Cong&egrave;s Annuels</option>
<option>Cong&egrave;s Exceptionnel</option>
<option>Mission</option>
<option>R&eacute;cup&eacute;ration</option>
</select></td>
 </tr>
<input type="hidden" name="nchrono<?php echo $indice;?>" value="<?php echo ($result->nchrono);?>">
<input type="hidden" name="login<?php echo $indice;?>" value="<?php echo ($result->login);?>">
<input type="hidden" name="lservice<?php echo $indice;?>" value="<?php echo ($result->lservice);?>">
<?php
$indice++;
}
?>


Code de création
<?php
    if(isset($_POST['valider']))
{

	$indice = $_POST['numIndice'];
	$valider = $_POST['valider'];
	$date = $_POST['date'];
	$login = 'gpassis';
  
	function user_exists($date)
	{
	$sql = 'SELECT `date` FROM presence_informatique WHERE date = \'' . addslashes($date) . '\' LIMIT 1';
	$res = mysql_query($sql) or die ($sql.'<br />'.mysql_error());
	return (mysql_num_rows($res) == 1);
	}
 
  
	if (user_exists($date))
	{
	echo('La date que vous avez saisie est d&eacute;j&agrave; enregistrer!<br />');
	echo('Si vous souhaitez &eacute;craser le contenu pr&eacute;c&eacute;dent veuillez cliquer sur le lien "<a href="update.php">suivant</a>"<br />');
	}
	else
	{
	if ( $indice > 0 ) {
	for ( $i=0; $i < $indice; $i++ )
	{
	$lservice=$_POST['lservice'.$i];
	$agent=$_POST['agent'.$i];
        $nchrono=$_POST['nchrono'.$i];
	$etat=$_POST['etat'.$i];
	$login=$_POST['login'.$i];
	$requete ="INSERT INTO presence_informatique (id,lservice,date,agent,nchrono,etat,login) values ('','$lservice','$date','$agent','$nchrono','$etat','$login')";
						
		mysql_query($requete);
	}
	mysql_close();
	echo "La date &agrave; bien &eacute;t&eacute; prise en charge pour les ".$indice." agent ";
	}
	}
}
else
echo "Merci de bien remplir le formulaire";
?>


code de mise à jour (mon problème)
<?php
    if(isset($_POST['valider']))
{

		$indice = $_POST['numIndice'];
		$valider = $_POST['valider'];
		$date = $_POST['date'];
  
  			if ( $indice > 0 ) {
			for ( $i=0; $i < $indice; $i++ )
		{
			$lservice=$_POST['lservice'.$i];
			$agent=$_POST['agent'.$i];
			$nchrono=$_POST['nchrono'.$i];
			$etat=$_POST['etat'.$i];
			$login=$_POST['login'.$i];
			$requete ="UPDATE presence_informatique SET etat = '$etat' WHERE date = ".$date."";
			mysql_query($requete);
		}
										}
		echo "Mise &agrave; jour effectu&eacute;<br>";
							
}
else
echo "La mise &agrave jour &agrave; rencontr&eacute un probl&egrave;me<br>";
?>
Configuration: Mac OS X
Firefox 3.0.8

12 réponses

  1. bonjour

    pas de </form> pas de bouton submit ni de bouton mise a jour ^o) ????

    lorsque tu fais une mise a jour ton code s'execute sans erreur ??

    Adns
    0
    1. en faite j'ai crée un fichier update et je le met dans l'action de mon formulaire j'essaye déjà de faire fonctionner se bout de code :)
      0
  2. Bonjour

    Ta requête met à jour TOUS les employés à la fois, car la seule condition du WHERE est la date. Il faudrait que tu ajoutes AND agent='$agent' (ou tout autre champ permettant de garantir qu'un seul employé est concerné)
    0
    1. <input type="hidden" name="numIndice" value="<?php echo $indice;?>"/>
      </table>
      <input type="submit" value="valider" name="valider">
      <input type="submit" value="Mise &agrave; jour" name="maj">
      </form>


      Voila le code oublié :)
      0
      1. $requete ="UPDATE presence_informatique SET etat = '$etat' WHERE date = ".$date." AND agent=".$agent."";


        Pas d'erreur mais aucune mise à jour dans la bdd
        0
        1. Pour la mise a jour c'est a ce niveau je pense qu'il faut que tu agisse

          remplace
          if(isset($_POST['valider']))
          par
          if(isset($_POST['maj']))

          Adns
          0
          1. $requete ="UPDATE presence_informatique SET etat = '$etat' WHERE date = ".$date." AND agent=".$agent."";
            n'est pas correct. Il te manque des ' autour de $agent. et ton ."" à la fin est totalement inutile (ou alors explique moi)
            $requete ="UPDATE presence_informatique SET etat = '$etat' WHERE date = $date AND agent='$agent'";

            Mais le champ agent est-il bien rempli ?
            0
            1. Fais un echo de ta requête, ça pourrait aider à voir si les variables que tu transmets sont bien celles que tu attends.
              Au passage, si ta variable $date n'est pas un Timestamp (i.e. un entier) il va falloir que tu le mettes entre simple quote ('), tout comme pour ta variable $agent.
              0
              1. Pour la mise a jour c'est a ce niveau je pense qu'il faut que tu agisse
                
                remplace
                if(isset($_POST['valider']))
                par
                if(isset($_POST['maj']))
                
                
                Adns 


                Je sais, mais pour le moment je le fait avec valider puisque je test juste cette partie du code après je le ferai.

                Ensuite ma variable "etat" est un menu déroulant donc forcement il y a quelque chose. Pour finir la date n'est pas un timestamp donc je vais essayé comme ceci

                $requete ="UPDATE presence_informatique SET etat = '$etat' WHERE date = $date AND agent='$agent'";
                0
                1. Essaye plutot comme ça, sinon une erreur risque d'être générée :
                  $requete ="UPDATE presence_informatique SET etat='$etat' WHERE date='$date' AND agent='$agent'";
                  0
                  1. ok alors dans ce cas fais un echo de toute test variable voir ce qu'elle contienne....

                    tu vera peut etre une erreur

                    Adns
                    0
                    1. merci beaucoup c'est bien un soucis avec les "" :)

                      J'ai mis ceci

                      $requete ="UPDATE presence_informatique SET etat = '$etat' WHERE date = '$date' AND agent='$agent'";
                      0
                      1. Content d'avoir pu t'aider ;)

                        Pense à marquer le post comme résolu si tout va bien
                        0