UPDATE MySQL avec array

Résolu
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -
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. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      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. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      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. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       

      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. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      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. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention  
       
      Ma reponse ne t'a pas aidée ??
      0