Bonjour tout le monde , j'espere que vous vous portez bien, voilà j'ai un problème avec php et je ne sais vraiment pas ce que je fais mal,voilà j'ai un
tableau de différentes populations et je dois faire des enregistrements dans ma base de données en fonction du nombres d'individus.
//pour déterminer le nombre d'individus de chaque population je fais une premiere requete qui est:
$sel=$pdo->prepare("SELECT * FROM grand_ensemble WHERE groupe = ? and age=?");
$sel->setFetchMode(PDO::FETCH_ASSOC);
$sel->execute (array(1,40));
$tab=$sel->fetchAll();
$population1=count($tab);
echo $population1;//il ya 7 groupes alors je fais la même requete 7fois et je mets toutes les populations dans un même tableau associatif, à la fin j'obtiens
$tableau_des_populations=[
1=>$population1,
2=>$population2,
3=>$population3,
4=>$population4,
5=>$population5,
6=>$population6,
7=>$population7,
];// vu que je souhaite classer les populations toujours de la plus petite en terme de //nombre d'individus vers la plus grande j'utilise la fonction asort();
asort($tableau_des_populations); //ensuite je récupère la clé de la valeur ayant le plus //petit nombre d'individus en faisant une boucle qui s'arrête dès le premier élément
$i = 0;
foreach($tableau_des_populations as $Groupe =>$nombre_individus) {
if($i==1) break;
$i++;
$le_plus_petit_groupe=$Groupe;//jusqu'ici tout fonctionne bien,mais à présent que je //souhaite faire mon enregistrement dans ma base de données en fontion de Groupe, rien ne //fonctionne ,voici ma requête:
if($le_plus_petit_groupe=1){
$req=$pdo->prepare("SELECT liens FROM images_groupe1 ORDER BY id DESC ");
$req->execute();
$req->setFetchMode(PDO::FETCH_ASSOC);
$image_du_groupe=$req->fetch();//là j'ai sélectionné une image du groupe 1 dans une table //que j'insère dans une autre table
$req=$pdo->prepare("UPDATE historique_final SET image_des_groupes=? WHERE date_de_placement>?");
$req->execute([$image_groupe1['liens'],$dernier_traitement]);
}elseif($le_plus_petit_groupe=2){$req=$pdo->prepare("SELECT liens FROM images_groupe2 ORDER BY id DESC ");}//et j'ai fait le même type de conditions pour les autres groupe,ex: elseif($le_plus_petit_groupe=3){$req=$pdo->prepare("SELECT liens FROM images_groupe3 ORDER BY id DESC ")
;//etc.....}
//mon problème est le suivant, peu importe la valeur de '$le_plus_petit_groupe'(3.7.2 //etc...) , c'est toujours les images de du premier groupe(images_groupes1) de la base de //données qui sont sélectionnées et insérées dans les différentes tables et je ne sais pas //pourquoi pouvez vous m'aider??merci d'avance
Hello,
Attention à tes opérateurs de comparaison qui doivent être "==" et non "=" comme ici :
if($le_plus_petit_groupe=1)
C'est peut être l'origine de ton problème...
oui effectivement j'y ai pensé mais c'est toujours pareil même lorsque je fais if($le_plus_petit_groupe==1)
et lorsque je fais echo $le_plus_petit_groupe j'ai quelque chose de différents que le var_dump($le_plus_petit_groupe),je ne sais pas si cette info peut aider
Autre chose, ta boucle est étrange, il manque un " } " et vu que tu souhaites sortir après la première itération il n'est pas nécessaire ici de créer un compteur :
foreach($tableau_des_populations as $Groupe => $nombre_individus) {
$le_plus_petit_groupe = $Groupe; // premier groupe du tableau trié
break;
}
Bonjour ! Je comprends ton problème, et il semble que l'erreur vienne de la condition de comparaison dans tes instructions if
et elseif
.
En PHP, l'opérateur =
est l'opérateur d'affectation (il assigne une valeur à une variable), tandis que l'opérateur ==
est utilisé pour comparer les valeurs. Dans ton code, tu utilises l'opérateur d'affectation =
au lieu de l'opérateur de comparaison ==
dans les conditions if
et elseif
, ce qui fait que ces conditions assignent la valeur 1
, 2
, ou 3
à la variable $le_plus_petit_groupe
au lieu de la comparer à ces valeurs.
Voici la correction à apporter :
if($le_plus_petit_groupe == 1) {
$req = $pdo->prepare("SELECT liens FROM images_groupe1 ORDER BY id DESC ");
$req->execute();
$req->setFetchMode(PDO::FETCH_ASSOC);
$image_du_groupe = $req->fetch();
$req = $pdo->prepare("UPDATE historique_final SET image_des_groupes=? WHERE date_de_placement>?");
$req->execute([$image_du_groupe['liens'], $dernier_traitement]);
} elseif($le_plus_petit_groupe == 2) {
$req = $pdo->prepare("SELECT liens FROM images_groupe2 ORDER BY id DESC ");
$req->execute();
$req->setFetchMode(PDO::FETCH_ASSOC);
$image_du_groupe = $req->fetch();
$req = $pdo->prepare("UPDATE historique_final SET image_des_groupes=? WHERE date_de_placement>?");
$req->execute([$image_du_groupe['liens'], $dernier_traitement]);
} elseif($le_plus_petit_groupe == 3) {
$req = $pdo->prepare("SELECT liens FROM images_groupe3 ORDER BY id DESC ");
$req->execute();
$req->setFetchMode(PDO::FETCH_ASSOC);
$image_du_groupe = $req->fetch();
$req = $pdo->prepare("UPDATE historique_final SET image_des_groupes=? WHERE date_de_placement>?");
$req->execute([$image_du_groupe['liens'], $dernier_traitement]);
} elseif($le_plus_petit_groupe == 4) {
// Faites de même pour le groupe 4
} elseif($le_plus_petit_groupe == 5) {
// Faites de même pour le groupe 5
} elseif($le_plus_petit_groupe == 6) {
// Faites de même pour le groupe 6
} elseif($le_plus_petit_groupe == 7) {
// Faites de même pour le groupe 7
}
=
par ==
dans les conditions if
, elseif
. Cela permet de comparer correctement la valeur de $le_plus_petit_groupe
avec les nombres 1
, 2
, 3
, etc.elseif
affectait la valeur à $le_plus_petit_groupe
, ce qui fait que la comparaison était toujours vraie (car $le_plus_petit_groupe
était défini comme 1
, 2
, etc.). Maintenant, avec ==
, on compare la valeur sans l'affecter.Accéder aux éléments du tableau : Dans la requête UPDATE
, tu fais référence à $image_groupe1['liens']
. Or, tu as défini la variable $image_du_groupe
, donc il faut utiliser celle-ci : $image_du_groupe['liens']
.
Optimisation : Si tu as beaucoup de groupes et que tu veux éviter de répéter les mêmes lignes pour chaque groupe, tu pourrais envisager de simplifier ton code en utilisant un tableau et une boucle foreach
.
Voici un exemple avec une approche plus générique :
foreach
:$tableau_groupes = [
1 => 'images_groupe1',
2 => 'images_groupe2',
3 => 'images_groupe3',
4 => 'images_groupe4',
5 => 'images_groupe5',
6 => 'images_groupe6',
7 => 'images_groupe7',
];
if (isset($tableau_groupes[$le_plus_petit_groupe])) {
$groupe = $tableau_groupes[$le_plus_petit_groupe];
$req = $pdo->prepare("SELECT liens FROM $groupe ORDER BY id DESC ");
$req->execute();
$req->setFetchMode(PDO::FETCH_ASSOC);
$image_du_groupe = $req->fetch();
$req = $pdo->prepare("UPDATE historique_final SET image_des_groupes=? WHERE date_de_placement>?");
$req->execute([$image_du_groupe['liens'], $dernier_traitement]);
}
$tableau_groupes
qui associe chaque groupe à sa table d'images.$le_plus_petit_groupe
, on peut sélectionner dynamiquement le groupe et son image sans avoir besoin de répéter une grosse partie du code.Cela rend ton code plus flexible et facile à maintenir.