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 :

[Tableaux] Call to a member function set_var() on a non-object


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 103
    Points : 49
    Points
    49
    Par défaut [Tableaux] Call to a member function set_var() on a non-object
    Bonjour,

    J'utilise le moteur de templates de PHPlib, et je n'utilise pas la POO (comme ça c'est clair )

    Une de mes pages contient une erreur que je n'arrive pas à trouver :
    Fatal error: Call to a member function set_var() on a non-object in E:\Programmation\Site\VERSION II\jouez\sante.php on line 33
    J'ai été voir sur google ce que veut dire cette erreur, ce sera soit-disant du au fait que je ne déclare pas mes classes, ou un truc du genre (enfin, c'est pas ça parce qu'il y a bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include ('includes/template.inc');
    au début de mon code

    Le bout qui foire c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function traitement($var,$name)
    		{
    		if($var < 0) 
    			{$var_img = 0;} 
    		elseif($var > 100)  
    			{$var_img = 100;}
    		else
    			{$var_img = $var;}
     
    		$moteur -> set_var($name.'_img',$var_img);
    		$moteur -> set_var($name,$var);	
    		}
    cette fonction sert à générer deux variables :
    $name.'_img' => longueur d'une image
    $name => valeur réelle de la variable

    l'image en question est d'autant plus grande que $var est grande, mais elle ne peut dépasser 100 pixels, c'est pour ça que j'ai créé cette petite fonction

    et donc bin ça bugge, et je sais pas pourquoi

    voilà, si quelqu'un sait m'aider, c'est bien gentil

    merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 150
    Points : 186
    Points
    186
    Par défaut
    Bonjour,

    La question est de savoir à quoi correspond $moteur ...

    C'est de là que vient ton erreur, car tu utilises $moteur->truc(); mais il faut peut-être faire les choses dans l'ordre avec un $moteur = MaClasse(); $moteur->truc();

    Enfin bon, comme tu l'as déja lu, il faut instancier ta classe pour pouvoir utiliser ses fonctions.

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    wé wé ...bin je l'ai fait :s mais ça intervient plus haut dans la page :
    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
     
    include ('includes/connect_db.inc.php');
    include ('includes/template.inc');
    $moteur = new Template('templates/');
    $moteur -> set_file('donnees_tpl','donnees.html');
     
    [...]
     
    function traitement($var,$name)
    		{
    		if($var < 0) 
    			{$var_img = 0;} 
    		elseif($var > 100)  
    			{$var_img = 100;}
    		else
    			{$var_img = $var;}
     
    		$moteur -> set_var($name.'_img',$var_img);
    		$moteur -> set_var($name,$var);	
    		}
     
    	$moteur -> parse('results','donnees_tpl',true);
    	$moteur -> p('results');	
    ?>

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 150
    Points : 186
    Points
    186
    Par défaut
    Honnêtement, y'a rien qui te choque dans ton code ?

    C'est tout bête, mais je suis sûr qu'en te laissant mariner 5 minutes tu vas trouver tout seul

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    euh ...

    bin ...

    oui il manque les appels à la fonction, mais bon j'ai pas mis tout le code parce que voilà....


    sinon je vois pas

  6. #6
    Membre actif Avatar de webmatrix
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2005
    Messages : 165
    Points : 226
    Points
    226
    Par défaut
    euh!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function traitement($var,$name,$var_img )
    c'est çà?
    «La logique vous conduira d’un point A à un point B, l’imagination et l’audace vous conduiront où vous le désirez» – Albert Einstein

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 150
    Points : 186
    Points
    186
    Par défaut
    Non ... la portée de la variable $moteur dans ta fonction ...

    Mais le plus propre serait d'utiliser "return" dans ta fonction, car là ta fonction n'est pas réutilisable, puis c'est pas très recommandé de faire comme ça ...

  8. #8
    Membre actif Avatar de webmatrix
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Décembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2005
    Messages : 165
    Points : 226
    Points
    226
    Par défaut
    ah oui c'est vrai!! mais de 1 c'est pas ma fonction, c'est pas mon code
    «La logique vous conduira d’un point A à un point B, l’imagination et l’audace vous conduiront où vous le désirez» – Albert Einstein

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 150
    Points : 186
    Points
    186
    Par défaut
    Et bien apprends donc à optimiser le code que tu récupères, ça t'évitera de nombreuses heures de prise de tête pour rien

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 103
    Points : 49
    Points
    49
    Par défaut


    merci bien, ça fait plaisir

    mais je vois pas pourquoi ça foire sans return ...

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 150
    Points : 186
    Points
    186
    Par défaut
    Pour que ça ne foire plus il te suffit de mettre dans ta fonction : global $moteur;

    Mais c'est vraiment crade ! Une fonction doit idéalement te retourner un résultat ou alors false.

    Si tu utilises return, tu auras une fonction, qui sera propre : elle fera une seule chose, mais elle le fera bien. Ce n'est pas son rôle d'avoir set_var() ! Tu l'ajouteras simplement plus loin dans le code.

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    ok mais j'ai 8 variables qui doivent être "traitées" par cette fonction

    donc ça fait que je dois mettre 16 fois $moteur -> set_var

    enfin c'est fait maintenant, mais ça fait pas très propre

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 150
    Points : 186
    Points
    186
    Par défaut
    Mets la totalité de ton code ici histoire de voir ce qu'il est possible de faire pour éclaircir tout ça

  14. #14
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    ok ok

    en gros ça fait exactement la meme chose pour 8 variables, c'est à dire envoyer la variable au template de trois "façons" différents
    - telle quelle
    - après avoir "traitée" par la fonction traitement()
    - en l'ayant soustrait à 100

    tout ça sert à faire une petite barre pour chaque option, de 100 pixel de long. Un partie verte de X pixel de long, et une partie rouge, de 100-x pixels de long, où X est la valeur de l'option...

    Comme je fais 8 fois la meme chose je pensais que ce serait plus facile avec une fonction :s

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    $sql1 = 'SELECT faim,soif,moral,sante,hygiene,confort,condition_physique,forcee,habilite,points,argent FROM joueurs WHERE id='.$_SESSION['id'];
    	$res1 = mysql_query($sql1) or die (mysql_error());
     
    	while($row1 = mysql_fetch_array($res1))
    		{
    		$moteur -> set_var('faim_img',traitement($row1['faim']));
    		$moteur -> set_Var('rouge_faim',bcsub('100',$row1['faim']));
    		$moteur -> set_var('faim',round($row1['faim'],0));
     
    		$moteur -> set_var('soif_img',traitement($row1['soif']));
    		$moteur -> set_Var('rouge_soif',bcsub('100',$row1['soif']));
    		$moteur -> set_var('soif',round($row1['soif'],0));
     
    		$moteur -> set_var('moral_img',traitement($row1['moral']));
    		$moteur -> set_Var('rouge_moral',bcsub('100',$row1['moral']));
    		$moteur -> set_var('moral',round($row1['moral'],0));
     
    		$moteur -> set_var('sante_img',traitement($row1['sante']));
    		$moteur -> set_Var('rouge_sante',bcsub('100',$row1['sante']));
    		$moteur -> set_var('sante',round($row1['sante'],0));
     
    		$moteur -> set_var('hygiene_img',traitement($row1['hygiene']));
    		$moteur -> set_Var('rouge_hygiene',bcsub('100',$row1['hygiene']));
    		$moteur -> set_var('hygiene',round($row1['hygiene'],0));
     
    		$moteur -> set_var('confort_img',traitement($row1['confort']));
    		$moteur -> set_Var('rouge_confort',bcsub('100',$row1['confort']));
    		$moteur -> set_var('confort',round($row1['confort'],0));
     
    		$moteur -> set_var('condition_img',traitement($row1['condition_physique']));
    		$moteur -> set_Var('rouge_condition',bcsub('100',$row1['condition_physique']));
    		$moteur -> set_var('condition',round($row1['condition_physique'],0));
     
    		$moteur -> set_var('force_img',traitement($row1['forcee']));
    		$moteur -> set_Var('rouge_force',bcsub('100',$row1['forcee']));
    		$moteur -> set_var('force',round($row1['forcee'],0));
     
    		$moteur -> set_var('habilite_img',traitement($row1['habilite']));
    		$moteur -> set_Var('rouge_habilite',bcsub('100',$row1['habilite']));
    		$moteur -> set_var('habilite',round($row1['habilite'],0));
     
    		if($row1['moral'] < 50)
    			{$moteur -> set_Var('imagemoral','triste.jpg');}
    		else
    			{$moteur -> set_Var('imagemoral','sourire.jpg');}	
    		}
     
    	function traitement($taille)
    		{
    		if($taille < 0) 
    			{$taille_img = 0;} 
    		elseif($taille > 100)  
    			{$taille_img = 100;}
    		else
    			{$taille_img = $taille;}
     
    		return $taille_img;
    		}
     
    	$moteur -> parse('results','sante_tpl',true);
    	$moteur -> p('results');

  15. #15
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    c'est pas trop beau comme ça, c'est super, mais ça marche ...

    donc tu tues pas à trouver une solution de taré

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 150
    Points : 186
    Points
    186
    Par défaut
    Hello,

    Si ton moteur de template accepte les tableaux, tu peux tout passer dans un tableau ça simplifiera déja beaucoup le code

    Sinon, il y'a un problème dans ton code : tu redéfinis toutes les variables à chaque boucle while. Bon, ok à priori il n'y a qu'une seule ligne de retournée ... mais à ce moment là il faut enlever le while

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/07/2009, 15h42
  2. [PHP 5.2] Fatal error: Call to a member function bindValue() on a non-object
    Par TeraD dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2009, 00h20
  3. [PDO] Call to a member function setFetchMode() on a non-object
    Par magmus dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 18/11/2008, 22h05
  4. Réponses: 2
    Dernier message: 17/11/2007, 16h23
  5. Réponses: 9
    Dernier message: 05/07/2007, 11h25

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