Page 1 sur 1

modifier 2 tables en meme temps

Posté : 09 juin 2006, 15:27
par popline7
Bonjour,je voudrais modifier 2 tables de ma base de données avec une condition en plus.
Voici le code de la page php ou on peut accepter de modifier la base:
<TR><td align=middle>Mr <?php echo $donnees['Salarie_Nom']; ?></td>
  <td align=middle><?php echo $donnees['Conge_DateDeb']; ?></td>
 <td align=middle><?php echo $donnees['Conge_DateFin'];?></td>
 <td align=middle><? echo $donnees['Conge_Type'];?></td>
 <td align=middle><? echo $donnees['Salarie_NbRTT_Poss_Mois'] - $donnees['Salarie_NbRTT_Mois'];?></td>
 <td align=middle><FORM action=ValideConge.php method=post>
      <P align=center>
          <SELECT name=ValiderConge> 
          <OPTION value=validé selected>Accepter</OPTION> 
          <OPTION value=Refusé>Refuser</OPTION>
          </SELECT>
          <input type="hidden" name="Conge_NbJour" value="<?php echo $donnees['Conge_NbJour']; ?>" />
          <input type="hidden" name="Conge_Type" value="<?php echo $donnees['Conge_Type']; ?>" />
      <input type="hidden" name="Conge_Id" value="<?php echo $donnees['Conge_Id']; ?>" />
<INPUT type=submit value="Valider"></P>
      <P></P></FORM></td></SELECT>
Et ici le code qui récupere l'état et qui modifie la base
$Etat = $_POST['ValiderConge'];
$congeId = strtolower(addslashes($_POST['Conge_Id']));
$Type = strtolower(addslashes($_POST['Conge_Type']));
$NbJour = strtolower(addslashes($_POST['Conge_NbJour']));
$req = "UPDATE conge 
               SET Conge_Etat='$Etat' 
                               WHERE Conge_Id = '$congeId'";

  $result = mysql_query($req) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

if ($Type = 'RTT' )
        {
                $rqt = "UPDATE salarie SET Salarie_NbRTT_Mois = Salarie_NbRTT_Mois + '$NbJour'
                              WHERE Conge_Id = '$congeId'";
                $res = mysql_query($rqt) ;
                
        }
        
        
else if ($Type = 'Conge' )
        {
                $rqt = "UPDATE salarie SET Salarie_NbConge_Mois = Salarie_NbConge_Mois + '$NbJour'
                              WHERE Conge_Id = '$congeId'";
                $res = mysql_query($rqt) ;
        }
J'explique ce que je veux: je voudrais que lorsque l'on accepte une demande,le nombre de congé pris dans le mois(Conge_NbRTT_Mois ou Conge_NBConge_Mois) se mette à jour en utilisant le champ duree qui indique le nombre de jours de la demande

j'ai aussi essayé avec ca:
$Etat = $_POST['ValiderConge'];
$congeId = strtolower(addslashes($_POST['Conge_Id']));
$Type = strtolower(addslashes($_POST['Conge_Type']));
$NbJour = strtolower(addslashes($_POST['Conge_NbJour']));
$req = "UPDATE conge, salarie
               SET Conge_Etat='$Etat', Salarie_NbRTT_Mois = Salarie_NbRTT_Mois + '$NbJour'
                               WHERE Conge_Id = '$congeId' and conge.Conge_Salarie_Email=Salarie.Salarie_Email";

  $result = mysql_query($req) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
Meme si vous n'arrivez pas a changer mon code pouvez vous me dire si il est possiible de modifier des tables différentes en meme temps?

Merci de votre aide et n'hésitez pas a me demander d'autres explications si ce n'est pas clair![/quote]

Posté : 09 juin 2006, 15:37
par ouckileou
Salut,

ça c'est un problème MySQL avant tout, le PHP n'est pas utile voire encombrant
Donc tu devrais d'abord faire un modèle de requête qui fonctionne et ensuite l'intégrer au PHP

Pour ta question, as-tu regardé dans la documentation ? c'est le premier endroit où chercher pour avoir une réponse...

http://dev.mysql.com/doc/refman/5.0/fr/update.html
j'ai aussi essayé avec ca:
Oui c'est très bien d'essayer, et ça donne quoi ?

Posté : 09 juin 2006, 15:41
par popline7
j'ai bien regardé la documentation mais je ne vois pas mon erreur!
Je remarque que la 1ere solution ne marche pas mais la 2eme du point de vu de la syntaxe sql est correcte.non?

Posté : 09 juin 2006, 15:41
par béka
j'ai un peu le meme probleme ici sauf que je veux supprimer des champs de plusieurs tables. Tu peux t'en inspirer (mes requetes sont bonnes, le probleme vient d'ailleur moi)

Posté : 09 juin 2006, 15:47
par ouckileou
j'ai bien regardé la documentation mais je ne vois pas mon erreur!
Moi non plus... quel est le message d'erreur ?? Quel est le problème ??
Je remarque que la 1ere solution ne marche pas mais la 2eme du point de vu de la syntaxe sql est correcte.non?
Qu'est-ce que j'en sais, on ne voit pas le code SQL exécuté... je parle de celui qui est généré et envoyé à mysql_query()
Et si la syntaxe est mauvaise il doit te le dire

Dire "ça ne marche pas" n'avance à rien si tu ne donnes pas toutes les infos

C'est bien pour ça que j'ai demandé "qu'est-ce que ça donne ?"

Posté : 09 juin 2006, 15:48
par ouckileou
Et pour que ce soit plus facile, commence par élaborer une requête qui fonctionne directement sur MySQL, avec phpMyAdmin par exemple...

Posté : 09 juin 2006, 15:56
par popline7
Il n'y a aucun message d'erreur.
j'arrive sur la page vos infos onté été ajoutés sans problème mais qquand je vais voir sur my SQL control center je remarque que la table conge a bien été modifié(en cours est devenu validé)mais dans la table salarie il n'y a aucun changement,NbRTT_Mois reste toujours a 0

Posté : 09 juin 2006, 16:46
par ouckileou
Tu as affiché le code SQL de ta requête ? Tu es sûr que $NbJour n'est pas vide

C'est un entier, donc pas besoin de quote autour

Et teste direct dans MySQL avec des valeurs d'essais jusqu'à ce que tu ais une requête qui marche

Posté : 09 juin 2006, 16:47
par Vorkosigan
Il n'y a aucun message d'erreur.
j'arrive sur la page vos infos onté été ajoutés sans problème mais qquand je vais voir sur my SQL control center je remarque que la table conge a bien été modifié(en cours est devenu validé)mais dans la table salarie il n'y a aucun changement,NbRTT_Mois reste toujours a 0
Ce que veut dire le monsieur c'est qu'il faut que tu recuperes l'erreur ou le SQL genere par ta seconde requete...
D'ailleurs, si j'etais toi je tracerais aussi en PHP pour voir si tu passes bien dans le code en question...

Posté : 09 juin 2006, 16:56
par popline7
oui $Nb_jour n'est pas vide
J'ai essayé en enlevant les quotes il y a toujours le meme problème
Comment tracer sur php?

Posté : 09 juin 2006, 17:03
par ouckileou
Comment tracer sur php?
Tu le fais déjà avec ça :
or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
S'il n'y a pas d'erreurs c'est peut-être tout simplement que ta requête est malfoutue...

Donc, pour la troisième fois, tu prends un phpMyAdmin, et tu fais des essais jusqu'à ce que ça marche, directement sur la base et sans l'intermédiaire de PHP

Posté : 09 juin 2006, 17:27
par popline7
je ne peux pas mettre phpmyadmin,je travaille sur MySQL control center et il n'y a pas d'erreur la requete marche en utilisant simplement sql

Posté : 10 juin 2006, 15:20
par ouckileou
phpMyAdmin était un exemple...

Tu veux donc dire que la même requête marche quand elle est exécutée directement sur la base, mais pas quand elle l'est par PHP ??

Posté : 12 juin 2006, 17:03
par popline7
oui
j'ai fait des echo pour voir
en fait je le suis apercue qu'on ne rentre pas dans la condition

Posté : 13 juin 2006, 14:30
par popline7
c'est bon c'est résolu
Merci de votre aide