JeuWeb - Crée ton jeu par navigateur
Question loop et duplicate - 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 : Question loop et duplicate (/showthread.php?tid=4897)

Pages : 1 2


Question loop et duplicate - sadira - 09-06-2010

Bonsoir, j'ai une requête qui va chercher les enregistrements dans ma table:
Code :
$result = $db->query("SELECT * FROM equipement WHERE iduser = '".$user['uID']."'");
while($row = mysql_fetch_array( $result )) {

Je boucle et j'assigne des variables à chaque, par exemple:

Code PHP :
<?php 
if ($row['idtroupe']==1) {
$ss1 = $row['idtroupe'];
$nombre1 = $row['nombre'];
}
if (
$row['idtroupe']==2) {
$ss2 = $row['idtroupe'];
$nombre2 = $row['nombre'];
}

Si l'id trouvé est égal à 1, j'assigne la valeur et je récupère le nombre, idem pour 2, 3, etc

Mon problème est qu'il se peut qu'il y ai deux entrées pour l'idtroupe, et que je souhaiterai que $nombre2 soit le cumul des valeurs de plusieurs entrées.
Je n'arrive pas à formuler en PHP le "si double valeur retournée, additionne le contenu des valeurs nombre de ces X entrés"

Auriez-vous une solution?
Merci pour votre aide

PS: Ma table: [Image: 100609114444155673.gif]


RE: Question loop et duplicate - php_addict - 09-06-2010

salut

je pense que ta façon de récupérer les données de la base de donnée n'est pas bonne, tu devrais plutot faire ceci:

Code PHP :
<?php 
$result
= $db->query("SELECT * FROM equipement WHERE iduser = '".$user['uID']."'");
$donnees=$result->fetchAll(PDO::FETCH_ASSOC);
//
// ici tu peut faire un print_r($donnees) pour voir a quoi ressemble le tableau $donnees
//
foreach($donnees as $t)
{

}

lis le topic suivant et notamment au sujet de Fetch et FetchAll (et leurs option : PDO::FETCH_ASSOC , PDO::FETCH_NUM et PDO::FETCH_BOTH)

--> http://www.jeuweb.org/showthread.php?tid=6245&highlight=PDO


RE: Question loop et duplicate - Sephi-Chan - 09-06-2010

Je pense que tu cherches à compter les troupes de chaque type, non ? Si c'est bien ça, voici la requête qu'il te faut :


$query = sprintf("SELECT idTroupe, SUM(nombre) AS nombre FROM equipement WHERE iduser = %d GROUP BY idTroupe;", $user['uID']);


Au passage : on ne met pas de guillemets autour d'un nombre, mais uniquement autour des chaines de caractères.


Sephi-Chan


RE: Question loop et duplicate - sadira - 10-06-2010

Merci beaucoup pour votre aide rapide.

> php_addict: Je vais regarder PDO de plus prés. Merci pour cette information.

> Sephi-Chan: En fait je cherche à créer 24 entrées dans un select, chacune contenant le nombre de troupes avec un equipement, mais je vais tester SUM et sprintf. Merci pour l'info sur les guillemets, mauvaise habitude que j'ai ><
Parfait, SUM(nombre) marche parfaitement.
Mon erreur était d'ecrire
Code :
$nombre1 = $row['nombre'];
au lieu de
Code :
$nombre1 = $row['SUM(nombre)'];

Encore merci pour ces informations plus qu'utiles !


RE: Question loop et duplicate - Anthor - 10-06-2010

Tu es sûr que cela fonctionne en assignant un bout de requêtes ?


RE: Question loop et duplicate - sadira - 10-06-2010

Parfaitement oui, je viens de le tester sur mon select de 24 entrées et les résultats sont tous exacts.


RE: Question loop et duplicate - Anthor - 10-06-2010

Je peux voir ton code ?


RE: Question loop et duplicate - sadira - 10-06-2010

Euh... oui Smile mais je précise que je suis pas du tout développeur, alors le code est sans doute de mauvaise qualité mais je code pour ensuite confier le projet à un vrai dev, qui aura une base visuelle pour comprendre tout.

Premier select, va chercher les objets de l'utilisateur et leur correspondance dans la table objets:
Code :
<?php
echo '
<select name="websites3" id="websites3" style="width:260px;" >';
$result = mysql_query("SELECT ouID,ouIDobj,ouIDuser,ounombre FROM objetuser WHERE ouIDuser=\"$user[uID]\" AND ounombre>'0' ORDER BY ounombre DESC ");
while ($tab = mysql_fetch_array($result)) {
$result2 = mysql_query("SELECT * FROM objet WHERE oID = '$tab[ouIDobj]' AND Typeo!='1' AND Typeo!='999'");
while ($tab2 = mysql_fetch_array($result2)) {
echo '<option  value="'; echo "$tab2[oID]"; echo '"  title="../images/objmini/'; echo "$tab2[oID]"; echo '.png">'; echo "$tab2[oname]"; echo " ("; echo "$tab[ounombre]"; echo ")"; echo '</option>';
}
}
echo '</select>
';
?>

Second select qui va chercher plusieurs données, le nombre de troupes totale dans la table user (uSodat, uArcher, etc), et le nombre de troupes ayant un equipement dans la table equiptroopsuser (id de la troupe (de 1 a 24),id de l'utilisateur, id de lobjet et nombre).
Code :
<?php
$result = $db->query("SELECT idtroupe,idobj,iduser,SUM(nombre) FROM equiptroopsuser WHERE iduser = '".$user['uID']."' GROUP BY nombre");
while($row = mysql_fetch_array( $result )) {
if ($row['idtroupe']==1) {
$ss1 = $row['idtroupe'];
$nombre1 = $row['SUM(nombre)'];
$valueuser1 = $user['uSoldat'];
}
if ($row['idtroupe']==2) {
$ss2 = $row['idtroupe'];
$nombre2 = $row['SUM(nombre)'];
$valueuser2 = $user['uArcher'];
}

etc jusqu'a 24

ensuite je fais mon select avec 24 entrées potentielles si bien sur l'utilisateur possede ce type de troupes dans la table user

if ($user['uSoldat']==0) {
}
else {
    if ($nombre1=='') {
                //select simple
                echo '<option value="1" title="../img/facemini/1.jpg">';
                echo "Soldats (";
                echo $user['uSoldat'];
                echo ')</option>';
                }
                elseif ($nombre1!='') {
                //select avance
                if ($nombre1==$valueuser1) {
                }
                else {
                echo '<option value="1" title="../img/facemini/1.jpg">';
                echo "Soldats (";
                echo $user['uSoldat']-$nombre1;
                echo ')</option>';
                }
                }
}

Etant donné qu'on peut assigner 3 epées à 5 soldats, et 1 glaive au soldat restant, je ne fais pas d'update mais un create table aprés avoir récupéré les variables du formulaire
Code :
$db->query("INSERT INTO equiptroopsuser (`iduser`,`idtroupe`,`idobj`,`nombre`) VALUES ('" . $user['uID'] . "','$idorigin2','$idorigin','$numberitemcheck')");
$db->query("UPDATE objetuser SET ounombre = ounombre-$numberitemcheck WHERE ouIDobj = $idorigin AND ouIDuser = '".$user['uID']."'");

Voila une vidéo du résultat:
Exemple vidéo


RE: Question loop et duplicate - Anthor - 10-06-2010

Ok, tu utilises le SUM ensuite ^^ C'est le passage dans une variable qui me paraissait bizarre.


RE: Question loop et duplicate - srm - 10-06-2010

Petit commentaire concernant la remarque de php_addict, n'utilise surtout pas fetchAll, ton script va exploser en mémoire plus ta table est grosse. Utilise les itérateurs de PDO.