Modifier une valeur de la DB en additionnant le contenu d'une variable. [Résolu]

Signaler
Messages postés
72
Date d'inscription
jeudi 19 mars 2020
Statut
Membre
Dernière intervention
12 janvier 2021
-
Messages postés
72
Date d'inscription
jeudi 19 mars 2020
Statut
Membre
Dernière intervention
12 janvier 2021
-
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>";
  

4 réponses

Messages postés
31018
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
3 177
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

Messages postés
72
Date d'inscription
jeudi 19 mars 2020
Statut
Membre
Dernière intervention
12 janvier 2021

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
Messages postés
31018
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
3 177
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 < > )
Messages postés
72
Date d'inscription
jeudi 19 mars 2020
Statut
Membre
Dernière intervention
12 janvier 2021

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
Messages postés
31018
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
3 177
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();
Messages postés
72
Date d'inscription
jeudi 19 mars 2020
Statut
Membre
Dernière intervention
12 janvier 2021

En effet...
Tous les automatismes ne sont pas encore acquis...

Merci, et meilleurs voeux 2021!!!
JCT