JeuWeb - Crée ton jeu par navigateur
Problèmatique charge SQL - 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 : Problèmatique charge SQL (/showthread.php?tid=6497)

Pages : 1 2 3


RE: Problèmatique charge SQL - Racktor - 12-11-2012

Avec vos réflexions j'ai donc faitle petit code suivant,e t effectivement ca va me permettre d’arrêter de charge des variables fixes :

$rep = mysql_query("SELECT `nom_variable`,`capacite`,`mo_occupe`,`cout_fonctionnement`,`temps_construction`,`planche_de_bois`,`bloc_de_pierre`,`poutre_en_fer`
FROM `info_batiment`");
$texte_constante = '<?php ';
while ($var = mysql_fetch_array($rep))
{
$texte_constante = $texte_constante.'define("$'.$var["nom_variable"].'_capacite", '.$var["capacite"].');';
$texte_constante = $texte_constante.'define("$'.$var["nom_variable"].'_mo_occupe", '.$var["mo_occupe"].');';
$texte_constante = $texte_constante.'define("$'.$var["nom_variable"].'_cout_fonctionnement", '.$var["cout_fonctionnement"].');';
$texte_constante = $texte_constante.'define("$'.$var["nom_variable"].'_planche_de_bois", '.$var["planche_de_bois"].');';
$texte_constante = $texte_constante.'define("$'.$var["nom_variable"].'_bloc_de_pierre", '.$var["bloc_de_pierre"].');';
$texte_constante = $texte_constante.'define("$'.$var["nom_variable"].'_poutre_en_fer", '.$var["poutre_en_fer"].');';
}

$texte_constante = $texte_constante.' ?>';
$chemin_rapport = '../espace_membres/constantes.php';
$fp = fopen($chemin_rapport, "wb");
fwrite($fp,$texte_constante);
fclose($fp);
Par contre en résultat j'ai un gros paquet de define, j'aimerais savoir si c'est possible d'aller a la ligne a chaque define.

Merci Sephi-Chan et Damocorp, je crois comprendre l'esprit (et l’intérêt d'un tel système) même si il me manque un peut de pratique pour tout saisir.

Quand j'aurais un dédié cette fonction pourra m'aider mais en attendant je vais rester sur la technique ci-dessus.
PS : dans ce contexte, est ce que je peux utiliser var_export() pour améliorer le script ?


RE: Problèmatique charge SQL - Sephi-Chan - 12-11-2012

Je partirais plutôt sur de la génération de tableaux associatifs. Comme ça :


// Code pour générer le fichier `data/buildings.php` qu'il suffit d'inclure.
<?php

$buildings = [];
$resource = mysql_query("SELECT nom_variable, capacite, mo_occupe, cout_fonctionnement, temps_construction​, planche_de_bois, bloc_de_pierre, poutre_en_fer FROM info_batiment");

while ($result = mysql_fetch_assoc($resource)) {
$name = $result['nom_variable'];
$buildings[$name] = array();
foreach ($result as $key => $value) {
$buildings[$name][$key] = $value;
}
}

$code = '$BUILDINGS = ' . var_export($persons, true) . ';';
file_put_contents('./data/buildings.php', $code);


// Tronche du code généré dans ce fichier :
$BUILDINGS = array(
'forge' => array(
'nom_variable' => 'forge',
'capacite' => 0,
'mo_occupe' => 0,
'cout_fonctionnement' => 0,
'temps_construction​' => 0,
'planche_de_bois' => 0,
'bloc_de_pierre' => 0,
'poutre_en_fer' => 0
)
);


// Comment tu peux l'utiliser :
$BUILDINGS['forge']['capacite']



RE: Problèmatique charge SQL - Xenos - 12-11-2012

Le retour à la ligne se fait de deux façon dans un texte brut (note: $n = $n."truc" est équivalent à $n .= "truc"):

Soit en créant un retour à la ligne dans la chaîne de texte:
Code :
$texte_constante .= 'define("$'.$var["nom_variable"].'_capacite", '.$var["capacite"].');
';
C'est une des raisons pour lesquelles le ";" termine les ligne de code: cela permet, dans PHP, d'étaler un texte entre guillemets sur plusieurs lignes ce que ne permet pas, je crois, JAVA (par exemple).

Soit en utilisant "\n" (ou "\r\n" ou "\n\r", je ne sais plus bien, mais "\n" tout seul marche très bien):
Code :
$texte_constante .= 'define("$'.$var["nom_variable"].'_capacite", '.$var["capacite"].');'."\n";

Attention: entre apostrophes ' ', \n ne sera pas remplacé: '\n' restera, en toutes lettres, un simple \ suivit d'un n: \n.
Entre guillemets, les caractères échappés (\n, \r, \t et surement d'autres encore) sont remplacés par leur équivalent: pour \n, l'équivalent est un retour à la ligne.

Donc:
'\n' => \n
"\n" => <retour à la ligne>

Rien ne t'empêche d'utiliser la méthode de Sephi Chan pour autant (méthode plus élégante d'ailleurs, je trouve).

Note: j'ai un doute quant à la légalité d'utiliser un "$" dans le nom des constantes. Personnellement, j'éviterai. Mes constantes respectent la convention suivantes et se nomment toutes sous la forme:
__CONSTANTENAME__ (exemple: __CAPACITE__, le nom étant toujours en majuscules).

Je ne suis pas certains que le signe "$" soit bien accepté...


RE: Problèmatique charge SQL - niahoo - 13-11-2012

Si tu mets un '$' tu ne pourras y accéder que par constant('$maConstante');

Par convention il faut les nommer en majuscules, par contre, pour ce qi est de les entourer d'underscores, je vois pas l'intérêt...

Si tu as peur des clash de namespaces, tu peux utiliser justement un namespace, ou les mettre dans une classe.

Code :
class C {
    const  capacite = 'azerty';

}

C::capacite



RE: Problèmatique charge SQL - Xenos - 13-11-2012

Les underscores, c'est une simple convention perso, pour n'avoir que les constantes lors de l'auto-complétion (si je tappe "__", l'auto-complétion va me fournir toutes les variables commençant par "__", et donc, avec cette convention, elle ne m'affichera que les constantes).


RE: Problèmatique charge SQL - Racktor - 14-11-2012

je me doute que c'est pas trés conventionnel mais c'est pour ne pas a avoir a modifier l'ensemble des variables utilisées dans le jeu.

Est-ce vraiment si important d'utiliser des majuscules ?

Avec la méthode de Sephi Chan, je vois bien que c'est mieux présenter.

Pour mes calculs je ne devrais mettre que $BUILDINGS['forge']['capacite'] par exemple pour avoir la valeur correspondante ?
Je trouve ca plus intuitif même pour moi.

PS : pourquoi j'ai une erreur de syntaxe avec $buildings = []; ?


RE: Problèmatique charge SQL - julp - 14-11-2012

(14-11-2012, 03:25 PM)Racktor a écrit : PS : pourquoi j'ai une erreur de syntaxe avec $buildings = []; ?
La syntaxe alternative [ ... ] équivalente à array( ... ) a été introduite en 5.4.0. Elle n'est donc valable que pour PHP >= 5.4.0.


RE: Problèmatique charge SQL - Sephi-Chan - 14-11-2012

Désolé, réflexe de Ruby/Javascript. Effectivement ce sucre syntaxique à fait son apparition dans les versions récentes de PHP. Sinon c'est $buildings = array();.


RE: Problèmatique charge SQL - Racktor - 14-11-2012

Ha d'accord, je n'avais pas pensé à la version de php merci ^^


RE: Problèmatique charge SQL - Xenos - 14-11-2012

Les majuscules, c'est "pas important", c'est simplement une convention usuelle (un peu à l'image de la convention d'écriture JAVAdoc: pour documenter un code, il devient usuel d'utiliser la syntaxe d'une javadoc, pourtant, c'est pas "important", au sens où rien n'oblige à respecter la javadoc, d'un point de vue de l'ordinateur).