Page 1 sur 2

Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 10:45
par nestor94
Sur la map de jeu, je sélectionne ma position puis celle de tous les autres joueurs présents à cet endroit.
<?php
$sql = "SELECT 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'];
}
$sql = "SELECT * FROM membres WHERE (pos_x=$pos_x AND pos_y=$pos_y) AND id!=:id AND vacance= 'OFF'";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
while ($resultat = $pdostat->fetch())
{
$avatar = $resultat['avatar'];
echo '<a href="action_perso_id.php"><img src="'.$avatar.'"></a>';
}
?>
Je sélectionne le perso A pour interagir avec
$sql = "SELECT 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'];
}
$sql = "SELECT avatar FROM membres WHERE (pos_x=$pos_x AND pos_y=$pos_y) AND id!=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
while ($resultat = $pdostat->fetch())
{
$avatar = $resultat['avatar'];
?>
<table>
<td style="width:50px; height:50px;">
<?php
echo '<img src="'.$avatar.'"></a>'; 
}
?>
</td>
</table>

Et là, ca coince car il m'affiche le perso A, le perso B, etc.
Et bien sur, les actions suivantes vont toujours s'effectuer sur le meme perso. Comment réaliser ce "tri" en amont, et est-ce possible?
(en fait, quand il n'y a qu'un seul joueur présent, c'est OK, mais pas quand plusieurs)

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 12:37
par ynx
Bonjour,

Tu peux passer l'identifiant de l'utilisateur en paramètre afin de réaliser l'action sur l'utilisateur spécifié par ce paramètre :
echo '<a href="action_perso_id.php?id=' . $resultat['id'] . '"><img src="'.$avatar.'"></a>';

Puis récupérer ce paramètre via $_GET['id'] dans le script action_perso_id.php.

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 15:24
par nestor94
'Puis récupérer ce paramètre via $_GET['id'] dans le script action_perso_id.php'


je ne connais pas la syntaxe correcte sachant que "je pars" de l'avatar au départ :oops:

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 15:25
par or 1
que fait cette ligne ?
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 15:27
par nestor94
Elle est dans tous mes scripts par défaut... Et dans celui ci, il y a 150 lignes de code en amont. en fait, cette ligne est placée au tout début (mauvais copier coller pour le coup)
UP, script corrigé sur le site.

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 15:37
par nestor94
<?php
session_start();
require_once 'config.php';
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
$sql = "SELECT 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'];
}
$sql = "SELECT avatar,id FROM membres WHERE (pos_x=$pos_x AND pos_y=$pos_y) AND id!=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
while ($resultat = $pdostat->fetch())
{
$avatar = $resultat['avatar'];
$id = $_GET['id'];
?>

ca serait cohérent?

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 15:40
par or 1
non

" Je sélectionne le perso A pour interagir avec "
quelle est cette interaction ?

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 15:46
par nestor94
<table>
<tr><td colspan="3"><b><font size="3">INTERACTIONS</b></font></td></tr>
<tr><td><font size="3"><a href="voler.php"><span title="VOL">VOLER</a></font></td>
<td><font size="3"><a href="attaquer.php"><span title="ATTAQUE">ATTAQUER</a></font></td>
<td><font size="3"><a href="capturer.php"><span title="CAPTURE">CAPTURER</a></font></td></tr>
</table>

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 15:49
par or 1
donc dans action_perso_id.php il faut choisir une de ces 3 actions ?

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 15:54
par nestor94
Oui, tout à fait.

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 15:57
par or 1
ou dans le code copié y-a-t il quelque chose qui va dans cette direction ?

d'un point de vue ergonomie, s'il n'y a que 3 actions, il vaudrait mieux au lieu de cliquer sur un avatar, cliquer sur quelque chose liée à l'action souhaitée et l'avatar choisi, soit une page en moins.

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 16:06
par nestor94
Tu veux dire tout mettre sur map_détail??

"map_détail" (avec modif selon ynx)
<?php
$sql = "SELECT 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'];
}
$sql = "SELECT * FROM membres WHERE (pos_x=$pos_x AND pos_y=$pos_y) AND id!=:id AND vacance= 'OFF'";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
while ($resultat = $pdostat->fetch())
{
$id= $resultat['id'];
$avatar = $resultat['avatar'];
echo '<a href="action_perso_id.php?id=' . $resultat['id'] . '"><img src="'.$avatar.'"></a>';
}
?>
action_perso_id (qui devrait afficher SEULEMENT l'avatar voulu) // c'est là que ça coince encore
<?php
session_start();
require_once 'config.php';
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
$sql = "SELECT 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'];
}
$sql = "SELECT avatar FROM membres WHERE (pos_x=$pos_x AND pos_y=$pos_y) AND id!=id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
while ($resultat = $pdostat->fetch())
{
$avatar = $resultat['avatar'];
$id = $_GET['id'];
?>
partie html
<table>
<tr><td colspan="3"><b><font size="3">INTERACTIONS</b></font></td></tr>
<tr><td><font size="3"><a href="voler.php"><span title="VOL">VOLER</a></font></td>
<td><font size="3"><a href="attaquer.php"><span title="ATTAQUE">ATTAQUER</a></font></td>
<td><font size="3"><a href="capturer.php"><span title="CAPTURE">CAPTURER</a></font></td></tr>
</table>
<br><br><center><a href="map.php">vers la carte de jeu</a></center>
</body>
</html>

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 16:10
par or 1
comme l'a dit ynx :
"Tu peux passer l'identifiant de l'utilisateur en paramètre afin de réaliser l'action sur l'utilisateur spécifié par ce paramètre :

echo '<a href="action_perso_id.php?id=' . $resultat['id'] . '"><img src="'.$avatar.'"></a>';"

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 16:13
par nestor94
Oui, c'est modifié dans map_détail, mais pas ensuite.
Je ne vois pas comment le coder dans le SELECT je suppose

Re: Comment différencier plusieurs persos/id?

Posté : 20 août 2021, 16:15
par or 1
que fait cette ligne ?
$id = $_GET['id'];