Page 1 sur 1
affichage images propre depuis requete
Posté : 16 nov. 2023, 11:34
par nestor94
Je souhaite afficher des images sélectionnées selon un critère et qu'elles apparaissent sous forme de tableau 10 x10.
$sql = "SELECT * FROM map WHERE pays_name='$situation_pays'";
$pdostat = $bdd->prepare($sql);
$pdostat->execute();
$nb_par_ligne =10;
// compteur
$i = 0;
while ($resultat = $pdostat->fetch())
{
$pos_x= $resultat['pos_x'];
$pos_y= $resultat['pos_y'];
$tile= $resultat['tile'];
echo '<table><tr><td>';
if ($i !== 0 && ($i%$nb_par_ligne ===0)){
echo '</tr><tr>';
}
?>
<td>
<?php echo '.<img src="'.$tile.'">.';?></td>
<?php
$i++;
}
while( ($i % $nb_par_ligne) !==0) {
echo '<td> </td>';
$i++;
echo '</tr></table>';
}
Dans cet exemple, j'ai 12 images à extraire mais elles s'affichent que sur une seule colonne verticale.
(a chaque tile correspond des coordonnées 'pos_x' et 'pos_'y')

Re: affichage images propre depuis requete
Posté : 16 nov. 2023, 22:14
par two3d
Prends l’habitude de correctement indenter ton code pour y voir clair.
Tu n'a pas vraiment posé de question, que souhaite tu ? Retourner à la ligne après 10 images ?
Re: affichage images propre depuis requete
Posté : 17 nov. 2023, 01:43
par nestor94
En fait, et c'est là que ça se complique beaucoup, la requète de base
$sql = "SELECT * FROM map_océanie WHERE pays_name='$situation_pays'";
$pdostat = $bdd->prepare($sql);
$pdostat->execute();
peut afficher de
1 à n "case terrain" ($tile) selon l'étendue du pays du joueur....
Re: affichage images propre depuis requete
Posté : 17 nov. 2023, 08:20
par two3d
C'est quoi la question ?
Re: affichage images propre depuis requete
Posté : 17 nov. 2023, 09:51
par nestor94
DANS un premier temps, avec le script ci-dessus, obtenir 1 retour à la ligne apres 10 images.
Re: affichage images propre depuis requete
Posté : 17 nov. 2023, 10:17
par two3d
D'accord, avec ton itérateur : $i = 0; (que tu va initialiser à 1 dès le départ : $i = 1; )
Dans ton while, tu l'incrémente de 1 : $i ++; (à la fin de la boucle, pas au début, sinon la condition suivante va être faussée)
Puis dans ton while toujours, tu fais une condition (en dessus de "$i ++;") :
si i == 10, alors fait un retour à la ligne, puis on remet i à 1
if($i == 10){
//retour à la ligne
$i = 1;
}else{
$i++;
}
Re: affichage images propre depuis requete
Posté : 17 nov. 2023, 15:19
par nestor94
Tu as supprimé un while alors?
$sql = "SELECT * FROM map WHERE pays_name='$situation_pays'";
$pdostat = $bdd->prepare($sql);
$pdostat->execute();
$nb_par_ligne = 10;
// compteur
$i = 1;
while ($resultat = $pdostat->fetch())
{
$pos_x= $resultat['pos_x'];
$pos_y= $resultat['pos_y'];
$tile= $resultat['tile'];
echo '<table><tr><td>';
if ($i !== 1 && ($i%$nb_par_ligne ===0)){
echo '</tr><tr>';
}
?>
<td>
<?php echo '.<img src="'.$tile.'">.';?></td>
<?php
$i++;
}
if($i == 10){
//retour à la ligne
echo '<td> </td>';
echo '</tr></table>';
$i = 1;
}else{
$i++;
}
toujours affichage vertical
Re: affichage images propre depuis requete
Posté : 17 nov. 2023, 16:41
par two3d
Je dois peut être pas parler français des fois
D'accord, avec ton itérateur : $i = 0; (que tu va initialiser à 1 dès le départ : $i = 1; )
Dans ton while, tu l'incrémente de 1 : $i ++; (à la fin de la boucle, pas au début, sinon la condition suivante va être faussée)
Puis dans ton while toujours, tu fais une condition (en dessus de "$i ++;") :
si i == 10, alors fait un retour à la ligne, puis on remet i à 1
if($i == 10){
//retour à la ligne
$i = 1;
}else{
$i++;
}
Re: affichage images propre depuis requete
Posté : 18 nov. 2023, 01:57
par nestor94
Tu maitrises parfaitement la langue de Molière , rassure toi
C'est juste que j'ai deux boucles while dans mon script. J'ai modifié ainsi:
$sql = "SELECT * FROM map WHERE pays_name='$situation_pays'";
$pdostat = $bdd->prepare($sql);
$pdostat->execute();
$nb_par_ligne =10;
// compteur
$i = 1;
while ($resultat = $pdostat->fetch())
{
$pos_x= $resultat['pos_x'];
$pos_y= $resultat['pos_y'];
$tile= $resultat['tile'];
echo '<table><tr><td>';
if ($i !== 0 && ($i%$nb_par_ligne ===0)){
echo '</tr><tr>';
$i ++;
if($i == 10){
//retour à la ligne
$i = 1;
}else{
$i++;
}
}
?>
<td>
<?php echo '.<img src="'.$tile.'">.';?></td>
<?php
}
while( ($i % $nb_par_ligne) !==0) {
echo '<td> </td>';
echo '</tr></table>';
}
?>
là, pas de message erreur mais le script "mouline" dans le navigateur...
Re: affichage images propre depuis requete
Posté : 18 nov. 2023, 02:02
par two3d
Au temps pour moi, désolé !
Je trouve ton deuxième while mal employé, voire inutile car tu peux faire les retours directement dans ton premier while.
SI le script mouline, c'est peut être le second while qui tourne en boucle sans arrêt car la condition peut être toujours vraie. Tu es bon pour redémarrer le serveur local pour arrêter le cauchemar.
As tu essayé de mettre mon bout de code dans ton while principal ? Ajuste le en mettant des saut de ligne quand c'est == 10.
Après, perso, je serai passé par un tableau PHP et coupé à 10 entrées via array_chunk :
https://www.php.net/manual/fr/function.array-chunk.php pour plus de liberté à traiter les informations une fois extraites de la BDD.
Re: affichage images propre depuis requete
Posté : 18 nov. 2023, 10:42
par nestor94
Hello,
j'ai repris ton dernier post pour appliquer? les consignes en supprimant le second while remplacé par un if dans le premier (while)
je reviens sur un affichage vertical
que signifie exactement ceci ?
$i%$nb_par_ligne ===0)
if( ($i % $nb_par_ligne) !==0) {
$nb_par_ligne =10;
// compteur
$i = 1;
while ($resultat = $pdostat->fetch())
{
$pos_x= $resultat['pos_x'];
$pos_y= $resultat['pos_y'];
$tile= $resultat['tile'];
echo '<table><tr><td>';
if ($i !== 0 && ($i%$nb_par_ligne ===0)){
echo '</tr><tr>';
$i ++;
if($i == 10){
//retour à la ligne
$i = 1;
}else{
$i++;
if( ($i % $nb_par_ligne) !==0) {
echo '<td> </td>';
echo '</tr></table>';
}
}
}
?>
<td>
<?php echo '.<img src="'.$tile.'">.';?></td>
<?php
}
?>
je vais peut-etre tenté ton autre solution avec array_chuck ? car ce script est loin d'etre finalisé. Il faudrait ensuite que l'affichage des images soit dans l'ordre par rapport à la map d'origine (et en fonction donc des coordonnées pos_x et pos_y)
Re: affichage images propre depuis requete
Posté : 18 nov. 2023, 11:08
par two3d
Prends l'habitude d'indenter ton code, c'est une horreur à lire.
https://www.youtube.com/watch?v=6uPYxXWSkzI
(EDIT : après une bonne indentation, j'ai remarqué que non ) A vue d’œil, on dirait que tu n'englobe pas mes conditions avec ton while, met que tu fait
while/else, c'est
while, if/else, fermeture while
Le % est un modulo :
language.operators.arithmetic
Cadeau, un code bien indenté, dis moi si ça fonctionne, adapte le selon ta convenance :
//paramètre
$nb_par_ligne = 10;
//on commence par ouvrir le tableau (1 seule fois ! à pas mettre dans la boucle)
echo '<table><tr>';
//initialisation du compteur
$i = 1;
while($resultat = $pdostat->fetch()){
//afiichage de la tile
echo '<td><img src="' . $resultat['tile'] . '"></td>';
//si le nombre de tile est de 10, on passe à la ligne
if($i == $nb_par_ligne){
//retour à la ligne
echo '</tr><tr>';
$i = 1;
//sinon, on continu l'affichage horizontal
}else{
//compte le nombre de tile affichées
$i ++;
}
}
//fermeture du tableau
echo '</tr></table>';
Re: affichage images propre depuis requete
Posté : 20 nov. 2023, 12:46
par nestor94
Bonjour two3d,
Mille mercis pour ce code épuré et compréhensible, Il fonctionne parfaitement.
La seconde partie va nécessiter un nouveau topic...
