20-09-2013, 02:50 PM
Citation :le premier joueur qui clique sur cette arme l'obtient.
Avec le code ci-dessus, y'a un problème...
Si deux joueurs cliquent en même temps ou presque, alors l'arme sera donnée aux deux... Voire même, si un joueur clic deux fois, il prendra deux armes...
Code PHP :
<?php
$req = "UPDATE `armes` SET `given`=1 WHERE `idArme`=$idArme AND `given`=0 LIMIT 1"; // = 1 pour oui c'est donnée
$mysqli->query($req);
if ($mysqli->affected_rows != 1)
{
throw new Exception('arme déjà donnée');
}
else
{
// Donner l'arme au joueur
$mysqli->query("INSERT INTO `armesJoueurs` (`idJoueur`, `idArme`) VALUES ($idJoueur, $idArme);");
// Bien s'assurer de la validité des variables $idArme et $idJoueur, histoire de ne pas se faire de belles portes d'entrée pour les injections SQL
}
A noter qu'il faudra, pour être propre, se pencher sur les conditions d'arrêt du script PHP en cas de déconnexion du client. Si le client se déconnecte quand PHP entre dans le "else", alors suivant le comportement du script, ce dernier pourrait se stopper et le joueur n'aura pas son arme dans son inventaire (car la requête insérant l'arme n'a pas été faite).
Pour l'affichage coté client, il te faudrait, pour éviter le rafraichissement, un morceau AJAX oui (ou un push serveur comme certains adorent ici :p mais si t'es sur un mutualisé, oubli). Avec ton code AJAX, tu peux alors interroger une page PHP, qui renverra comme réponse un JSON par exemple ou un texte brut (ou même un simple header HTTP, pourquoi pas). La réponse du script PHP se base sur la date serveur et sur la base de données pour savoir si une arme est disponible. Un identifiant de l'arme disponible (ou NULL sinon) est alors renvoyée au client. Le client (AJAX) peut ensuite récupérer l'image correspondante et mettre l'affichage de la page à jour. L'affichage contient alors un lien vers un autre fichier PHP, similaire aux codes donnés précédemment, qui se charge d'ajouter l'arme si elle est bien disponible (la vérification de la disponibilité devrait réutiliser le code PHP de la première page, celle que l'AJAX avait appelé). L'arme est alors ajoutée, et le serveur renvoie une réponse de type "Vous avez une arme de plus dans votre inventaire", pour que le client sache ce qu'il s'est passé.