stocker toutes les donnée d'une requete sql dans un tableau

Eléphanteau du PHP | 13 Messages

19 sept. 2006, 13:24

bonjour,

J'ai un petit soucis, j'ai créer une classe sql avec une fonction qui permet de retourner les résultats d'une requete :
public function get_data($ma_requete) {
$this-> querySql = mysql_query($ma_requete, $this-> connect);
while ($this-> data = mysql_fetch_array($this-> querySql)){}
return $this-> data;
}
Mon problème, c'est que $this->data ne retourne qu'une ligne de la table, je sais que l'on peut stocker $this->data dans un tableau (grace a la boucle while), mais je n'arrive pas à trouver la syntaxe correcte pour que mon tableau fonctionne.

merci d'avance.

Eléphant du PHP | 396 Messages

19 sept. 2006, 13:30

Tu veux pas plutôt retourner le tableau et le parcourir ensuite?

Eléphanteau du PHP | 13 Messages

19 sept. 2006, 13:41

En fait, ce que je veux, c'est éviter d'avoir ca dans la boucle while :
public function get_data($ma_requete) {
$this-> querySql = mysql_query($ma_requete, $this-> connect);
while ($this-> data = mysql_fetch_array($this-> querySql)){
echo '<h2>'.$this-> data['donnee1'].'</h2>';
echo '<p>'.$this-> data['donnee2'].'</p>';
echo '<p>'.$this-> data['donnee3'].'</p>';
}

} 

Eléphant du PHP | 396 Messages

19 sept. 2006, 13:47

Mais tu veux retourner qqchose (le tableau des données) ou afficher un tableau html?

Eléphanteau du PHP | 13 Messages

19 sept. 2006, 13:49

oui c'est ca, je veux retourner le tableau de données pour ensuite le traiter dans une autre fonction.

edit : en fait ca revient a faire ce que tu disais dans ta premiere reponse :oops:

Eléphant du PHP | 396 Messages

19 sept. 2006, 13:54

:)

Alors oui, retourne le tableau qui contient les données et fais en ce que tu veux derrière

Eléphanteau du PHP | 13 Messages

19 sept. 2006, 13:59

mais mon probleme, c'est que lorsque j'appel $this-> data il ne me retourne qu'une seule ligne :
<?php 
include_once('php/sql.class.inc.php');
$sql = new sql('localhost', 'root', '', 'marche_equitable');
$sql->get_data('select titre, contenu from news order by id');
echo $sql->data;
?>
Je l'avoue, je suis pas très douer avec les tableaux. :lol:

Eléphant du PHP | 396 Messages

19 sept. 2006, 14:01

Encore un petit effort :)

Ta fonction te retourne le tableau mais derrière il faut bien que tu le parcours :wink:

Eléphanteau du PHP | 13 Messages

19 sept. 2006, 14:07

euh c'est la qu'on utilise foreach non ?

donc si j'ai bien compris :
foreach($sql->data as $donnee) {
echo $donnee;
{
edit : c pas ca, il m'affiche les données en double :roll:

Eléphant du PHP | 396 Messages

19 sept. 2006, 14:22

Tu t'embrouilles un peu à mon avis
public function get_data($ma_requete) {
$this-> querySql = mysql_query($ma_requete, $this-> connect);
$this-> data = mysql_fetch_array($this-> querySql)); // la tu stockes dans data le tableau qui contient tes données
return($this-> data); // tu retournes le tableau
} 
Et derrière
include_once('php/sql.class.inc.php');
$sql = new sql('localhost', 'root', '', 'marche_equitable');
$le_tableau = $sql->get_data('select titre, contenu from news order by id'); // la fonction renvoie le tableau, on le stocke dans $le_tableau

// tu parcours le tableau ligne par ligne
foreach($le_tableau as $une_ligne) {
echo $une_ligne['le champs'];
}

// ou si tu veux afficher le contenu du tableau :
print_f($le_tableau);

Eléphanteau du PHP | 13 Messages

19 sept. 2006, 14:39

Le petit problème c'est qu'en faisant ca :
<?php 
include_once('php/sql.class.inc.php');
$sql = new sql('localhost', 'root', '', 'marche_equitable');
$le_tableau = $sql->get_data('select * from news order by id');
foreach($le_tableau as $donnee){
echo $donnee['titre']; 
}
?>
il me renvoi la première lettre ou le premier chiffre de chaque champ, en locurrence : 11nnLL

(ma premier news a pour id '1', pour titre 'news 1' et le texte 'Lorem ipsum..').

Comprend pas :oops:

Eléphant du PHP | 396 Messages

19 sept. 2006, 16:36

:shock:

Essaye
 var_dump($le_tableau);

Eléphanteau du PHP | 13 Messages

19 sept. 2006, 16:49

Avec :
$sql = new sql();
$retour = $sql->get_data('select * from news');
foreach($retour as $key=>$value) {
echo '<p>'.$value.'</p>';
}
ca marche, mais le problème c'est que ca m'affiche deux fois chaque champs.