Recuperation de données...

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 : Recuperation de données...

par Ryle » 01 avr. 2008, 15:48

Modération :
tetaklak123hop, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

par tetaklak123hop » 01 avr. 2008, 15:10

MERCI BEAUCOUP A VOUS :)

J'ai grace a votre aide, réussi (enfin...) a recuperer mes valeurs dans mon pti tableau, et tout :)

C'EST MERVEILLEUX :)

Seulement, maintenant, c'est l'utilisation de ces données qui me pose probleme...

Mais promis, je vais faire comme pour mon tableau, me donner un maximum de 3 jours a taper ma tete aux murs avant de recourrir a vos services :)

Merci encore pour votre aide et votre patience

par Ryle » 01 avr. 2008, 14:24

En fait, ta variable $row est un tableau de tableaux. A chaque index, tu as associée la valeur retournée par mysql_fetch_row(), c'est à dire un tableau indexé. Du coup le implode ne fonctionne pas, puisqu'au lieu de chaines dans ton tableau $row, il trouve d'autre tableaux et te l'écrit en toute lettre :Array :)

Modifie ta fonction comme ceci et utilise ensuite le implode, cela devrait mieux fonctionner :
function GetMeteoDate($mesure,$date) { 
  $tab = array(); // on défini le tableau qui va contenir les résultats
  $requet = "SELECT `".$mesure."` FROM meteoactuelle WHERE `Date` = '".$date."'" ; 
  $result = mysql_query($requet); 

  if (!$result) { // en cas d'erreur
    echo 'Impossible d\'exécuter la requête : ' . mysql_error(); 
  }   

  while ($row = mysql_fetch_row($result)) { // pour chaque enregistrement retourné
    $tab[] = $row[0]; // ajoute le premier élément dans le tableau $tab
  } 

  return($tab); // retourne le tableau renseigné
}

Un p'tit conseil quand tu fais un print_r(), ajoute des balises "pre" autour, ça le rend plus lisible :) :
echo '<pre>';
print_r($tonTableau);
echo '</pre>';

par tetaklak123hop » 01 avr. 2008, 13:43

$values = implode(",",$row);
	
	echo $values;
:shock: Il me retourne

"Array,Array,Array,Array,Array"

C'est a n'y rien comprendre :)

Mais quand je fais un print_r($row) il m affiche toujours

Array ( [0] => Array ( [0] => 21 ) [1] => Array ( [0] => 31 ) [2] => Array ( [0] => 21 ) [3] => Array ( [0] => 22 ) [4] => Array ( [0] => 48 ) )

qui comprend mes bonnes valeurs :'(

Je ne sais pas trop ce que j'ai fait... Perdu...

par caroube » 01 avr. 2008, 12:28

L'apostrophe inversée (`) n'existe que pour MySQL et ne sert qu'à protéger les noms de champs que le dba n'a pas été fichu de nommer correctement :P (genre nommer un champ "Date" alors que c'est un mot clé sql réservé ;))
Ou les encore plus comiques qui s'amusent à créer des tables ou des noms de colonnes avec des espaces :twisted:

Code : Tout sélectionner

ALTER TABLE `ma table` ADD `une colonne` TINYINT NOT NULL ;

par Ryle » 01 avr. 2008, 12:25

Tu veux dire une fonction qui rassemble les éléments d'un tableau dans une chaine en les séparant par un caractère spécifique, comme le fait implode() ? :)

par tetaklak123hop » 01 avr. 2008, 11:45

Bien joué guilt42 :)

As tu une technique pour mettre ce "row" sous la forme par exemple
"$Temperature,$Temperature,$Temperature,$Temperature,$Temperature"
(chaine de caracteres, séparés par des virgules)

afin de l utiliser dans une fonction qui vice a dessiner des courbes??????

En tout cas, un GRAND MERCI pour votre efficacité et votre rapidité a répondre :)

par guilt92 » 01 avr. 2008, 11:39

Si tu n'attribues qu'une valeur à $row[0] ceci est logique... Essaye plutôt de te servir de ta valeur $cpt ;)

par tetaklak123hop » 01 avr. 2008, 11:37

Je me suis appercu que ma rage me fait faire des erreurs :)
J'avais remarqué le probleme de $date, que j'ai résolu...

Maintenant, un ami m'a conseillé de faire de cette facon...
function GetMeteoDate($mesure,$date)
	{
	echo("$date<br>"); 
	echo("$mesure<br>");
	$requet = "SELECT `$mesure` FROM meteoactuelle WHERE `Date` = '$date' " ;
 	$result = mysql_query($requet);
	$nb_ligne = mysql_num_rows($result); 
		for($cpt=0;$cpt<$nb_ligne;$cpt++) 
 		 	{
		 	$row[$nb_ligne] = mysql_fetch_row($result);
		 	}
		if (!$result) 
			{
   			echo 'Impossible d\'exécuter la requête : ' . mysql_error();
			}  
 	return($row);
	}
Et ca me retourne ceci lors d'un print_r($array); :

2008-01-03
Temperature
Array ( [5] => Array ( [0] => 48 ) )
Pourriez vous m'expliquer la signification de ce retour?????...

Faute de pouvoir mordre mon chef, je vais me rendre chez mon Mr Bricolage actuel, acheter une corde, et trouver un platane solide...

par Ryle » 01 avr. 2008, 11:09

Ta fonction renseigne une variable $Temperature et retourne la variable $array :)

Par ailleurs la ligne : $date = 2008-03-01; affecte la valeur 2004 à $date (2008-3=2005-1=2004). Si tu veux utiliser la date dans ta requête SQL, c'est une chaine de caractère qu'il te faut utiliser et donc $date = '2008-03-01';



A noter enfin que la variable $Temperature est écrasée à chaque itération de ta boucle while. dès lors, seule la dernière valeur sera conservée. S'il n'y a qu'une seule valeur à récupérer, le while est inutile :
$array = mysql_fetch_array($result);
$Temperature = $ligne[0];
Si toutefois il peut ne pas y avoir d'information, alors un simple if() suffit :
if ($array = mysql_fetch_array($result))  
{                   
  $Temperature = $ligne[0];  
} 
Fondamentalement, ça ne change absolument rien et ton code fonctionnera de toute façon. Ca témoigne juste d'une plus grande maitrise des données que tu manipules et c'est amha, beaucoup plus explicite pour la maintenance ou l'évolution :)

par tetaklak123hop » 01 avr. 2008, 10:36

Donc, ma fonction fonctionne (a priori), et recupere les données dans la base.
Mais impossible d'afficher le tableau...

Ceci récupere les données dans ma base...
(a noter que ma fonction ne s'apelle plus GetMeteoInstant(), mais GetMeteoDate()...)
function GetMeteoDate($mesure,$date)
	{
	$requet = "SELECT `$mesure` FROM meteoactuelle WHERE `Date` = '$date' ";
 		if($result = mysql_query($requet)) 
 			{
   				while($array = mysql_fetch_array($result)) 
    				{      			
      				$Temperature = $ligne[0]; 
      				}
 			}
 		else 
 			{
   			echo ("Erreur de requête de base de données.");
 			}
	return($array);
	}
Et aucun message d'erreur ne s'affiche, j'en conclut donc que mes données sont récupérées.
Voici comment je l'apelle...
        $date =  2008-03-01;
	$mesure = 'Temperature';
	$this->ConnectBdd("meteodeurs");
	$array = $this->GetMeteoCourbes($mesure,$date);
	$this->DeconnectBdd; 
	print_r($array);
A priori, ce p'tit bout de code devrait definir les variables, connecter la base, RECUPERER les données a l'aide de la fonction vue précédemment, puis afficher le contenu de ma variable $array..

Mais NIET... :evil:

Ca fait un moment que je me casse le crane, et si je trouve pas, je vais commencer a faire de l'écume et mordre mon chef de projet :lol:

par Ryle » 01 avr. 2008, 10:14

A noter par ailleurs qu'en sql, les apostrophes pour délimiter une chaine sont les apostrophes classiques : '
L'apostrophe inversée (`) n'existe que pour MySQL et ne sert qu'à protéger les noms de champs que le dba n'a pas été fichu de nommer correctement :P (genre nommer un champ "Date" alors que c'est un mot clé sql réservé ;))

Ta requête devrait ressembler à ceci :
"SELECT `$mesure` FROM meteoactuelle WHERE `Date` = '$date' "
Tu peux ensuite sortir les variables pour les distinguer plus facilement :
"SELECT `".$mesure."` FROM meteoactuelle WHERE `Date` = '".$date."' "
L'idéal étant au final de bien choisir les noms de tes champs pour te débarasser des ` et être compatible avec n'importe quel SGBD :
"SELECT ".$mesure." FROM meteoactuelle WHERE date_jour = '".$date."' "
HTH :)

par Berzemus » 01 avr. 2008, 09:48

déjà, un petit '$' de plus devrait un peu arranger les chôses..
 $array = $this->GetMeteoInstant("Temperature","2008-01-03");
Après, 'faut voir.. :wink:

(et pour visualiser le contenu d'un tableau, print_r est plus conseillé qu'echo)

Recuperation de données...

par tetaklak123hop » 01 avr. 2008, 09:45

Bonjour a tous.
Je vous explique ma situation.

J'ai a récuperer dans une base de données, des relevés météo en fonction de la date, fin d'en faire une représentation graphique...
J'ai donc dans ma classe C_BPP.php un e fonction du type:

Code : Tout sélectionner

function GetMeteoInstant($mesure,$date) { $requet = "SELECT `$mesure` FROM meteoactuelle WHERE Date = `$date`"; $result = mysql_query($requet); $array = mysql_fetch_array($result); return $array; }
$mesure correspond au champ a selectionner, et $date, comme son nom l indique, correspond a la date selectionnée.

Dans ma classe C_GSM, j'ai une fonction qui comprend ce ptit bout de code:


Code : Tout sélectionner

$this->ConnectBdd("meteodeurs"); $array = this->GetMeteoInstant("Temperature","2008-01-03"); echo $array; $this->DeconnectBdd;
Il faut savoir que ma classe est definie avec

Code : Tout sélectionner

class C_GSM extends C_BDD
afin qu'elle hérite de ma classe C_BDD.

Seulement, lorsque je lance tout ca, ca m'affiche une erreur qui est la suivante:

Parse error: syntax error, unexpected T_OBJECT_OPERATOR in C:\xampplite\htdocs\SiteGSM\PagePerso\C_GSM.php on line 842

La ligne 842 correspond a

Code : Tout sélectionner

$array = this->GetMeteoInstant("Temperature","2008-01-03");
Merci a celui ou celle qui éclairera mes méninges, qui sont actuellement dans un brouillard indéfinissable...