modifier 2 tables en meme temps

Petit nouveau ! | 8 Messages

09 juin 2006, 15:27

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]

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

09 juin 2006, 15:37

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 ?

Petit nouveau ! | 8 Messages

09 juin 2006, 15:41

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?
Mieux vaut avoir des remords que des regrets

Mammouth du PHP | 536 Messages

09 juin 2006, 15:41

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)
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

09 juin 2006, 15:47

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 ?"

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

09 juin 2006, 15:48

Et pour que ce soit plus facile, commence par élaborer une requête qui fonctionne directement sur MySQL, avec phpMyAdmin par exemple...

Petit nouveau ! | 8 Messages

09 juin 2006, 15:56

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
Mieux vaut avoir des remords que des regrets

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

09 juin 2006, 16:46

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

Eléphant du PHP | 140 Messages

09 juin 2006, 16:47

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...

Petit nouveau ! | 8 Messages

09 juin 2006, 16:56

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?
Mieux vaut avoir des remords que des regrets

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

09 juin 2006, 17:03

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

Petit nouveau ! | 8 Messages

09 juin 2006, 17:27

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
Mieux vaut avoir des remords que des regrets

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

10 juin 2006, 15:20

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 ??

Petit nouveau ! | 8 Messages

12 juin 2006, 17:03

oui
j'ai fait des echo pour voir
en fait je le suis apercue qu'on ne rentre pas dans la condition
Mieux vaut avoir des remords que des regrets

Petit nouveau ! | 8 Messages

13 juin 2006, 14:30

c'est bon c'est résolu
Merci de votre aide
Mieux vaut avoir des remords que des regrets