[RESOLU] Comment différencier plusieurs persos/id?

Eléphant du PHP | 345 Messages

20 août 2021, 10:45

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)
Modifié en dernier par nestor94 le 20 août 2021, 15:30, modifié 1 fois.

ynx
Mammouth du PHP | 586 Messages

20 août 2021, 12:37

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.

Eléphant du PHP | 345 Messages

20 août 2021, 15:24

'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:
Modifié en dernier par nestor94 le 20 août 2021, 15:26, modifié 1 fois.

Mammouth du PHP | 2703 Messages

20 août 2021, 15:25

que fait cette ligne ?
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;

Eléphant du PHP | 345 Messages

20 août 2021, 15:27

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.

Eléphant du PHP | 345 Messages

20 août 2021, 15:37

<?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?

Mammouth du PHP | 2703 Messages

20 août 2021, 15:40

non

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

Eléphant du PHP | 345 Messages

20 août 2021, 15:46

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

Mammouth du PHP | 2703 Messages

20 août 2021, 15:49

donc dans action_perso_id.php il faut choisir une de ces 3 actions ?

Eléphant du PHP | 345 Messages

20 août 2021, 15:54

Oui, tout à fait.

Mammouth du PHP | 2703 Messages

20 août 2021, 15:57

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.

Eléphant du PHP | 345 Messages

20 août 2021, 16:06

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>

Mammouth du PHP | 2703 Messages

20 août 2021, 16:10

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>';"

Eléphant du PHP | 345 Messages

20 août 2021, 16:13

Oui, c'est modifié dans map_détail, mais pas ensuite.
Je ne vois pas comment le coder dans le SELECT je suppose

Mammouth du PHP | 2703 Messages

20 août 2021, 16:15

que fait cette ligne ?
$id = $_GET['id'];