JeuWeb - Crée ton jeu par navigateur
Condition et Sql [résolu] - 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 : Condition et Sql [résolu] (/showthread.php?tid=5550)



Condition et Sql [résolu] - piratequentin - 14-07-2011

Bonjour,
voila aujourd'hui je viens vous poser une petite question toute bête mais qui me pose problème.
1.commençons par dire que j'ai la table ressources qui contient plusieurs champs:

id| metal| timestamp| joueur(Id joueur)| bois| level_bucheron| level_mine|roche| level_carriere
------------------------------------------------------------------------------------------
1 | 100 |1310579478| 1 | 100| 1 | 0 | 100 | 0

Disons que je suis le joueur n°2 et que je n'ai pas encore de table créé pour moi, je veux donc en créer une mais seulement si je n'en ai pas.

J'ai pensé à quelque chose comme ceci mais ce n'est pas très concluant:


<?php
session_start();
$id=$_SESSION['userid'];
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=*****;dbname=*****', '*****', '*****', $pdo_options);
$reponse = $bdd->query("SELECT * FROM ressources WHERE id= ' " . $id ." ' ");
while ($donnees = $reponse->fetch())
if($donnees['id'] = null)
{
mysql_query('insert into ressources(joueur, metal, bois, pierre, level_carriere, level_mine, level_bucheron) values ("'.$id.'", "0", "100", "100", "0", "0", "1")');
}
//...
?>

Voila et mon problème c'est que la table ne se créer pas, j'ai aussi essayer d'ajouter cette table lors de l'inscription mais ça ne fonctionne pas donc je ne vois pas trop ce que je peut faire ^^.

Ps: Quelqu'un sait comment mettre les balises Code au format php pour colorer le texte?


Cordialement piratequentin.


RE: Condition et Sql - php_addict - 14-07-2011

la structure de tes tables n'est pas bonne

dans ta table joueur tu doit avoir uniquement les données des joueurs (id, pseudo, sexe, etc...)

si tu as des bâtiments j'imagine que tu doit avoir des villages dans ton jeu, donc tu doit avoir une table villages qui ne doit contenir que les infos du villages (coordonnées, a qui appartient le village, etc...)

et tu doit avoir une table bâtiments qui ne doit contenir que les infos sur les bâtiments (a quel village appartient le bâtiments , niveaux, production, etc...)

apres si tu veux connaitre tout les bâtiments de tel village tu fais une jointure SQL entre ta table villages et bâtiments

imagiens avec ta structure telle qu'elle est le jour où tu veut modifier le taux de production de ta carrière!!! l'enfer absolue !

est ce clair ?


RE: Condition et Sql - piratequentin - 14-07-2011

Je pense que ma table est bonne, j'ai déjà une table utilisateur:
id username password email avatar signup_date

Joueur est juste une vérification pour être sur que c'est bien le bonne Id.


RE: Condition et Sql - Dexyne - 14-07-2011

Pour mettre le code en couleur tu dois ajouter =PHP après le [code (de la première balise).

Je pense que tu peux modifier tes tables de façon à avoir une table bâtiments / métiers où tu placerais level_bucheron (et tous les autres level_ dedans).
Ensuite pourquoi vouloir ajouter une table ? Sachant qu'avec un insert ce n'est pas possible. Tu veux sans doute dire une ligne ?

Et si tu fais if($donnees['id'] = null)tu auras toujours un id null... remplace le par if($donnees['id'] == null) ou if($donnees['id'] != null) selon ce que tu veux tester.

Par contre j'ai du mal à saisir pourquoi tu sélectionnes tout de ressources alors que tu n'utilises que l'id ? (tu utilises le reste plus loin ?)


RE: Condition et Sql - piratequentin - 14-07-2011

Ha oui je comprend pour avoir qu'un seul script d'update avec des variables c'est ça?
Pour les ressource, je fait un insert juste en dessous.
Et merci je vais essayer tout de suite.

Edit: Il ne se passe toujours rien dans ma BDD, je vais essayer d'insérer tout dans une bdd à l'inscription.


RE: Condition et Sql - php_addict - 14-07-2011

(14-07-2011, 05:03 PM)piratequentin a écrit : Edit: Il ne se passe toujours rien dans ma BDD, je vais essayer d'insérer tout dans une bdd à l'inscription.

forcement, un INSERT INTO ne va pas créer ta table mais juste inserer dans ta table...c'est pas CREATE TABLE que tu cherche ???

en fait je ne comprends pas très bien ton souci...

et par convention on met les commandes SQL en majuscule INSERT TO et non insert to


RE: Condition et Sql - piratequentin - 14-07-2011

Ha pardon ^^'' en ce moment j’oublie un peu tout donc ça m'aide pas, je vais réessayer et on verra bien.
Edit= C'est bien un insert into qu'il me faut, je veut rajouter une ligne pas créer une table ^^


RE: Condition et Sql - Maugrey - 14-07-2011

Au delà du fait que la structure de ta table n'est peut-être pas optimisée, et que tu as l'air de confondre table et ligne, ton script n'est pas cohérent.

Le but du script, si j'ai bien compris, c'est d'ajouter une ligne de ressource de l'utilisateur, si la ligne n'existe encore pas.

Tout d'abord tu fais ça :
$reponse = $bdd->query("SELECT * FROM ressources WHERE id= ' " . $id ." ' ");

Mais le champ id, c'est la clé de ta table de ressource ? Il faudrait plutôt que tu fasses le test sur le champ joueur qui correspond à l'id du joueur que tu veux tester.


Ensuite tu parcours tes données avec fetch.
Et pour chacune des lignes, tu teste si id est null.

Mais c'est impossible que id soit null, c'est la clé primaire de ta table.

Si ton utilisateur n'a pas de ressource, ce n'est pas la valeur d'id qu'il faut que tu teste (car elle sera toujours non null), mais la présence, ou plutôt l'absence de ligne dans ton résultat.


RE: Condition et Sql - piratequentin - 14-07-2011

Donc je dois tester joueur, c'est vrais que je ne suis pas cohérent car je dit que joueur est là pour vérifier si c'est le bonne id et moi je vais regarder dans id Confusediffle:.


RE: Condition et Sql - piratequentin - 14-07-2011

Bon voila j'ai utilisé une toute autre méthode et ça fonctionne, merci d'avoir perdu du temps pour quelque chose que je pouvait faire moi même mais n'ai pas réussi tout de suite.

Cordialement piratequentin.

(Le sujet passe en résolu)