JeuWeb - Crée ton jeu par navigateur
[Reglé]SQL, conditions et test - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Reglé]SQL, conditions et test (/showthread.php?tid=1701)



[Reglé]SQL, conditions et test - Byleth - 03-09-2007

Bonjour les gens, j'ai un problème tout bête et j'aimerai votre avis :

Lorsqu'un joueur consomme un objet, je dois vérifier qu'il le possède bien car entre le moment où la page de sélection s'affiche et le moment de la consommation effective, il peut se passer toute sorte de problème (triche plus ou moins poussée, erreur humaine en ouvrant plusieurs pages, etc...)

Je souhaite donc vérifier, lors de la suppression de l'objet (on soustrait de 1 le nombre dans la BdD), qu'il est toujours en possession du joueur, avant d'en déclencher les effets.

Ce n'est en soit pas compliqué en php, mais je me demande si je peux le faire dans une simple requête SQL histoire d'économiser 1 requête (ce qui est toujours plaisant lol)

En gros je veux ça :

Si Nombre>0, Nombre=Nombre-1
Sinon, la requête rend faux

Merci de votre aide.


RE: SQL, conditions et test - corentone - 03-09-2007

Il faut utiliser un CASE...regarde un poil plus bas j'avais fait une demande du meme type...je vais voir si je te trouve le lien Wink

PS: je ne reponds pas totalement car j'ai peur de te dire nimporte quoi Tongue

EDIT: le voila!
http://www.jeuweb.org/board/showthread.php?tid=2301


RE: SQL, conditions et test - Byleth - 03-09-2007

Je connais le CASE, merci pour le lien Wink

Mon soucis est plutôt de savoir comment PHP peut savoir que la requête n'est pas exécutable afin de sortir un petit message d'erreur.


RE: SQL, conditions et test - corentone - 03-09-2007

A mon avis si tu veux traiter cela avec Php, il suffira d'un IF avant la requete...

Ou bien il faut se tourner du cote de mysql_affected_rows (ou un truc du genre) qui renvoie le nombre de lignes editées...si c'est zero, c'est que cela n'a pas eut lieu...


RE: SQL, conditions et test - jo_link_noir - 04-09-2007

$req = requete sql;

if($req == NULL)
{
echo "aucune information trouvé";
exit;
}

si j'ai bien comprit c'est un truc comme ça ?


RE: SQL, conditions et test - Byleth - 04-09-2007

Tu veux dire que si je mets mon CASE et qu'aucune condition n'est remplie, la requête SQL rend NULL?


RE: SQL, conditions et test - jo_link_noir - 04-09-2007

j'ai oublier une ligne >.<

$req = requete sql;
$sql = mysql_fetch_array($req);

if($sql == NULL)
{
echo "aucune information trouvé";
exit;
}

et là, quand la requete ne prend rien dans la bdd (aucune condition des cases) ça donne null


RE: SQL, conditions et test - Roworll - 04-09-2007

J'utiliserai une autre méthode.
Déjà, la requête SQL
Code PHP :
<?php 
mysql_query
("UPDATE inventaire SET nombre = nombre -1 WHERE nombre > 0 AND <blablabla>");
Cette requête ne mettra la BDD à jour que s'il reste au moins un objet (nombre > 0).

Ensuite, comme l'a suggéré Corentone, tu utilises mysql_affected_rows qui te renvoie le nombre de lignes affectées par la mise à jour.
Code PHP :
<?php 
if(mysql_affected_rows()==0){
// Pas de MAJ effectuée sur la base : suspection de problème/triche
} else {
// Tout va bien
}

Inutile donc de récupérer le recordset renvoyé par la requête.


RE: SQL, conditions et test - Byleth - 05-09-2007

Merci beaucoup, ça marche parfaitement Smile