Kommunauty
Connexion
Inscription

[xNova 2009.4] Recuperation de donnée dans la base de donnée


Dudule Messages : 17

Bonjour,

J'ouvre un sujet car je viens de passer ma soirée de hier à retourner dans tout les sens mon soucis sans trouver son origine.

Je rappelle que je suis débutant, et je sens la grosse subtilité derrière tout ça.

Aujourd'hui je veut modifier la mission extraire. Car les extracteurs ramènes trop, et surtout les personne connecté h24 y trouve un trop grand avantage.

J'ai donc modifier la durée d'extraction, de 1h à 8h, sans soucis particulier.

Ensuite suite à chaque actualisation, suivant ce que la flotte est capable de ramener, j'ai fait un if.

Si cela dépasse une valeur max ( écrite en dur pour le moment ) tu met à jour la quantité de métal ou de cristal au max ( a la valeur max ).

Cela fonctionne parfaitement.

Maintenant je voulais faire un truc pas trop mal dans la logique des choses.

Faire la moyenne des points des 5 premiers. Cette moyenne représentant la progression de l'univers.

A partir de cette moyenne, faire un pourcentage quelconque ou autre, qui remplacera ma valeur max écrite en dur pour le moment.

Alors pour commencer j'ai donc voulu essayer (j'y vais toujours par étape) de récupérer une ligne de la table game_statpoints.

J'ai donc choisi d'essayer de récupérer la valeur de "total_points" pour l'enregistrement qui a les valeur suivante :

stat_type = 1

stat_code = 1

id_owner = 5

J'ai bien entendu vérifier que il y a bien un enregistrement existant, et qu'il y ai pas de doublon.

Donc voici mon code :


$UserPoints = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". 5 ."';", 'statpoints', true);

$toto=$UserPoints['total_points'];

message($toto);

Le problème c'est que ça ne me retourne rien.

Normalement message($toto); devrais me retourner le nombre de point de la ligne en question dans la BDD.

Mais au final je n'ai rien.

Si je fait un :


message($UserPoints);

Je devrais avoir comme message "array", car ma sélection correspond à un tableau.

Mais rien non plus.

J'ai essayer en prenant moins de valeur en compte dans mon doquery. Ca ne marche pas non plus.

Sans modifier autre chose que le nom de la table, et des nom de colonne pour adapter ma requête dans une autre table par exemple la table fleet j'arrive a récupérer les informations sans soucis. Donc a priori ma syntaxe est bonne !

Alors je me demande si il y à une déclaration des tables qu'on va parcourir à faire ou du genre... car la je bloque ma syntaxe est normalement bonne...

La seule différence est que cette table statpoints, n'as pas de colonne avec un incrémentiel.... Je sais pas si ça y joue.

Merci de votre aide !

mardi 25 juin 2013

Homer Messages : 1814

Salut,

tu met :

$UserPoints = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". 5 ."';", 'statpoints', true);

Dans ce bout de code, tu présente 5 comme étant une variable, et non pas un chiffre défini.

Essai ça :

$UserPoints = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '5';", 'statpoints', true);
mardi 25 juin 2013 (Dernière édition mardi 25 juin 2013)

Dudule Messages : 17

Bonjour Homer,

Tout d'abord merci de ton aide !

Oui tout à fait, c'était l'un de mes multiples tests ! J'avais essayer ton code au départ en vain.

Je viens de re-essayer, et c'est toujours pareil !

mardi 25 juin 2013

Homer Messages : 1814

essai ça :

$UserPoints = doquery("SELECT * FROM {{table}} WHERE `id_owner` = '5';", 'statpoints', true);
mercredi 26 juin 2013

Dudule Messages : 17

Bonjour Homer,

Pas bête d'enlever des arguments et de faire une requête basique. Mais ça ne fonctionne pas non plus. J'ai aucun retour.

J'ai fait un test con, j'ai remplacer 'statpoints' par 'coucou', une table qui n'hesite pas ! Ben même resultat ! C'est un peu comme si ma page php ne connaissait pas cette table, ou n'arrivais pas a la trouver...

Pourtant ca marche très bien avec quasi toutes les autres table. J'ai eu le même probleme avec la table config. Qui elle aussi n'as pas d'id incrémentiel. Le problème ne viendrai t'il pas de la ?

Edit : pour etre sur que la requête soit bien excécuter et fonctionnelle j'ai aussi fait cela :

Remplacement de 'statpoints' par 'user'

et de 'id_owner' par 'id'

J'ai uniquement modifier cela afin de selectionner dans une autre table un enregistrement. Pas de soucis à ce moment la !

samedi 29 juin 2013 (Dernière édition samedi 29 juin 2013)

Homer Messages : 1814

dans ce cas essai de faire un SELECT* FROM {{table}}; et vois si ya une valeur de retour sur la table statspoint

samedi 29 juin 2013

Dudule Messages : 17

Bonjour Homer,

Alors voici ce que j'ai fait :


$UserPoints = doquery("SELECT* FROM {{table}};", 'statpoints');
var_dump($UserPoints);

Et voici le résultat : bool(false) bool(false)

Pourtant je n'ai pas de soucis sur d'autres table, exemple si je modifie en :


$UserPoints = doquery("SELECT* FROM {{table}};", 'users');
var_dump($UserPoints);

Voici le résultat : resource(124) of type (mysql result) resource(131) of type (mysql result)

dimanche 30 juin 2013 (Dernière édition dimanche 30 juin 2013)

Homer Messages : 1814

pas d'erreur dans le nom de la table ?

dimanche 30 juin 2013

Dudule Messages : 17

Bonsoir Homer,

Non ! malheureusement...

C'est à n'y rien comprendre !

Regarde mon screen shoot si dessous :

On vois bien la table "statpoints" juste au dessus de "users".

Une requête sur users marche sans soucis, mais sous statpoints... rien a faire !

Est t'il possible qu'une table soit locker ou je ne sais pas...

Voici des tests complementaire.

J'ai fait ceci :


$UserPoints1 = doquery("SELECT * FROM {{table}};", 'aks');
$UserPoints2 = doquery("SELECT * FROM {{table}};", 'alliance');
$UserPoints3 = doquery("SELECT * FROM {{table}};", 'config');
$UserPoints4 = doquery("SELECT * FROM {{table}};", 'fleets');
$UserPoints5 = doquery("SELECT * FROM {{table}};", 'galaxy');
$UserPoints6 = doquery("SELECT * FROM {{table}};", 'galaxy_s');
$UserPoints7 = doquery("SELECT * FROM {{table}};", 'lunas');
$UserPoints8 = doquery("SELECT * FROM {{table}};", 'messages');
$UserPoints9 = doquery("SELECT * FROM {{table}};", 'planets');
$UserPoints10 = doquery("SELECT * FROM {{table}};", 'rw');
$UserPoints11 = doquery("SELECT * FROM {{table}};", 'statpoints');
$UserPoints12 = doquery("SELECT * FROM {{table}};", 'users');

Et j'ai fait un var_dump de toutes ces variables.

J'ai pris que des tables qui ne sont pas vide.

Voici le résultat :

Table : aks

bool(false) bool(false) bool(false) bool(false) bool(false) bool(false)

Table : alliance

bool(false) bool(false) bool(false) bool(false) bool(false) bool(false)

Table : config

bool(false) bool(false) bool(false) bool(false) bool(false) bool(false)

Table : fleets

resource(127) of type (mysql result) resource(147) of type (mysql result) resource(171) of type (mysql result) resource(195) of type (mysql result) resource(215) of type (mysql result) resource(235) of type (mysql result)

Table : galaxy

resource(129) of type (mysql result) resource(149) of type (mysql result) resource(173) of type (mysql result) resource(197) of type (mysql result) resource(217) of type (mysql result) resource(237) of type (mysql result)

Table : galaxy_s

bool(false) bool(false) bool(false) bool(false) bool(false) bool(false)

Table : lunas

resource(132) of type (mysql result) resource(152) of type (mysql result) resource(176) of type (mysql result) resource(200) of type (mysql result) resource(220) of type (mysql result) resource(240) of type (mysql result)

Table : messages

resource(134) of type (mysql result) resource(154) of type (mysql result) resource(178) of type (mysql result) resource(202) of type (mysql result) resource(222) of type (mysql result) resource(242) of type (mysql result)

Table : planets

resource(136) of type (mysql result) resource(156) of type (mysql result) resource(180) of type (mysql result) resource(204) of type (mysql result) resource(224) of type (mysql result) resource(244) of type (mysql result)

Table : rw

resource(138) of type (mysql result) resource(158) of type (mysql result) resource(182) of type (mysql result) resource(206) of type (mysql result) resource(226) of type (mysql result) resource(246) of type (mysql result)

Table : stats points

bool(false) bool(false) bool(false) bool(false) bool(false) bool(false)

Table : users

resource(141) of type (mysql result) resource(161) of type (mysql result) resource(185) of type (mysql result) resource(209) of type (mysql result) resource(229) of type (mysql result) resource(249) of type (mysql result)

Si cela peut aider...

Un dump de mon mysql peut t'il aider ?

lundi 1 juillet 2013 (Dernière édition lundi 1 juillet 2013)

Dudule Messages : 17

Re-bonsoir Homer,

On ma conseiller de faire ceci :


<?php
$UserPoints = doquery("SELECT * FROM {{table}}", 'statpoints');
if (!$UserPoints) {
    die('Requête invalide : ' . mysql_error());
}

Voici le résultat :

Requête invalide : Table 'game_statpoints' was not locked with LOCK TABLES

Je sais pas ce que cela veut dire, je vais a la pèche aux infos, et je reviens

EDIT :

On m'a trouvé la solution :

Il faut rajouter ceci:


{{table}}statpoints WRITE,

Dans


doquery("LOCK TABLE .......");

Du fichier

/includes/functions/FlyingFleetHandler.php

Et la j'ai accès a ma table. Par contre j'ai demander quesque c'était cela, car je comprend pas à quoi ca sers

lundi 1 juillet 2013 (Dernière édition lundi 1 juillet 2013)

Page suivante »