IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

utilisation de foreach


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut utilisation de foreach
    Bonjour,

    voila je voulais afficher les nouveaute des produits, mais cela ne fonctionne pas pour les illustrations l'echo dans la 2 boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (foreach( $tab as $IdIllustrations))
    ne renvoi rien alors qu'elle rentre bien dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( ($tab = $IdIllustrations) !== null )
    :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    /*appelle de la class produit*/
    $objet=new produit;
     
    /*utilisation fonction pour afficher nouveautés*/
    $Nouveautes=$objet->afficherLesNouveautes();
     
     
    if ( ($tab = $Nouveautes) !== null ) {
    $body.='<div class="Nouveaute_center">';
    foreach( $tab as $Nouveautes ) {
    /*utilisation fonction pour recuperer valeur categorie*/
    $IdCateg=$Nouveautes->getId();
     
    /*construction url dynamique*/
    $body.='<ul><li><a>';
    $body.=''.$Nouveautes->getNom().'';
    $IdIllustrations=$Nouveautes->getIllustrations();
     
    $body.='</a></li></ul>';
    }
     
     
    }
     
    if ( ($tab = $IdIllustrations) !== null ) {
     
     
    foreach( $tab as $IdIllustrations) {
     
    /*utilisation fonction pour recuperer valeur categorie*/
    echo $Fichier=$IdIllustrations->getFichier();
     
    }
    }
     
    $body.='</div>';
    merci de votre aide.

    en faite j 'ai la table illustration:

    id - description - fichier

    table produit:

    id - nom - description - .... - id-illustration

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    quel est le sens de tout ça ?
    tu utilises le même nom de variable pour des choses différentes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $Nouveautes=$objet->afficherLesNouveautes();
    if ( ($tab = $Nouveautes) !== null ) {
    foreach( $tab as $Nouveautes ) {

    Si tu cherches à vérifier que la fonction a bien retourné un tableau fait simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (is_array($Nouveautes)) {
    foreach( $Nouveautes as $value ) {
    Encore mieux serait que ta fonction retourne toujours un tableau quite à ce qu'il soit vide.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour kate59,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( ($tab = $IdIllustrations) !== null )
    Quel intérêt y a-t-il à faire ça ?

    Pourquoi pas un simple ?

    Edit : grilled

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    j'ai fait les modi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    if (is_array($Nouveautes)) {
    $body.='<div class="Nouveaute_center">';
    foreach( $Nouveautes as $value ) {
    /*utilisation fonction pour recuperer valeur categorie*/
    $IdCateg=$value->getId();
     
    /*construction url dynamique*/
    $body.='<ul><li><a>';
    $body.=''.$value->getNom().'';
    $body.=''.$value->getIDillustrations().'';
    $body.='</a></li></ul>';
    }
     
     
    }
    if (is_array($IdIllustrations)) {
     
    foreach( $IdIllustrations as $value ) {
     
    echo $Fichier=$value->getFichier();
     
    }
    }
     
    $body.='</div>';
    mais il ne rentre pas dans la 2 boucle (if (is_array($IdIllustrations)

    Normale car la fonction get ne renvoie pas de tableau:

    page class.produit.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     public function getIDillustrations() {
            return (string) $this->id_illustration;
        }
    a votre avis doit je faire un tableau car en faite j'ai besoin de ces id ensuite pour cette fonction dans class.illustration.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     public function getIllustrations($id) {
           $req ="SELECT * from ".self::TB_PREFIX."illustration_produit where id=$id";
    		$res = mysql_query($req) or die ('Erreur : '.mysql_error());
    		$ret = array();
     
    		while( $data = mysql_fetch_object($res) ) {
    			$ret[] = new self ( 
    			$data->id,
    			$data->titre,
    			$data->fichier
     
     
     
    			);
     
        }
    et ainsi je voulais recuperer la donnée fichier pour afficher l 'image.
    en faite j 'ai la table illustration:

    id - description - fichier

    table produit:

    id - nom - description - .... - id-illustration
    merci de vos conseils.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce que tu fais n'est pas clair, que retourne afficherLesNouveautes() ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    je vais essayer d'expliquer j'ai deux tables:

    j 'ai la table illustration:

    id - description - fichier

    table produit:

    id - nom - description - .... - id-illustration

    donc j'ai une page pour afficher mes nouveaux produits:

    <code type="php">/*appelle de la class produit*/
    $objet=new produit;

    /*utilisation fonction pour afficher nouveautés*/
    $Nouveautes=$objet->afficherLesNouveautes();</code>
    la fonction afficherLesNouveautes() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public static function afficherLesNouveautes(){
    		$req ="SELECT * from ".self::TB_PREFIX."produit where afficher_dans_nouveautes=1";
    		$res = mysql_query($req) or die ('Erreur : '.mysql_error());
    		$ret = array();
     
    		while( $data = mysql_fetch_object($res) ) {
    			$ret[] = new self ( 
    			$data->id,
    			$data->nom,
    			$data->description,
    			$data->prix,
    			$data->gamme,
    			$data->date_modification,
    			$data->date_creation,
    			$data->afficher_dans_nouveautes,
    			$data->afficher_dans_contact,
    			$data->est_visible,
    			$data->est_disponible,
    			$data->id_categorie,
    			$data->id_illustration
    			);
    		}
    Ensuite dans la page j'affiche le nom du produit dans la 1 boucle et recupere id_illustration de ma table produit :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (is_array($Nouveautes)) {
    $body.='<div class="Nouveaute_center">';
    foreach( $Nouveautes as $value ) {
    /*utilisation fonction pour recuperer valeur categorie*/
    $IdCateg=$value->getId();
     
    /*construction url dynamique*/
    $body.='<ul><li><a>';
    $body.=''.$value->getNom().'';
    $body.=''.$value->getIDillustrations().'';
    $body.='</a></li></ul>';
    }
    la fonction getIDillustrations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /**
         * Donne l illustration
         *
         * @access public
         * @return integer
         */
        public function getIDillustrations() {
            return (string) $this->id_illustration;
        }
    dans la seconde boucle je veut afficher l 'image du produit donc je doit recuperer le nom de l'image avec la variable fichier dans la table illsutration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (is_array($IdIllustrations)) {
     
    foreach( $IdIllustrations as $value ) {
     
    echo $Fichier=$value->getFichier();
     
    }
    }
    Mais rien ne s'affiche pour les illsutrations, on ne rentre pas dans la seconde boucle.

    j 'espere avoir été un peu plus claire.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    afficherLesNouveautes() ne fait pas de retour de valeur ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    	public static function afficherLesNouveautes(){
    		$req ="SELECT * from ".self::TB_PREFIX."produit where afficher_dans_nouveautes=1";
    		$res = mysql_query($req) or die ('Erreur : '.mysql_error());
    		$ret = array();
     
    		while( $data = mysql_fetch_object($res) ) {
    			$ret[] = new self ( 
    			$data->id,
    			$data->nom,
    			$data->description,
    			$data->prix,
    			$data->gamme,
    			$data->date_modification,
    			$data->date_creation,
    			$data->afficher_dans_nouveautes,
    			$data->afficher_dans_contact,
    			$data->est_visible,
    			$data->est_disponible,
    			$data->id_categorie,
    			$data->id_illustration
    			);
    		}
     
    		if ( !empty($ret) )
    		return $ret;
     
    		return null;
    	}
    excuse moi je n avais pas tout mit.

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Recupere le nom du fichier dans la même requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $req ="SELECT * from ".self::TB_PREFIX."produit 
    JOIN illustration ON illustration.id = produit.id_illustration
    WHERE afficher_dans_nouveautes=1";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    merci j ai modifier mais je ne rentre tj pas dans la 2 boucle (if (is_array($IdIllustrations)) {):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    if (is_array($Nouveautes)) {
    $body.='<div class="Nouveaute_center">';
    foreach( $Nouveautes as $value ) {
    /*utilisation fonction pour recuperer valeur categorie*/
    $IdCateg=$value->getId();
     
    /*construction url dynamique*/
    $body.='<ul><li><a>';
    $body.=''.$value->getNom().'';
    $IdIllustrations=$value->getIDillustrations().'';
    $body.='</a></li></ul>';
    }
     
     
    }
    if (is_array($IdIllustrations)) {
     
    foreach( $IdIllustrations as $value ) {
     
    echo $Fichier=$value->getFichier();
     
    }
    }
     
    $body.='</div>';

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Toute cette partie n'a plus lieu d'être.
    Tu recuperes le nom du fichier comme tu le fais déjà pour les autres valeurs.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    oui mais le nom du fichier se trouve dans la table illustration_produit, donc obliger de créer un autre objet de cette classe, et donc un nouveau foreach.


    j'ai fait ceci, mais j'ai un message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Call to a member function getFichier() on a non-object in C:\wamp\www\AchatEnfolie2\AchatEnfolie2\Accueil\1-Accueil.php on line 50
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    /*appelle de la class produit*/
    $objet=new produit;
     
    /*utilisation fonction pour afficher nouveautés*/
    $Nouveautes=$objet->afficherLesNouveautes();
     
     
    if (is_array($Nouveautes)) {
    $body.='<div class="Nouveaute_center">';
    foreach( $Nouveautes as $value ) {
    /*utilisation fonction pour recuperer valeur categorie*/
    $IdCateg=$value->getId();
     
    /*construction url dynamique*/
    $body.='<ul><li><a>';
    $body.=''.$value->getNom().'';
    $IdIllustrations=$value->getIDillustrations().'';
    $body.='</a></li></ul>';
    }
     
     
    }
    $TabIllustrations = array($IdIllustrations);
     
    if (is_array($TabIllustrations)) {
     
    foreach( $TabIllustrations as $value ) {
     
     
     
    echo $IdIllustrations=$value->getFichier().'';
     
    }
     
    $body.='</div>';
     
     }

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    oui mais le nom du fichier se trouve dans la table illustration_produit, donc obliger de créer un autre objet de cette classe, et donc un nouveau foreach.
    Tu devrais abandonner la POO si tu ne t'en sors pas, la programmation procédurale est bien accessible ; actuellement tu écris beaucoup de code pour peu.

    La jointure sert justement a rassembler les données des deux tables, il n'y a pas lieu d'avoir un traitement different pour cette valeur et pour les autres.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    Je ne veux pas abandonner le poo car je veux faire un site e-commerce en php5 car je pense qu avec ce nouveau language il y a plus de possibilité.

    Je suis motivé, si on abandonne dès le début on évolue jamais.

    j'ai reussi comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    /*appelle de la class produit*/
    $objet=new produit;
     
    /*utilisation fonction pour afficher nouveautés*/
    $Nouveautes=$objet->afficherLesNouveautes();
     
     
    if (is_array($Nouveautes)) {
     
    //$body.='<div class="Nouveaute_center">';
    foreach( $Nouveautes as $value ) {
     
    /*utilisation fonction pour recuperer valeur categorie*/
    $IdCateg=$value->getId();
     
    /*construction url dynamique*/
    //$body.='<ul><li><a>';
     
    $IdIllustrations=$value->getIDillustrations().'';
     
    $body.=''.$value->getNom().'';
     
    //$body.='</a></li></ul>';
     
    /*appelle de la class produit*/
    $objet2 = new IllustrationProduit;
     
    $IDllustrations=$objet2->getIllustrations($IdIllustrations);
     
    if (is_array($IDllustrations)) {
     
    foreach($IDllustrations as $value ) {
     
    $body.='<img src="'.$value->getTitre().'/'.$Illustrations=$value->getFichier().'">';
     
    }
    }
    }
    qu'en pensez vous ?

  15. #15
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Quel est l'intérêt d'avoir un objet pour l'illustration ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  16. #16
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    car illsutration est un de me stables donc j en ai fait une classe et que j ai besoin d'une des donnée de cette classe.

Discussions similaires

  1. [PHP 4] Utilisation de "foreach"
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 22/02/2009, 12h36
  2. prob utilisation c:forEach
    Par skanderb dans le forum JSF
    Réponses: 1
    Dernier message: 27/04/2007, 10h06
  3. Utilisation de foreach avec les sessions sous PHP5
    Par frochard dans le forum Langage
    Réponses: 1
    Dernier message: 11/11/2006, 01h14
  4. [Tableaux] Erreur lors de l'utilisation de foreach
    Par kagura dans le forum Langage
    Réponses: 1
    Dernier message: 08/11/2006, 12h51
  5. utilisation du Foreach.
    Par LESOLEIL dans le forum Langage
    Réponses: 5
    Dernier message: 15/03/2006, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo