[RESOLU] affichage images propre depuis requete

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] affichage images propre depuis requete

Re: affichage images propre depuis requete

par nestor94 » 20 nov. 2023, 12:46

Bonjour two3d,

Mille mercis pour ce code épuré et compréhensible, Il fonctionne parfaitement. =D>
La seconde partie va nécessiter un nouveau topic... :?

Re: affichage images propre depuis requete

par two3d » 18 nov. 2023, 11:08

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

par nestor94 » 18 nov. 2023, 10:42

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 :cry:

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>&nbsp;</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

par two3d » 18 nov. 2023, 02:02

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. :mrgreen:

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

par nestor94 » 18 nov. 2023, 01:57

Tu maitrises parfaitement la langue de Molière , rassure toi :lol:
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>&nbsp;</td>';
echo '</tr></table>';
}
?>
là, pas de message erreur mais le script "mouline" dans le navigateur...

Re: affichage images propre depuis requete

par two3d » 17 nov. 2023, 16:41

Je dois peut être pas parler français des fois :mrgreen:
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

par nestor94 » 17 nov. 2023, 15:19

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>&nbsp;</td>';
echo '</tr></table>';
$i = 1;
}else{
$i++;
}
toujours affichage vertical

Re: affichage images propre depuis requete

par two3d » 17 nov. 2023, 10:17

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

par nestor94 » 17 nov. 2023, 09:51

DANS un premier temps, avec le script ci-dessus, obtenir 1 retour à la ligne apres 10 images.

Re: affichage images propre depuis requete

par two3d » 17 nov. 2023, 08:20

C'est quoi la question ?

Re: affichage images propre depuis requete

par nestor94 » 17 nov. 2023, 01:43

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

par two3d » 16 nov. 2023, 22:14

Prends l’habitude de correctement indenter ton code pour y voir clair. :wink:

Tu n'a pas vraiment posé de question, que souhaite tu ? Retourner à la ligne après 10 images ?

affichage images propre depuis requete

par nestor94 » 16 nov. 2023, 11:34

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>&nbsp;</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')

Image