[RESOLU] probleme traitement requete pour (et) affichage multiple dans un DIV

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] probleme traitement requete pour (et) affichage multiple dans un DIV

Re: probleme traitement requete pour (et) affichage multiple dans un DIV

par nestor94 » 11 avr. 2021, 21:04

J'ai abandonné les boucles et suis parti sur un affichage direct dans un tableau.
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
// affichage de la position du joueur depuis table membres
$sql = "SELECT id, pos_x, pos_y FROM membres WHERE id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();    
if (!empty($resultat )) { 
$pos_x = $resultat['pos_x'];
$pos_y = $resultat['pos_y'];
/PHP]

puis pour affichage sur chaque case (en modifiant à chaque fois pos_x et pos_y !) 

[PHP]
<td style="width:60px; height:60px;"><?php
$sql = "SELECT tile FROM map LEFT JOIN membres ON map.pos_x = membres.pos_x+1 AND map.pos_y = membres.pos_y-1 WHERE membres.id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();    
if (!empty($resultat )) { 
$tile = $resultat['tile'];
                }
echo '<img src='.$tile.'>'?></td>

Re: probleme traitement requete pour (et) affichage multiple dans un DIV

par nestor94 » 06 avr. 2021, 16:30

ca sera un tableau de 11 colonnes. Je regarde cela et reviens vers vous car j'ai un doute sur la syntaxe des boucles php .

Re: probleme traitement requete pour (et) affichage multiple dans un DIV

par Ryle » 06 avr. 2021, 11:41

Salutations :

Si les variables retournent bien les valeurs que tu attends, il ne s'agit plus d'un problème de php, mais de mise en forme côté navigateur, donc une question de css et html. Il faut donc regarder le code source généré et comparer ce que tu obtiens avec ce que tu veux faire...

En général, le plus simple est de partir du résultat attendu et de remplacer les éléments dynamique par ton code php. Cela t'oblige à réfléchir à ce que tu souhaites obtenir : est-ce qu'il s'agit de 11 images côté à côté avec un <br> après la 11e pour séparer chaque ligne ? est-ce que c'est un tableau avec 11 colonnes dont chaque cellule contient une image ? est-ce une suite de div dont la largeur est de 9% et qui doivent contenir les images...

Construit toi un bout de page html avec le code que tu veux obtenir en mettant une image bidon que tu répètes à chaque fois et une fois que tu es satisfait du résultat, alors décompose celui-ci en ligne et en itération php ;)

probleme traitement requete pour (et) affichage multiple dans un DIV

par nestor94 » 04 avr. 2021, 23:56

Bonjour, merci d'avance si vous pouvez m'aider sur ce sujet car je n'en trouve pas la solution.
<?php
session_start();
//Affichage erreurs PHP
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once 'config.php';
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
// affichage de la position du joueur depuis table membres
$sql = "SELECT id, pos_x, pos_y FROM membres WHERE id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();    
if (!empty($resultat )) { 
$pos_x = $resultat['pos_x'];
$pos_y = $resultat['pos_x'];
}
$debutX =  $resultat['pos_x'];
$finX = $resultat['pos_x']+5;
$debutY = $resultat['pos_y'];
$finY = $resultat['pos_y']+5;
//affichage de la tile correspondante dans la table map
$sql = "SELECT tile FROM map LEFT JOIN membres ON map.pos_x = membres.pos_x AND map.pos_y = membres.pos_y WHERE membres.id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();    
if (!empty($resultat )) { 
$tile = $resultat['tile'];
                }

 for ($pos_x = 1; $pos_x <= $finX; $pos_x++)
    {
			 echo '<div class="case_map">';
	echo' <div class="container">';
	echo '<div class="row">  ';
$sql = "SELECT tile FROM map WHERE pos_x = $debutX AND pos_y = $debutY";
//affichage de la tile depuis table map // redondant??
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();    
if (!empty($resultat )) { 
$tile = $resultat['tile'];
                }
	echo '<img src="'.$tile.'">';  
	echo ' <div class="col-md-offset-2 col-md-8"> ';
	echo ' <div id="map" style="width:60px; height:60px"></div>';
	echo '        </div>
    </div>
</div> ';
   echo '</div>', "\n";
                $debutX++;
       
        echo '</div>', "\n";
        $debutX = $debutX;
        $debutY = $debutY;
}

        for($pos_y = 1; $pos_y <= $finY; $pos_y++)
		{
	 echo '<div class="case_map">';
	echo' <div class="container">';
	echo '<div class="row">  ';
$sql = "SELECT tile FROM map WHERE pos_x = $debutX AND pos_y = $debutY";
//affichage de la tile depuis table map // redondant??

$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();    
if (!empty($resultat )) { 
$tile = $resultat['tile'];
                }
	echo '<img src="'.$tile.'">';  
	echo ' <div class="col-md-offset-2 col-md-8"> ';
	echo ' <div id="map" style="width:60px; height:60px"></div>';
	echo '        </div>
    </div>
</div> ';
   echo '</div>', "\n";
                $debutX++;
   
        echo '</div>', "\n";
        $debutY = $debutY;
}
	
?>
Je veux afficher un carré (centré à l'écran) de 11 x 11 cases autour de la position du membre avec chaque case du carré étant une image extraite de la table map.
toutes les variables ont été testées et sont OK. Peut-etre les requetes sont mal positionnées? La fin du script (la partie "DIV") est foireuse et celle ci, je ne la maitrise absolument pas. A l'affichage , j'obtiens que la tile d'origine qui s'affiche 24 fois à la verticale et coté gauche de l'écran.