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

A voir également:

1 réponse

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

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