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 :

Variable extraite d'une fonction


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 24
    Par défaut Variable extraite d'une fonction
    Bonjour tout le monde,

    J'ai réalisé une galerie vidéo et j'ai un petit problème avec l'affichage d'une variable extraite d'une fonction.

    Je désire lors de l'affichage des vidéos afficher un lien commentaire sous chacune d'entre elles avec le nombre de commentaires liés à chaque vidéos.

    Voici mon code :

    Premier cas qui fonctionne

    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
     
    if ($nbvidéos != 0){
            echo '<table>';
    		for ($i=0; $i<$nbvidéos; $i++){
     
    		     $sql ='SELECT commentaire FROM commentaires WHERE video="'.$tableau[$i].'"';
    	             $resultat = mysql_query($sql) or die ('Erreur SQL !'.$sql.'<br/>'.mysql_error());
    	             $nbcom = mysql_num_rows($resultat);
    	             if (mysql_num_rows($resultat)<=1){
    	                  $com = 'commentaire';
    	           }
    	           else {
    	                 $com = 'commentaires';
    	          }
                      if($i%$nbcol==0)
    			echo '<tr>';
     
                echo '<td><a href="../videos/'.$tableau[$i].'"><img src="../css/images/photos.jpg"  alt="vidéo"/><br/>'.$titre.($i+1).'</a><br/>';
    			echo '<a href="../vue/commentaires.php?f='.$tableau[$i].'">'.$nbcom.' '.$com.'</a></td>';
                if($i%$nbcol==($nbcol-1) or $i==($nbvidéos-1))
    			echo '</tr>';
    	    }
    Pour l'instant tout va bien, mes vidéos s'affichent et avec le lien commentaire et le nombre de commentaire.

    Maintenant je change mon code et j'appelle un paramètre d'une fonction extérieure à mon fichier.

    Deuxième cas qui ne fonctionne pas
    code modifié :

    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
     
     
    if ($nbvidéos != 0){
            echo '<table>';
    		for ($i=0; $i<$nbvidéos; $i++){
                         $resultat = '';
    		     $resultat = recupcom($resultat);
    	             $nbcom = mysql_num_rows($resultat);
    		     if (mysql_num_rows($resultat)<=1){
    	             $com = 'commentaire';
    	             }
    	            else {
    	            $com = 'commentaires';
    	            }
                        if($i%$nbcol==0)
    			echo '<tr>';
     
                echo '<td><a href="../videos/'.$tableau[$i].'"><img src="../css/images/photos.jpg"  alt="vidéo"/><br/>'.$titre.($i+1).'</a><br/>';
    			echo '<a href="../vue/commentaires.php?f='.$tableau[$i].'">'.$nbcom.' '.$com.'</a></td>';
                if($i%$nbcol==($nbcol-1) or $i==($nbvidéos-1))
    			echo '</tr>';
    	    }
    Code de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function recupcom($resultat){
            global $tableau;
    	global $i;
            $sql ='SELECT commentaire FROM commentaires WHERE video="'.$tableau[$i].'"';
    	$resultat = mysql_query($sql) or die ('Erreur SQL !'.$sql.'<br/>'.mysql_error());
            return $resultat;
    	mysql_close();
    }
    Là problème, le nombre de commentaire ne s'affiche plus ou plutôt ça affiche zéro.

    Lorsque je fais un print_r de la variable $resultat, dans les deux cas ça m'affiche exactement la même chose:
    Resource id #11Resource id #12Resource id #13Resource id #14Resource id #15Resource id #16Resource id #17Resource id #18Resource id #19Resource id #20Resource id #21Resource id #22

    Mais lorsque je fais un print_r de $nbcom :

    Dans mon premier cas ça m'affiche 600000000000 qui correspond aux 6 commentaires de la première vidéo puis des zéro vu qu'il n'y a aucun commentaire dans les autres vidéos.

    Dans le deuxième cas ça m'affiche 000000000000, comme si il n'avait récupéré aucun commentaire.

    Je ne comprend pas pourquoi dans le cas du print_r $resultat ça affiche la même chose et dans le cas du print_r $nbcom, non.

    Enfin voilà mon problème principal.

    Ensuite il y a une petite chose que je ne comprends pas.

    Lorsque je fais dans mon premier cas qui fonctionne
    $resultat = mysql_fetch_assoc ($resultat);
    print_r ($resultat);

    ça m'affiche un seul commentaire alors que c'est censé m'en récupérer 6, est ce normal ?

    J'espère avoir été assez clair et précis sans trop en mettre, merci d'avance pour vos réponses.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bon en gros, tu as compris le principe des fonctions à l'envers : tu passes la variable de sortie en paramètres et tu globalises ce qui devrait être un paramètre d'entrée.

    Rappels sur les fonctions :
    • Le return c'est la fin de la fonction. Tout ce que tu mets après ne sera jamais exécuté.
    • Rendre globale une variable permet à une fonction d'y accéder. En théorie, ça a l'air chouette. En pratique, mieux vaut éviter d'utiliser ce fonctionnement pour autre chose que des choses réellement globales (par exemple, un connecteur à une bdd). Il est beaucoup plus simple d'utiliser d'ajouter des paramètres à la fonction.
    • Il est plus simple de retourner en sortie de la fonction ce dont tu as réellement besoin à l'extérieur : retourner un tableau pour ne lire que le 1er élément n'est pas des plus pratiques.


    En pratique, ce qui t'intéresse c'est le nombre de commentaires pour la variable $tableau[$i].
    Le plus simple est donc de faire une fonction qui retourne ce nombre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function getNbCom($video) {
    	$sql ='SELECT commentaire FROM commentaires WHERE video="'$video.'"';
    	$resultat = mysql_query($sql) or die ('Erreur SQL !'.$sql.'<br/>'.mysql_error());
    	$nbcom = mysql_num_rows($resultat);
    	return $nbcom;
    }
    qui serait appelée avec la variable $tableau[$i] en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ($nbvidéos != 0){
    	echo '<table>';
    	for ($i=0; $i<$nbvidéos; $i++){
    		$nbcom = getNbCom($tableau[$i]);
    		if ($nbcom<=1){
    			$com = 'commentaire';
    		}
    		else {
    			$com = 'commentaires';
    		}
    // ...
    Au passage :
    Le nom de ta variable $nbvidéos contient un caractère spécial.
    C'est autorisé et ça va fonctionner, mais ce n'est pas vraiment une bonne idée. Un problème d'encodage et pouf ! ta variable devient $nbvid��©os, ce qui est déjà beaucoup moins pratique et peut devenir franchement problématique si il s'agit d'un nom de champ de formulaire ou de fichier.
    Mieux vaut s'en tenir aux basiques (alpha-numériques et underscore) pour éviter les ennuis.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 24
    Par défaut
    Bonjour,

    Merci pour la réponse, en effet j'attribuais une variable vide à ma fonction donc forcement ça me retournais un résultat vide.

    Merci pour les différents conseils, je vais les mettre en pratique.

    Par contre as tu une idée par rapport à cette question :

    Lorsque je fais dans mon premier cas qui fonctionne
    $resultat = mysql_fetch_assoc ($resultat);
    print_r ($resultat);

    ça m'affiche un seul commentaire alors que c'est censé m'en récupérer 6, est ce normal ?

    Cdt,
    tifabulous

  4. #4
    Inactif
    Homme Profil pro
    Sans emploi
    Inscrit en
    Septembre 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Sans emploi

    Informations forums :
    Inscription : Septembre 2014
    Messages : 35
    Par défaut
    Je pense il le donne la réponse directement sur http://php.net/manual/fr/function.mysql-fetch-assoc.php

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP-JS] Renseigner une variable php dans une fonction JS
    Par gwen-al dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 14/04/2006, 08h31
  2. variable dynamique dans une fonction javascript
    Par Shivaneth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2005, 15h58
  3. [Lisp] Variable considérée comme une fonction
    Par lunart dans le forum Lisp
    Réponses: 2
    Dernier message: 07/04/2005, 15h48
  4. Utilisé une variable hors d'une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/02/2005, 19h21
  5. variable hors d'une fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/02/2005, 08h29

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