Bdd et array()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Bdd et array()

par Florent » 23 mars 2007, 20:43

Et oui.....
Je pense que c'est ce que je vais faire.
Aller hop, je vais prendre des cours sur les tableaux à deux dimenssions.
Merci.

par orgerix » 23 mars 2007, 20:41

Une alternative serait de rentrer toutes les info de chaque case dans un tableau à deux dimension, puis après manipuler le tableau suivant tes besoins. Ca évitera de faire plusieurs requete SQL.

par Florent » 23 mars 2007, 20:11

J'y avais pensé mais je ne peux pas.

Imagine une grille de 50 x 50 carrés.
je place un pion en plein millieu par exemple.

Maintenant je veux afficher une grille de 7 x 7 contenant mon pion et au centre.

Si je prend les 49 carrés qui se suivent, j'aurais une ligne et pas une grille.
je ne sais pas trop si je m'explique bien :?

par Aureusms » 23 mars 2007, 20:03

Bonjour,

Pourquoi ne fais tu pas :
$sql = "SELECT id, objet,nom_proprio FROM parcelle";
$req=mysql_query($sql); 

$i=0; // si tu veux démarrer à 0
while ($resultat = mysql_fetch_array($req)) {

         $tableau[$i]["id"] = $resultat["id"];
         $tableau[$i]["objet"] = $resultat["objet"];
         $tableau[$i]["nom_proprio"] = $resultat["nom_proprio"];

         $i++; // si tout va bien $i arrivera à 49
         }
comme cela tu auras un tableau indexé numérique avec toutes les valeurs.
Tu peux ensuite retravailler dans le tableau à loisir.

Ensuite vérifie quand même que le tableau est celui que tu voulais...A++

Bdd et array()

par Florent » 23 mars 2007, 14:07

Bonjour
J'affiche une portion de carte. Cette carte contient 2500 cellules (50 x 50), chacune inscrite dans une table nommée Parcelle.

Chaque joueur possède une cellule et son nom est dans cette table.
J'affiche juste une portion de cette carte de 7x7.
Chaque cellule fait 32px.

Grace à une boucle, je parcours la table et suivant la valeur de "objet", j'affiche une icone à la position correspondante.

L'ennui c'est que je fais 49 requêtes (7x7). je pense que la bonne méthode serait plutôt de lire la table une fois,et mémoriser le tout dans un array .
Voici mon code avec commentaire, un peu archaique mais j'ai touvé ça tout seul ;) :
$id = $_SESSION['id'];

// obtenir id du joueur
$sql = "SELECT id FROM parcelle WHERE id_proprio = '$id' AND objet='1'";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);

$id_ville = $data['id']; // id village

//empêcher de dépasser les extremes
//le 24 et 48 est pour afficher l'objet du joueur au centre de la carte

$limite_inf = $id_ville - 24; if($limite_inf <= 0){$limite_inf = 1;}
$limite_sup = $limite_inf + 48;if($limite_sup > 2500){$limite_sup = 2502;}

// afficher la portion de carte
echo '<div id="carte">';
$x = 0;
$y = 0;
$cp = 0;

for ($i=$limite_inf;$i<=$limite_sup;$i++){

	$sql = "SELECT objet,nom_proprio FROM parcelle WHERE id='$i'";
	$req=mysql_query($sql);
	$data = mysql_fetch_array($req);
	$chef = $data['nom_proprio'];
	
        // afficher l'icone suivant valeur de objet, je prend ici que le premier cas : 1
	if ($data['objet'] == 1 ){
		echo '<span style="position: absolute; width: 32px; height: 32px;left: ',$x,'px; top:',$y,'px;"title="',$chef,'">';
		echo '<img class="s_bord" src="deco_2/village.png">';
		echo '</span>';
	}
	
	
	$x = $x + 32; //décalage de 32 px car icone = 32x32px
	$cp =$cp + 1;
        // si bout de ligne gauche atteint, on décale de 32px vers le bas pour changer de ligne donc $y auguement de 32 px, et $x repart à 0 (bord droit)
	if ($cp == 7) {$cp = 0; $y = $y + 32; $x = 0;}
}
Il est possible que je n'utilise pas la bonne méthode. Surtout avec ces 49 requêtes.
L'idée de l'array est-elle bonne ou suis-je carrément à côté de la plaque ?