prog objet et mysql_fetch array 2

Eléphant du PHP | 110 Messages

15 mars 2007, 10:42

bonjour , j'ai classé le sujet precedent resolu un peu vite., je n'y arrive pas :(.

voila mon code:
 $sql = new mysql();
              $sql->init($serveur,$bd,$login,$mot_de_passe);
             //met une ressource dans la variable requete_sql de la classe mysql
            $sql->requete_sql("show table status");
             $sql->resultat_requete($sql->requete_sql);
          while ($sql->resultat)
              {
                print($sql->resultat[0]);
               }
Quand je met un tableau simple dans le while (while ($tab)) ca boucle indefiniment. J'ai enleve le return de ma fonction resultat_requete et l'ai remplace par un $this->resultat=mysql_fetcharray($requete); car la commande
while ($tab=$sql->resultat($requete))
              {
                print($sql->resultat[0]);
               }
ne marchait pas.
Du coup je suis bloque. Si je met un tableau simple dans le while il boucle indefiniment et si j'utilise le return de ma fonction pour renvoyer le fetch array ca ne marche pas :(.

Auriez vous une piste à m'indiquer?

merci[/code]

Eléphant du PHP | 110 Messages

15 mars 2007, 11:39

mon probleme c'est que je comprends pas comment est fait le tableau retourne par mysql_fetch_array. Dans la doc ils disent qu'on peut lui faire renvoyer un tableau associatif ou un tableau numerique.
Mais que se passe t-il dans le cas d'un tableau à plusieurs dimensions?

Eléphant du PHP | 110 Messages

15 mars 2007, 12:51

probleme resolu:
voila la solution pour ceux que ca interesse:

fonction resultat_requete:

Code : Tout sélectionner

//fonction qui retourne un tableau avec le resultat de la requete function resultat_requete() { while ($this->temp = mysql_fetch_row($this->requete_sql)) { $this->resultat[$this->i]= $this->temp; $this->i++; } return $this->resultat; }
fonction pour afficher les elements:

Code : Tout sélectionner

//execution de la requete $sql->requete_sql("show table status"); //recuperation du tableau des resultats $tab = $sql->resultat_requete(); //boucle sur le tableau foreach ($tab as $val) { print($val[0]); }

ViPHP
ViPHP | 1024 Messages

15 mars 2007, 13:34

en fait, il nous faudrait le code de ta classe mysql pour pouvoir en comprendre le fonctionnement.

A+

Pascal

Eléphant du PHP | 110 Messages

15 mars 2007, 14:29

oui ce serait mieux!
la voila:

Code : Tout sélectionner

<?php class mysql { var $serveur_bd; var $login_bd; var $mot_de_passe_bd; var $nom_bd; var $connect_bd; var $erreur_bd; var $selection_bd; var $requete_sql; var $i; var $temp; var $resultat; /* pas de constructeur avec php4 function __construct($serveur,$bd,$login,$mot_de_passe) { $this->serveur_bd = $serveur; $this->nom_bd = $bd; $this->login_bd = $login; $this->mot_de_passe_bd = $mot_de_passe; $this->connexion(); } */ function init($serveur,$bd,$login,$mot_de_passe) { $this->serveur_bd = $serveur; $this->nom_bd = $bd; $this->login_bd = $login; $this->mot_de_passe_bd = $mot_de_passe; $this->i=0; $this->connexion(); } function connexion() { //connexion à mysql $this->connect_bd=mysql_connect($this->serveur_bd,$this->login_bd,$this->mot_de_passe_bd); if(!$this->connect_bd) { $this->erreur_mysql(); } else { $this->selection_base(); } } function erreur_mysql() { $this->erreur_bd = mysql_error($this->connect_bd); print("Une erreur Mysql est apparue:<br />".$this->erreur_bd); } function selection_base() { $this->selection_bd = mysql_select_db($this->nom_bd,$this->connect_bd); if (!$this->selection_bd) { $this->erreur_mysql(); } } //fonction qui execute une requete SQL function requete_sql($requete) { $this->requete_sql = mysql_query($requete); } //fonction qui retourne un tableau avec le resultat de la requete function resultat_requete() { while ($this->temp = mysql_fetch_row($this->requete_sql)) { $this->resultat[$this->i]= $this->temp; $this->i++; } return $this->resultat; } function deconnexion() { mysql_close($connect_db); } } ?>
voila
et pour executer une requete dans un programme, il faut declarer un nouvel objet mysql en incluant le fichier de la classe et celui des parametres de connexion, appeller la fonction init de la classe mysql,puis la fonction requete sql et ensuite mettre le petit bout de code qui parcourt le tableau retourné par la fonction resultat_requete.

Code : Tout sélectionner

include("mysql.php"); include("parametres.php"); $sql = new mysql(); $sql->init($serveur,$bd,$login,$mot_de_passe); //execution de la requete $sql->requete_sql("show table status"); //recuperation du tableau des resultats $tab = $sql->resultat_requete(); //boucle sur le tableau foreach ($tab as $val) { print($val[0]); }
voila! bonne journée