JeuWeb - Crée ton jeu par navigateur
Je cherche la logique :'( - 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 : Je cherche la logique :'( (/showthread.php?tid=7385)



Je cherche la logique :'( - Jade H - 28-05-2015

Hii. Je vais essayer d'être la plus précise possible.

Disons que j'ai un formulaire de checkbox :
Code PHP :
<?php 
<form action="index.php" method="POST">

<
input type="checkbox" value= "Epee" name = "option[]" > Epée

<input type="checkbox" value= "Hache" name = "option[]" > HAche

<input type="checkbox" value= "Dague" name = "option[]" > Dague

<input type="submit" value="Submit">
</
form>

Chacunes des checkbox renferment en valeur le nom de l'arme qu'un joueur peut utiliser. Cela veut dire qu'il peut en utiliser 1 ou 2 ou les 3 à la fois pendant le tours.
Ce qui me pose problème c'est la récupération de ses valeurs et leurs traitement.
Dans le jeu que j'essaie de faire une arme à plusieurs caractéristique par exemple :
Épée : Inflige 30 Dégâts - Utilise 1 Point Action - Utilise 30 Mana pour l'utiliser.
Hache: Inflige 40 Dégâts - Utilise 2 Point Action - Utilise 50 Mana pour l'utiliser.

Tout en sachant cela je procède à la récupération de mes Checkbox en PHP

Code PHP :
<?php 
if(isset($_POST['option']))
{
var_dump($_POST['option']);
// le vardump est égale à un array contenant les valeurs des cases cochés.
foreach($_POST['option'] as $filtres)
{
echo
$filtres; // Ici echo $filtres représente chaque élément individuellement.
}
}

Comment puis je faire pour récupérer grâce au valeur des checkbox (ici le nom de chaque arme) les valeurs associés décrites plus haut, c'est a dire "les dégâts", "les PA utilisés" et "le mana utilisé" pour chaque ARME.
J'ai réfléchis a plusieurs cas de figure mais je ne trouve pas d'issue.
Avant tout combat je fais une requête qui va récupérer toutes les armes avec leurs stat du joueurs donc je me suis mise dans la tête que je pourrais comparer les valeurs des checkbox avec le tableau de toutes les techniques et ensuite récupérer les données associées, j'ai pas réussi et je sais même pas si c'est possible..

Je ne sais pas si j'ai été assez clair :$ .
Si vous aviez des propositions peut être plus simple ou plus logique je serais heureuse de l'entendre.
Merci


RE: Je cherche la logique :'( - Xenos - 28-05-2015

Salut,

Si tes stats sont en BDD, je procèderait ainsi (sinon, si elles sont dans un array PHP par exemple, il faudra adapter un peu et passer la partie SQL):

• Récupérer la liste des armes demandées par le joueur, et la mettre dans un array ($armes = $_POST['option'])

• Facultatif: La valider avec une whitelist (pour éviter d'avoir des armes qu'on sait inexistante en BDD, par exemple, vérifier que le nom de l'arme est alphabétique, de plus de 5 caractères et de moins de 30)

• Vérifier qu'il y a au moins 1 arme, et au plus 3 (sinon, un p'tit malin pourrait modifier le formulaire et avoir 12 armes); inutile de vérifier qu'elles sont toutes différentes si tu passes par le SQL (sinon, il faut le vérifier)

• Construire la requête SQL qui va chercher l'ensemble des stats de ces armes d'un seul coup (sous la forme d'une requête préparée, c'est mieux); la requête aura l'avantage de virer les doublons

• Exécuter la requête, récupérer son résultat, et le stocker dans un array associatif PHP

A partir de là, l'array associatif contient les armes choisies par le joueur, et leurs stats.
J'espère que la démarche te suffit, et que tu pourras faire le code seule Smile Sinon demande.


RE: Je cherche la logique :'( - Jade H - 28-05-2015

Wow merci de ta réponse rapide :O :$ !
Alors justement j'avais pensé au raisonnement que tu viens de me décrire mais c'est au moment de la construction de la requête que cela devient flou
Si on reprend mon code :
Code PHP :
<?php 
if(isset($_POST['option']))
{
var_dump($_POST['option']);
// le vardump est égale à un array contenant les valeurs des cases cochés.
foreach($_POST['option'] as $filtres)
{
echo
$filtres; // Ici echo $filtres représente chaque élément individuellement.
}
}

Comment puis je à partir de ces valeurs construire ma requête.
Je vais te montrer comment je procèdes pour mes requêtes préparées.

Code PHP :
<?php 
function recupSkill(){

$bdd = new PDO('mysql:host=localhost;dbname=test','root','');
$login = $_SESSION['login'];

$req2 = $bdd->prepare("SELECT * FROM skill B, skill_user C WHERE login = :login AND B.id = C.id_skill" );
$req2->execute( array('login'=>$login) );

while (
$donnee = $req2->fetchAll(PDO::FETCH_ASSOC))
{
return
$donnee;
}
}

Je ne vois pas comment je peux faire. Merci de ton aide


RE: Je cherche la logique :'( - niahoo - 28-05-2015

Déjà dans ton formulaire il te faudrait utiliser des identifiants numériques pour les armes, et non leurs noms. Mais avec les noms ça donnerait ça:


$markers = implode(',',array_fill(0, count($_POST['option']),'?'));
$q = $bdd->prepare("SELECT name, * FROM armes WHERE name IN ($markers)" );
$q->execute($_POST['option']);
// pour avoir un tableau avec les armes rangées par nom
$armes = $q->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
$armes = array_map('reset', $armes);
// pour avoir un simple tableau des armes
$armes = $q->fetchAll(PDO::FETCH_ASSOC);
// et le résultat exploitable :
var_dump($armes);

Je te laisse ajouter des var_dump à chaque étape pour regarder le contenu de $markers et du SQL généré, de $armes avant et après le 'array_map'.
Le code est un peu trop condensé mais tu peux cliquer sur les fonctions pour voir ce qu'elles font.

Bon et du coup tu as ton tableau avec les armes voulues.


RE: Je cherche la logique :'( - Xenos - 28-05-2015

str_repeat() sera plus lisible que implode(array_fill), non?


$q = $bdd->prepare(
"SELECT name, * FROM armes WHERE name IN (".str_repeat(count($_POST['option']), "?").")" );
Joli le FETCH_GROUP + reset Smile


RE: Je cherche la logique :'( - niahoo - 28-05-2015

Mais le str_repeat n'insère pas de virgules entre les '?', si ?

merci Smile


RE: Je cherche la logique :'( - Jade H - 28-05-2015

Merci Niahoo ! Je me rend compte qu'il y a tellement de fonctions que je ne connais pas.. ! C'est excellent le liens des fonctions !!
Je testerais ça quand je serais à la maison.
Merci beaucoup pour votre aide.


RE: Je cherche la logique :'( - Xenos - 28-05-2015

Effectivement, j'ai zappé les virgules... Je crois que je vais rentrer ! ^^