UPDATE MySQL avec array

Résolu
Bonjour à tous !

Je sollicite votre aide sur un UPDATE qui me joue des tours...
$Fr_Valider = "1";
$Fr_Pseudo = $_SESSION["Connexion"]["user_log"]['Pseudo'];
$array_lib = !empty($_POST['Fr_Libelle']) ? $_POST['Fr_Libelle'] : NULL;
$array_qte = !empty($_POST['Fr_Quantite']) ? $_POST['Fr_Quantite'] : 0;
$array_unt = !empty($_POST['Fr_PrixUnit']) ? $_POST['Fr_PrixUnit'] : 0;
$array_tot = !empty($_POST['Fr_PrixTotal']) ? $_POST['Fr_PrixTotal'] : 0;
$FR_PDO = $pdo->prepare("UPDATE tb_user_voucher_test SET Libelle=:array_lib, Quantite=:array_qte, PrixUnit=:array_unt, PrixTotal=:array_tot, Valider=:Fr_Valider WHERE Pseudo = '" . $Fr_Pseudo . "' ");

foreach($array_lib as $key => $value)
	{
	if ($array_qte[$key] <> 0)
		{
		$FR_PDO->bindParam(":array_lib", $value);
		$FR_PDO->bindParam(":array_qte", $array_qte[$key]);
		$FR_PDO->bindParam(":array_unt", $array_unt[$key]);
		$FR_PDO->bindParam(":array_tot", $array_tot[$key]);
		$FR_PDO->bindParam(":Fr_Valider", $Fr_Valider);
		$FR_PDO->execute();
		}
	}


Selon mes tests, il me duplique la valeur du dernier enregistrement et update tout les autres de cette même valeur...

Je fais suite au sujet traité par Jordane45 : https://forums.commentcamarche.net/forum/affich-34705260-enregistrement-de-tableau-avec-id-input-dans-mysql#20

Avez-vous idée svp ?
Merci de votre aide

1 réponse

  1. Modérateur
    Bonjour,

    Comme indiqué dans ma première réponse de ton autre sujet :
    Déjà.. commence par appliquer ceci :
    https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

    Je ne vois pas... dans le code que tu nous présentes... le bloc TRY/CATCH entourant ta requête.
    C'est un minimum à mettre en place...

    Ensuite... c'est normal qu'il UPDATE toujours les mêmes lignes ... vu que ta condition ne change pas....
     WHERE Pseudo = '" . $Fr_Pseudo . "' 
    


    Donc à chaque tour de boucle ... il met à jour les lignes (en écrasant les précédentes valeurs...) qui ont le pseudo passé dans ton where....

    0
    1. Modérateur
      Pour que ton update fonctionne il faut utiliser DEUX conditions dans ton where
      le pseudo ET article

      La souci avec cette méthode.. c'est que si un article n'est plus présent dans ton formulaire html.... il ne sera pas mis à jour dans la bdd et restera présent dans ta table.

      La bonne méthode serait alors de :
      - Supprimer TOUTES les lignes dont le pseudo est : $Fr_Pseudo
      - Utiliser le code de ta précédente question pour INSERER les nouvelles lignes
      0
    2. Le TRAY/CATCH est géré dans le fichier Config.php

      Et oui tu as raison pour le Pseudo (désolé d'y pas avoir pensé), mais j'ai essayé de récupérer le Id mais je suis bloqué sur la condition WHERE (vu que l'envoi n'est pas en boucle)...
      0
    3. Modérateur

      Le TRAY/CATCH est géré dans le fichier Config.php

      Tu es la deuxième personne à me répondre ça ....
      Et tu vas être la deuxième à qui je répond :
      NON ! ça ne suffit pas ! Tu n'as pas lu correctement le lien que je t'ai donné !!!!!

      il faut placer CHAQUE requête dans un bloc TRY/CATCH
      0
    4. Je corrige tout le site alors :s punaise ca me fera des nuits :'(
      mais en attendant je fais comment pour l'update :s ?
      0
    5. Modérateur
      @SinistrusMa reponse ne t'a pas aidée ??
      0