01-04-2008, 01:19 PM
Psykose a écrit :Oui mais c'est utile par exemple lorsque l'on plcae un joueur sur une map, si on utilise ma fonction, on peut générer une autre place sur la map, et on peux également retourner un messaage d'erreur plus agréable qu'une erreur Sql à l'utilisateur.Un nombre non signé équivaut à un nombre positif. Ta fonction est moins flexible qu'un is_numeric couplé à un $var > 0. Elle est aussi beaucoup plus gourmande en temps d'exécution (même si ça ne se voit pas à notre échelle ).
is_numeric autorise les + et les -, is_number autorise uniquement les nombres.
Quand à la fonction qui vérifie les duplicatas, tu as la possibilité de faire ça avec SQL, en faisant en sorte que si tu as une erreur SQL de type duplicata, tu lances une autre opération.
Exemple :
Code PHP :
<?php
$query = sprintf(
"INSERT INTO flight_collect_ressource (
flight_id,
territory_id,
seelie_id,
ressource_id,
quantity,
uniqueness
)
VALUES (%d, %d, %d, %d, %d, '%s')
ON DUPLICATE KEY
UPDATE quantity = %5\$d,
seelie_id = %3\$d;",
$this->flightId,
$this->territoryId,
$this->id,
(int) $ressource,
(int) $quantity,
(string) ($this->flightId.$this->territoryId.(int) $ressource)
);
Ça me permet de créer une entrée qui dit : Sur ce territoire, le Vol (c'est le nom des guildes dans mon jeu) récolte x% des ressources de type R auquel il a le droit. C'est donc une entrée unique, et en gros, quand une Seelie du Vol édite ces préférences, on ne peut pas savoir si l'entrée existe déjà (auquel cas il faut la modifier plutôt que d'en insérer une nouvelle). Et bien avec mon script, ça fait ça de manière transparente. Et cela sans lancer 2 requêtes séparément.
Concernant les messages d'erreurs, un jeu (ou même un site) en production ne doit jamais les afficher, donc déjà à la base, tu n'auras pas à le faire. Et ensuite, après un UPDATE/INSERT ou un SELECT dans ta fonction, il faut faire :
Pour un UPDATE ou INSERT :
Code PHP :
<?php
$sql = mysql_query($query);
if(mysql_affected_rows() > 0){ return TRUE; }
else { return FALSE; }