Modifier une valeur de la DB en additionnant le contenu d'une variable.

Résolu/Fermé
JC_8280 Messages postés 78 Date d'inscription jeudi 19 mars 2020 Statut Membre Dernière intervention 7 février 2021 - 30 déc. 2020 à 02:43
JC_8280 Messages postés 78 Date d'inscription jeudi 19 mars 2020 Statut Membre Dernière intervention 7 février 2021 - 30 déc. 2020 à 11:05
Bonjour,

Je souhaite modifier une valeur de la base de données en additionnant le contenu d'une variable que je vient de transférer par un formulaire.

J'ai imaginé 2 solutions mais je coince sur chacune.
1°) Faire un calcul dans la requête SQL, mais ça n'a pas l'air de marcher
2°) Récupérer la valeur de la base de données, faire mon calcul, et renvoyer le résultat dans la table. Mais il y' a encore des choses que je n'ai pas bien compris pour récupérer la valeur, étant donné que je récupère un array, je ne sais pas l'additionner.

Mon problème est sur la deuxieme requete à partir de la ligne 41.

Merci d'avance pour votre aide.


Configuration: Windows / Firefox 84.0



<?php   
               
try{     
        
    function cleanData($dataToClean){
        $dataToClean = trim($dataToClean);
        $dataToClean = stripslashes($dataToClean);
        $dataCleaned = htmlspecialchars($dataToClean);
        return $dataCleaned;
    }
                                      
    $codeMag = cleanData($_POST["codeMag_21"]);
    $qteSortie = cleanData($_POST["qteSortie_21"]);
    $operateur = cleanData($_POST["codeOP_21"]);
    $gamme = cleanData($_POST["gamme_21"]);
    date_default_timezone_set("Europe/Paris");
    $date1 = date("Y-m-d H:i:s");
    //$date2 = date("U");

//--------------------------------------------------------------------------//
//connexion à la bdd "hydro"
//--------------------------------------------------------------------------//
require_once "../cnxbdd.php";

// MISE A JOUR TABLE "mvt_magasin"

    $requete = $connexion->prepare("INSERT INTO mvt_magasin(CODE_MAGASIN,OPERATEUR,
    GAMME,QTE_SORTIE,DATE_1)
    VALUES(:CODE_MAGASIN,:OPERATEUR,:GAMME,:QTE_SORTIE,:DATE_1)"
    );

    $requete->bindParam(':CODE_MAGASIN', $codeMag);
    $requete->bindParam(':OPERATEUR', $operateur);
    $requete->bindParam(':GAMME', $gamme);
    $requete->bindParam(':QTE_SORTIE', $qteSortie);
    $requete->bindParam(':DATE_1', $date1);

    $requete-> execute();


// MISE A JOUR STOCK DANS TABLE "cutting_tools_01"
    $sql2 = "UPDATE cutting_tools_01 SET STOCK STOCK.value -= $qteSortie WHERE REF_MAG = $codeMag";
    $requete2 = $connexion->prepare($sql2);

//$requete2 = $connexion->prepare("UPDATE `cutting_tools_01` SET `STOCK` = STOCK-$qteSortie WHERE 'CODE_MAGASIN' = $codeMag"
/*
$requete2 = $connexion->prepare("SELECT STOCK FROM cutting_tools_01 WHERE REF_MAG = $codeMag"
);

$requete2->execute();
$oldStock = $requete2->fetchAll(PDO::FETCH_ASSOC);
$newStock = $oldStock - $qteSortie;

echo $oldStock ;
*/
}        
                
catch(PDOException $e){
    echo 'ECHEC  : ' .$e->getMessage();
}                           

//echo "<script language='javascript'>window.close()</script>";
  

A voir également:

4 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
30 déc. 2020 à 08:21
Bonjour

Avant tout, une requête ça se teste DIRECTEMENT dans la bdd (via phpmyadmin par exemple) AVANT d'essayer de l'utiliser dans son code php...

Je pense que tu as une erreur... Le mot STOCK est ecrit deux fois...
SET STOCK STOCK.value

0
JC_8280 Messages postés 78 Date d'inscription jeudi 19 mars 2020 Statut Membre Dernière intervention 7 février 2021
30 déc. 2020 à 09:45
Oui, mais j'ai beau le tourner dans tout les sens, ça veut pas le faire.
Merci pour le conseil de test dans la bdd, je viens de le découvrir, mais malgré tout ça n'a pas résolu mon problème.
Une autre idée?

JCT
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 30 déc. 2020 à 09:53
Donc,

En partant du principe que désormais tu testes bien ta requête DIRECTEMENT dans ta bdd ....
Quelle requête as tu écrits ... et quel message d'erreur obtiens tu ?
Car si tu n'as rien changé.. tu as forcément une erreur.....


A noter que -= en mysql.. ça n'existe pas me semble t"il .....

La "bonne" requête serait du genre

UPDATE cutting_tools_01 SET <champStock> = <champStock> - <valeuuraretirer>
WHERE REF_MAG = '<unevraierefdetonchoixpourlestests>'


En gros ( mais ne connaissant pas le nom exact de tes colonnes... =
UPDATE cutting_tools_01 SET STOCK =  STOCK -5
WHERE REF_MAG = '<unevraierefdetonchoixpourlestests>'


*** : <xxxxx> ... à remplacer par des vraies valeurs ( sans les < > )
0
JC_8280 Messages postés 78 Date d'inscription jeudi 19 mars 2020 Statut Membre Dernière intervention 7 février 2021
30 déc. 2020 à 10:38
Voici ma requête dans la base de données. Et ça marche quand je process dans phpMyAdmin.

Mais ça ne fonctionne pas dans mon programme. Je n'ai pas de message d'alarme mais la base de données n'a pas l'air de se mettre à jour.






Mon code est :

<?php   
               
try{     
        
    function cleanData($dataToClean){
        $dataToClean = trim($dataToClean);
        $dataToClean = stripslashes($dataToClean);
        $dataCleaned = htmlspecialchars($dataToClean);
        return $dataCleaned;
    }
                                      
    $codeMag = cleanData($_POST["codeMag_21"]);
    $qteSortie = cleanData($_POST["qteSortie_21"]);
    $operateur = cleanData($_POST["codeOP_21"]);
    $gamme = cleanData($_POST["gamme_21"]);
    date_default_timezone_set("Europe/Paris");
    $date1 = date("Y-m-d H:i:s");
    //$date2 = date("U");

//--------------------------------------------------------------------------//
//connexion à la bdd "hydro"
//--------------------------------------------------------------------------//
require_once "../cnxbdd.php";

// MISE A JOUR TABLE "mvt_magasin"

    $requete = $connexion->prepare("INSERT INTO mvt_magasin(CODE_MAGASIN,OPERATEUR,
    GAMME,QTE_SORTIE,DATE_1)
    VALUES(:CODE_MAGASIN,:OPERATEUR,:GAMME,:QTE_SORTIE,:DATE_1)"
    );

    $requete->bindParam(':CODE_MAGASIN', $codeMag);
    $requete->bindParam(':OPERATEUR', $operateur);
    $requete->bindParam(':GAMME', $gamme);
    $requete->bindParam(':QTE_SORTIE', $qteSortie);
    $requete->bindParam(':DATE_1', $date1);

    $requete-> execute();


// MISE A JOUR STOCK DANS TABLE "cutting_tools_01"
    $sql2 = "UPDATE cutting_tools_01 SET STOCK = STOCK - $qteSortie WHERE REF_MAG = $codeMag";
    $requete2 = $connexion->prepare($sql2);

//$requete2 = $connexion->prepare("UPDATE `cutting_tools_01` SET `STOCK` = STOCK-$qteSortie WHERE 'CODE_MAGASIN' = $codeMag"
/*

UPDATE `cutting_tools_01` SET `STOCK`= `STOCK`- 5 WHERE `REF_MAG` = 45001
$requete2 = $connexion->prepare("SELECT STOCK FROM cutting_tools_01 WHERE REF_MAG = $codeMag"
);

$requete2->execute();
$oldStock = $requete2->fetchAll(PDO::FETCH_ASSOC);
$newStock = $oldStock - $qteSortie;
*/


}        
                
catch(PDOException $e){
    echo 'ECHEC  : ' .$e->getMessage();
}                           

//echo "<script language='javascript'>window.close()</script>";
  



JCT
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
30 déc. 2020 à 10:54
Si tu oublies la moitié du code, normal que ça ne marche pas

//MISE A JOUR STOCK DANS TABLE "cutting_tools_01"
$sql = "UPDATE cutting_tools_01 SET STOCK = STOCK - :QTE_SORTIE WHERE REF_MAG = :CODE_MAGASIN";
$requete = $connexion->prepare($sql);
$requete->bindParam(':CODE_MAGASIN', $codeMag);
$requete->bindParam(':QTE_SORTIE', $qteSortie);
$requete-> execute();
0
JC_8280 Messages postés 78 Date d'inscription jeudi 19 mars 2020 Statut Membre Dernière intervention 7 février 2021
30 déc. 2020 à 11:05
En effet...
Tous les automatismes ne sont pas encore acquis...

Merci, et meilleurs voeux 2021!!!
JCT
0