UPDATE dans array() qui ne fonctionne pas [Résolu]

Messages postés
984
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2019
- - Dernière réponse : Sinistrus
Messages postés
984
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2019
- 15 juin 2019 à 12:51
Bonjour,

J'essaie de faire un update d'un array() mais c'est le même dernier enregistrement qui se répète sur toutes les lignes, vous pouvez m'aider svp ?
$SLCT = !empty($_POST['Fr_Selection']) ? $_POST['Fr_Selection'] : array();
 
try{
  foreach($SLCT as $key => $value){
  $UP = $pdo->prepare("UPDATE tb_jeu_can_R SET $JEU=:SLCT WHERE Pseudo = '".$Pseudo."'");
    $UP->bindParam(":SLCT", $value);
    $UP->execute();
  }
} catch (PDOException $e) {echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";}
	
print_r($_POST);
 
//Résultat du $_post
Array ( [Fr_Selection] => Array ( [0] => CIV [1] => CMR [2] => BDI [3] => EGY [4] => GIN [5] => GNB [6] => MDG [7] => NAM ) [Btn_Envoyer] => )

Merci d'avance

Configuration: Windows / Chrome 74.0.3729.169
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
8730
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2019
436
1
Merci
bonjour, je suis étonné de lire que tu fais une boucle avec plusieurs UPDATE, mais que le WHERE soit à chaque fois identique.
d'où vient $Pseudo? à quoi sert $key?
par ailleurs, tu écris vouloir faire un update d'un array(), et il me semble que tu mets à jour des données dans une base de données SQL.
je ne comprends pas bien "le même dernier enregistrement qui se répète sur toutes les lignes,": peux-tu donner un exemple?

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 64120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de yg_be
Messages postés
8730
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2019
436
1
Merci
Je comprends un peu mieux ce que tu veux réaliser.
Je pense que la structure des tables n'est pas optimale. Comme je ne sais pas ce que tu essaies de représenter, ni ce que tu vas faire avec les données il m'est difficile de te conseiller.
Cependant, je pense à différentes options:
1) garder la structure, et faire un INSERT également pour data_2
2) utiliser 2 tables différentes, une avec Pseudo, Data_1, l'autre avec Pseudo, Data_2
3) ajouter un numéro unique à la table, qui deviendrait Pseudo, num, Data_1, Data_2
4) insérer simultanément Data_1 et Data_2
5) changer la table, et avoir des colonnes pseudo, jeu, data. ainsi:

Pseudo | Jeu | Data
-------------------------------
JOHN | 2 | CMR
JOHN | 2 | CIV
JOHN | 2 | EGY
JOHN | 2 | GHA
JOHN | 2 | GIN
JOHN | 2 | GNB
JOHN | 1 | BDI
JOHN | 1 | CMR
JOHN | 1 | CIV
JOHN | 1 | EGY
JOHN | 1 | GIN
JOHN | 1 | GNB

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 64120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de yg_be
Messages postés
984
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2019
13
0
Merci
Merci yg_be de t'intéresser à mon poste.

Voici les données réelles et comment il se comporte.

Les données sont générés et testés. Je les mets en variables car pseudo change selon l'utilisateur et $JEU varie selon la colonne a mettre à jour :
$Pseudo = "JOHN";
$JEU = "Data_2";


Valeur réels a ajouter (8 lignes) :
CMR
CIV
EGY
GHA
GIN
GNB
MDG
KEN


Récupérés depuis des <option> générés dans ce select :
<select name="Fr_Selection[]" multiple></select>


Table
tb_jeu_can_R
à mettre à jour (16 lignes existent déjà) :
Pseudo  | Data_1   | Data_2 
-------------------------------
JOHN	| BDI	   | KEN
JOHN	| CMR	   | KEN
JOHN	| CIV	   | KEN
JOHN	| EGY	   | KEN
JOHN	| GIN	   | KEN
JOHN	| GNB	   | KEN
JOHN	| KEN	   | KEN
JOHN	| MDG	   | KEN
JOHN	| MAR	   | KEN
JOHN	| MLI	   | KEN
JOHN	| NAM	   | KEN
JOHN	| MRT	   | KEN
JOHN	| NGA	   | KEN
JOHN	| UGA	   | KEN
JOHN	| COG	   | KEN
JOHN	| GHA	   | KEN


Résultat souhaité :
Pseudo  | Data_1   | Data_2 
-------------------------------
JOHN	| BDI	   | CMR
JOHN	| CMR	   | CIV
JOHN	| CIV	   | EGY
JOHN	| EGY	   | GHA
JOHN	| GIN	   | GIN
JOHN	| GNB	   | GNB
JOHN	| KEN	   | MDG
JOHN	| MDG	   | KEN
JOHN	| MAR	   | 
JOHN	| MLI	   | 
JOHN	| NAM	   | 
JOHN	| MRT	   | 
JOHN	| NGA	   | 
JOHN	| UGA	   | 
JOHN	| COG	   | 
JOHN	| GHA	   | 


HTML :
<select name="Fr_Selection[]" multiple="">
<option value="CMR">CMR</option>
<option value="CIV">CIV</option>
<option value="EGY">EGY</option>
<option value="GHA">GHA</option>
<option value="GIN">GIN</option>
<option value="GNB">GNB</option>
<option value="MDG">MDG</option>
<option value="KEN">KEN</option>
</select>


Je ne sais pas s'il manque autre chose mais voilà.
Sinistrus
Messages postés
984
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2019
13 -
J'ai testé l'INSERT et il fonctionne bien, mais le UPDATE a le même problème.
Voici le code de l'INSERT :
	try{foreach($SLCT as $i) {
	$AD = $pdo->prepare ("INSERT INTO tb_jeu_can_R (Pseudo, $JEU) VALUES (:Pseudo, :$JEU)");
	$AD ->execute(array("Pseudo" => $Pseudo, $JEU => $i));
	}
	} catch (PDOException $e) {echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";}
Commenter la réponse de Sinistrus
Messages postés
984
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2019
13
0
Merci
J'ai omis de mettre à jour Data_2 selon Data_1
Merci de ton aide yg_be !
try{
  $UP = $pdo->prepare("UPDATE tb_jeu_can_R SET $JEU=:$JEU WHERE Pseudo='".$Pseudo."' AND Data_1=:$JEU");
  foreach($SLCT as $i){
  $UP->execute(array($JEU => $i));
  }
} catch (PDOException $e) {echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";}


Ainsi il met à jour uniquement là où le pseudo existe les données selon Data_1 :
Pseudo  | Data_1   | Data_2 
-------------------------------
JOHN	| BDI	   | 
JOHN	| CMR	   | CMR
JOHN	| CIV	   | CIV
JOHN	| EGY	   | EGY
JOHN	| GIN	   | GIN
JOHN	| GNB	   | GNB
JOHN	| KEN	   | KEN
JOHN	| MDG	   | MDG
JOHN	| MAR	   | 
JOHN	| MLI	   | 
JOHN	| NAM	   | 
JOHN	| MRT	   | 
JOHN	| NGA	   | 
JOHN	| UGA	   | 
JOHN	| COG	   | 
JOHN	| GHA	   | GHA
Commenter la réponse de Sinistrus