Additions entre colones

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

J'ai la table suivante :

J’aimerais additionner NavMaj avec Nav et placer le résultat dans Nav. Après tout mes essaies, je n'ai aucun résultats. J'ai fait ça :

Quelqu’un aurait une idée svp ?

Édité par U2Vi

+0 -0

Cette réponse a aidé l’auteur du sujet

Bonjour,

Bonjour :)

J’aimerais additionner NavMaj avec Nav et placer le résultat dans Nav. Après tout mes essaies, je n'ai aucun résultats.

TheLumMys

placer le résultat dans Nav

-> Tu veux donc faire une mise à jour de toutes tes entrées de la table
-> Utilise un "UPDATE" sans close "WHERE"

additionner NavMaj avec Nav

-> Si ce sont des types nombres tout les deux, un "NavMaj + Nav" suffît

Si tu as des problèmes à construire ta requête ou que je n'ai pas été clair, n'hésite pas à demander :)

Édité par SeeoX

+0 -0
Auteur du sujet

Re,

Je me suis aperçu que je m'étais mal exprimée. En réalité, j'avais besoin de la close car je voulais seulement additionné 2 cellules d'une ligne.

Ce n'est pas grave, ta réponse ma bien aidée ("Si ce sont des types nombres tout les deux" et "Utilise un UPDATE").

C'est mieux comme ça :) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  ///////////////////////////////////////////////////////////////////////// 

                      $bdd = $bdd2->prepare('UPDATE membres SET grade = :grade, statue = :statue, NavMAJ = :NavMAJ, TerMAJ = :TerMAJ WHERE nom = :nom');
                      $bdd->execute([
                                  ':grade' => $_POST['grade'],
                                  ':statue' => $_POST['statue'],
                                  ':NavMAJ' => $_POST['navmaj'],
                                  ':TerMAJ' => $_POST['termaj'],
                                  ':nom' => $_POST['nom']
                                    ]);       

                      $nom = $_POST['nom'];     

                      $reponse = $bdd2->prepare('SELECT * FROM membres WHERE nom = :nom');
                      $reponse->execute(array('nom' => $nom));
                      while ($donnees = $reponse->fetch())
                         {
                            $Navsomme = $donnees['Nav'] + $donnees['NavMAJ'];
                            $Tersomme = $donnees['Ter'] + $donnees['TerMAJ'];
                            $totalnt = $Tersomme + $Navsomme;
                         }
                      $bdd = $bdd2->prepare('UPDATE membres SET unites = :unites, Nav = :Nav, Ter = :Ter, NavMAJ = 0, TerMAJ = 0 WHERE nom = :nom');
                      $bdd->execute([
                                  ':unites' => $totalnt,
                                  ':Nav' => $Navsomme,
                                  ':Ter' => $Tersomme,
                                  ':nom' => $_POST['nom']
                                    ]);   
                      $reponse->closeCursor();

  ////////////////////////////////////////////////////////////////////////

Édité par U2Vi

+0 -0

Cette réponse a aidé l’auteur du sujet

Alors, il me semble qu'il est possible de faire l'intégralité de ton code en une seule requête SQL :) Et d'un point de vue clarté et perfomance, ce sera mieux (selon moi)

Je reprends ton code

1
2
3
4
5
6
7
8
$bdd = $bdd2->prepare('UPDATE membres SET grade = :grade, statue = :statue, NavMAJ = :NavMAJ, TerMAJ = :TerMAJ WHERE nom = :nom');
$bdd->execute([
    ':grade' => $_POST['grade'],
    ':statue' => $_POST['statue'],
    ':NavMAJ' => $_POST['navmaj'],
    ':TerMAJ' => $_POST['termaj'],
    ':nom' => $_POST['nom']
]);       

Tu mets à jour ta base de données avec les données brutes de ton formulaire.

1
2
3
4
5
6
7
8
$nom = $_POST['nom'];     
$reponse = $bdd2->prepare('SELECT * FROM membres WHERE nom = :nom');
$reponse->execute(array('nom' => $nom));
while ($donnees = $reponse->fetch()){
    $Navsomme = $donnees['Nav'] + $donnees['NavMAJ'];
    $Tersomme = $donnees['Ter'] + $donnees['TerMAJ'];
    $totalnt = $Tersomme + $Navsomme;
}

Tu récupères les données que tu viens de modifier.
Pourquoi les récupérer? Tu les connais déjà, tu viens de les mettre à jour à partir des données de $_POST.

1
2
3
4
5
6
7
8
$bdd = $bdd2->prepare('UPDATE membres SET unites = :unites, Nav = :Nav, Ter = :Ter, NavMAJ = 0, TerMAJ = 0 WHERE nom = :nom');
$bdd->execute([
    ':unites' => $totalnt,
    ':Nav' => $Navsomme,
    ':Ter' => $Tersomme,
    ':nom' => $_POST['nom']
]);
    $reponse->closeCursor();

TheLumMys

Tu mets de nouveau à jour ta table 'membres'.
Tu peux directement tout faire avec un seul UPDATE ;)

Exemple

1
2
3
4
5
$bdd = $bdd2->prepare('UPDATE maTable SET maColonne = :valeur WHERE monID = :id');
$bdd->execute([
    ':valeur' => $_POST['valeur1'] + $_POST['valeur2'],
    ':id' => $_POST['id']
]);

Et si tu préfères, tu peux mettre l'addition dans la requête directement

1
2
3
4
5
6
$bdd = $bdd2->prepare('UPDATE maTable SET maColonne = :valeur1 + :valeur2 WHERE monID = :id');
$bdd->execute([
    ':valeur1' => $_POST['valeur1'],
    ':valeur2' => $_POST['valeur2'],
    ':id' => $_POST['id']
]);
+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte