JeuWeb - Crée ton jeu par navigateur
Besoin d'aide pour une fonction svp - 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 : Besoin d'aide pour une fonction svp (/showthread.php?tid=3948)



Besoin d'aide pour une fonction svp - stolmen - 06-05-2009

bonjour ,je vous explique mon problème

j'ai deux tables :

l'une appeler user ,l'autre appeler ressource


Dans la table user ,il a les champs "id" "attaque" et "defence"
dans la table ressource,il y a les champs "id" "minedefer" et "minedebois"

voici un tableau récapitulatif

TABLE user
CHAMPS id attaque defence
VALEURS 1 0 0

TABLE ressource
CHAMPS id minedefer minedebois
VALEURS 1 0 0


jai creer deux tableaux

Code PHP :
<?php 
$element
(

1=> "attaque",
2 => "defence",
3=> "minedefer",
4 => "minedebois",
);

$requis (

3=> array( 1= >2, 2 => 3)
);

En gros cela signifie que pour avoir l'objet $element[3] (mine de fer), il faut $element[1] au niveau 2 ET $element[2] au niveau 3, donc j'aimerais avoir une fonction qui me dis si oui ou non un objet est accessible.

J'ai cet fonction qui marche uniquement quand les champs sont dans la meme table:
Code PHP :
<?php 
function IsTechnologieAccessible($iduser, $idressource, $Element) {
global
$requis, $element,$dbh;

$id=$_SESSION['id'];
$res= "SELECT * FROM ressource WHERE id='$id'";
$sth1=$dbh->query($res);
$result1 = $sth1->fetchALL(PDO::FETCH_ASSOC);
foreach(
$result1 as $planet){

if (isset(
$requeriments[$Element])) {
$enabled = true;
foreach(
$requeriments[$Element] as $ReqElement => $EleLevel) {
if (@
$user[$element[$ReqElement]] && $user[$element[$ReqElement]] >= $EleLevel) {
// break;
} elseif ($planet[$element[$ReqElement]] && $planet[$element[$ReqElement]] >= $EleLevel) {
$enabled = true;
} else {
return
false;
}
}
return
$enabled;
} else {
return
true;
}
}
}
Voila merci de m'eclairer


RE: Besoin d'aide pour une fonction svp - keke - 07-05-2009

Il faut que tu apprennes à faire des jointures entre tes tables ^^.

http://www.phpsources.org/tutoriel-join.htm

Sinon, défense ça s'écrit avec un "S".

Kéké.


RE: Besoin d'aide pour une fonction svp - Holy - 07-05-2009

Y a quelques problèmes d'optimisation aussi. Vire l'étoile de ta requête sql et précise les champs, c'est moins gourmand ^^


RE: Besoin d'aide pour une fonction svp - Zamentur - 07-05-2009

Ouai il y a des variable qui sont utilisé et qui n'existe pas dans ta fonction..
$user et $requirements par exemple

Et sache qu'il vaut mieux utiliser isset que l'opérateur @ qui peux cacher d'autres erreurs...


RE: Besoin d'aide pour une fonction svp - stolmen - 07-05-2009

(07-05-2009, 02:28 PM)Zamentur a écrit : Ouai il y a des variable qui sont utilisé et qui n'existe pas dans ta fonction..
$user et $requirements par exemple

Et sache qu'il vaut mieux utiliser isset que l'opérateur @ qui peux cacher d'autres erreurs...

$user et $requirements sont declarer plus haut ,ne tinquiete pas^^ je vais essayer avec un isset , merci de vos reponses


RE: Besoin d'aide pour une fonction svp - OncleJames - 10-05-2009

Hum .. pas bien de mélanger les variables en anglais et francais .. :nonon:

Au lieu de passer par des objets je procède par chaine de caractère.

$requis = "1:2/2:1"

Element 1 au niveau 2 et Element 2 au niveau 1

Pour les récupérer explode, re explode pour avoir un tableau de cette forme :
$tableau[1] = 2
$tableau[2] = 1

Un foreach en comparant a ce que possède le joueur et op tu as tout.

On peut directement passer par des tableaux, mais bien moins pratique a changer, et deux explodes ne 'consomme' rien