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 :

Base de la POO : l'appel à la classe ne fonctionne pas


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut Base de la POO : l'appel à la classe ne fonctionne pas
    Bonjour,
    Ca fait tellement d'années que je n'ai pas fait de php que je ne me souviens plus de rien. Ma question concerne le fait d'appeler une petite classe dans un fichier.
    Ma fonction fonctionne correctement quand je la teste toute seule dans test.php mais dès que je la mets dans le fichier image.classe.php ça ne marche plus. On dirait que l'appel ne fonctionne pas, j'ai mis des echo et ils ne sortent pas dès que je les mets après l'apppel de la classe ou dans le fichier de la classe. Pourquoi?
    Ca doit être un truc tout bête mais ça fait 2 heures que je bloque dessus et que je cherche sur internet.
    Merci d'avance
    Le fichier test.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    include_once 'config.php';
    include_once 'connect.php';
    include 'image.classe.php';
     
    $numJeu=3;
    $test1 = new Image();
    $adresse1=$test1->imgAleatoire();
    echo ($adresse1);
    ?>
    La mini classe :
    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
     
    <?php
    class Image
    {
    	echo "CLASSE";
     
     
    	function imgAleatoire()
    	{
    		$sql='SELECT Image.idImg, Image.adresseImg FROM Image INNER JOIN Texte_Image ON Image.idImg = Texte_Image.idImg WHERE Texte_Image.numJeu =?';
    		$reqPrep=$connexion->prepare($sql);
    		$reqPrep->bindParam(1,$numJeu);
    		$reqPrep->execute();
    		//on obtient un tableau associatif à 2 dimensions
    		$result=$reqPrep->fetchAll(PDO::FETCH_ASSOC);
    		//print_r($result);
     
    		// compter le nb de lignes du tableau pour savoir il y a combien d'images qui correspondent à la requête
    		$nb_lignes=count($result);
    		//on tire un nbre au hasard entre 0 et $nb_lignes-1
    		$nb_aleatoire=mt_rand(0,$nb_lignes-1);
    		//ce nbre correspond au n° de ligne où on va chercher l'adresse de l'image
    		$adresse=$result[$nb_aleatoire][adresseImg];
    		return $adresse;
    	}
    }
     
    ?>

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    tu peux pas faire echo "CLASSE";je te conseil, de mettre ton error_reporting a -1, et ton display_errors sur On

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    En fait c'était juste pour voir s'il allait m'afficher CLASSE. Je me serai dit qu'on serait alors sur d'être bien passé par là.
    Sinon ce que tu dit à modifier c'est dans le php.ini si je me souviens bien?

  4. #4
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    J'avais ça :
    error_reporting = E_ALL
    Et j'ai mis le display_errors à ON

    Du coup mon message d'erreur (le coucou c'est celui de l'echo de tout à l'heure):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    coucou
    Notice: Undefined variable: connexion in /Applications/MAMP/htdocs/site_dazibao/image.classe.php on line 8
     
    Fatal error: Call to a member function prepare() on a non-object in /Applications/MAMP/htdocs/site_dazibao/image.classe.php on line 8
    Et les fichiers :
    test.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
     
    <?php
    include_once 'config.php';
    include_once 'connect.php';
    include 'image.classe.php';
     
    echo "coucou";
     
    $numJeu=3;
     
    $test1 = new Image();
    $adresse1=$test1->imgAleatoire();
     
    echo ($adresse1);
     
    ?>
    et la classe Image
    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
     
    <?php
    class Image
    {
     
    	function imgAleatoire()
    	{
    		$sql='SELECT Image.idImg, Image.adresseImg FROM Image INNER JOIN Texte_Image ON Image.idImg = Texte_Image.idImg WHERE Texte_Image.numJeu =?';
    		$reqPrep=$connexion->prepare($sql);
    		$reqPrep->bindParam(1,$numJeu);
    		$reqPrep->execute();
    		//on obtient un tableau associatif à 2 dimensions
    		$result=$reqPrep->fetchAll(PDO::FETCH_ASSOC);
    		//print_r($result);
     
    		// compter le nb de lignes du tableau pour savoir il y a combien d'images qui correspondent à la requête
    		$nb_lignes=count($result);
    		//on tire un nbre au hasard entre 0 et $nb_lignes-1
    		$nb_aleatoire=mt_rand(0,$nb_lignes-1);
    		//ce nbre correspond au n° de ligne où on va chercher l'adresse de l'image
    		$adresse=$result[$nb_aleatoire][adresseImg];
    		return $adresse;
    	}
    }
     
    ?>

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    oui connexion n'existe pas

  6. #6
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Si mais comme ça marche je n'en parlais pas. Je l'ai testé et y a pas de souci de ce côté là.
    $connexion c'est pour l'accès à la base de données avec PDO c'est dans un autre fichier que j'appelle. C'est ce fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    	try
    	{
    		$connexion=new PDO($dsn,$utilisateur,$motpasse,array(PDO::ATTR_PERSISTENT=>true));
    		$connexion->query('SET NAMES utf8');
    	}
    	catch(Exception $e)
    	{
    		echo 'Echec de la connexion à la base de données : '.$e->getMessage().'<br/>';
    		die(); 
    	}
     
    ?>

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    oui mais la ta un problème de scope la classe n'as pas accès au variable globales

  8. #8
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Uu problème de scope??? Ouh la la ça veut dire quoi?
    Ah ou alors il faut peut-être que je mette $connexion en paramètre de la fonction imgAleatoire() ?

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Oui ta connexion n'est pas vu depuis ta classe.

    Donc soit tu la met en paramètre comme tu le dis dans ton message précédent, soit moi j'ai choisis une solution simple de mettre la connexion dans le constructeur de la classe (ca évite d'avoir un paramètre de plus dans chaque appel de fonction. Evidemment cette connexion est dans un fichier include de façon à ne modifier qu'une seule foie les données de connexion ).

    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
    <?php
    class Image
    {
            private $connexion
     
            function __construct()
    	{
    		include("connexion/connexionBDD.php");
    		$this->connexion = $connexion; // $connexion se trouve dans le fichier connexionBDD.php, ce que toi tu mettais dans try catch
    	}
     
            // Dans ta classe j'ai juste modifié le $connexion par la variable de $connexion private créé dans le constrcuteur
    	function imgAleatoire()
    	{
    		$sql='SELECT Image.idImg, Image.adresseImg FROM Image INNER JOIN Texte_Image ON Image.idImg = Texte_Image.idImg WHERE Texte_Image.numJeu =?';
    		$reqPrep=$this->connexion->prepare($sql);
    		$reqPrep->bindParam(1,$numJeu);
    		$reqPrep->execute();
    		//on obtient un tableau associatif à 2 dimensions
    		$result=$reqPrep->fetchAll(PDO::FETCH_ASSOC);
    		//print_r($result);
     
    		// compter le nb de lignes du tableau pour savoir il y a combien d'images qui correspondent à la requête
    		$nb_lignes=count($result);
    		//on tire un nbre au hasard entre 0 et $nb_lignes-1
    		$nb_aleatoire=mt_rand(0,$nb_lignes-1);
    		//ce nbre correspond au n° de ligne où on va chercher l'adresse de l'image
    		$adresse=$result[$nb_aleatoire][adresseImg];
    		return $adresse;
    	}
    }
     
    ?>
    Ca reste la solution simple, mais loin de là la plus efficace je pense .. Un singleton parait vraiment sympa pour ca
    Règle N° 1 : Si tout va bien, ne touchez à rien.

  10. #10
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Merci des conseils. Je sens que je commence à débroussailler des notions que je n'ai pas eu l'occasion d'acquérir. C'est dur mais ça avance…
    J'ai une heure de libre devant moi là.
    Je fais les changements, le point avec ce qui marche ou pas et je reviens
    Encore MERCI !

  11. #11
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Du coup je suppose que je n'ai plus besoin de faire un "include" du fichier connexionBDD.php quand je crée un objet Image dans test.php?

  12. #12
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Je vous mets les modifs que j'ai faites :
    Fichier connexionBDD.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
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
    //nom de la machine hôte
    $hote='localhost';
    //nom de l'utilisateur 
    $utilisateur='root';
    //mot de passe 
    $motpasse='root';
    //nom de la base de données	
    $bdd='**********';
    // Le DSN est formé du nom du pilote PDO (mysql) suivi de deux points (:). Ensuite nom de la bdd et de la machine.
    $dsn = "mysql:dbname=$bdd;host=$hote";
     
    try
    {
    	$connexion=new PDO($dsn,$utilisateur,$motpasse,array(PDO::ATTR_PERSISTENT=>true));
    	$connexion->query('SET NAMES utf8');
    }
    catch(Exception $e)
    {
    	echo 'Echec de la connexion à la base de données : '.$e->getMessage().'<br/>';
    	die(); 
    }
     
    ?>
    Fichier image.classe.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
    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
    <?php
    class Image
    {
    	public $numJeu;
    	public $nb_lignes=0;	
    	public $nb_aleatoire=0;
    	public $adresse='';
    	private $connexion;
     
    	function__construct()
    	{
    		include('connexionBDD.php');
     
    		$this->connexion=$connexion;
     
    	}
     
    	function imgAleatoire()
    	{
    		$sql='SELECT Image.idImg, Image.adresseImg FROM Image INNER JOIN Texte_Image ON Image.idImg = Texte_Image.idImg WHERE Texte_Image.numJeu =?';
    		$reqPrep=$this->connexion->prepare($sql);
    		$reqPrep->bindParam(1,$this->numJeu);
    		$reqPrep->execute();
    		//on obtient un tableau associatif à 2 dimensions
    		$result=$reqPrep->fetchAll(PDO::FETCH_ASSOC);
    		//print_r($result);
     
    		// compter le nb de lignes du tableau pour savoir il y a combien d'images qui correspondent à la requête
    		$this->$nb_lignes=count($result);
    		//on tire un nbre au hasard entre 0 et $nb_lignes-1
    		$this->$nb_aleatoire=mt_rand(0,$this->$nb_lignes-1);
    		//ce nbre correspond au n° de ligne où on va chercher l'adresse de l'image
    		$this->adresse=$result[$nb_aleatoire][adresseImg];
    		return $this->adresse;
    	}
     
    	function setNumJeu($numJeu)
    	{
    		$this->numJeu=$numJeu;
    	}
    }
     
    ?>
    Et enfin le test.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
     
    include 'image.classe.php';
     
    $test1 = new Image();
    $test1->setNumJeu(3);
    $adresse1=$test1->imgAleatoire();
     
    echo ($adresse1);
     
    ?>
    Quand je lance test.php : l'erreur que j'ai désormais c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in /Applications/MAMP/htdocs/site_dazibao/image.classe.php on line 10
    J'ai essayé de tenir compte des infos qu'on m'a données ici ou pas. Je ne sais pas si ça s'améliore mais vraisemblablement je n'ai pas encore tout compris

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Il t'annonce un problème ligne 10 :
    Tu dois mettre un espace entre fonction et le constructeur :
    En effet tu devrais ne plus avoir aucun include de connexion dans tes pages PHP, seulement dans tes classes.

    Pour cela qu'il est bien de faire une classe de connexion (singleton) unique pour pas devoir faire un include dans chacune de tes classes (ca coute pas grand chose, mais si tu utilises n classes, tu auras n connexions avec la méthode actuelle.) Sur un petit site web ca ira, mais si tu as besoins de faire des milliers de requêtes, faudra peut-être optimiser cela
    Règle N° 1 : Si tout va bien, ne touchez à rien.

  14. #14
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Ah oui mince, il faut vraiment que je sois plus attentive.
    Par contre maintenant il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Notice: Undefined variable: nb_lignes in /Applications/MAMP/htdocs/site_dazibao/image.classe.php on line 29
    Fatal error: Cannot access empty property in /Applications/MAMP/htdocs/site_dazibao/image.classe.php on line 29
    Or, je l'ai définie ma variable nb_lignes au début de ma classe.

  15. #15
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Quand tu fais appel à tes variables déclarées en haut, tu ne dois pas mettre les $ devant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->$nb_lignes=count($result);
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->nb_lignes=count($result);
    Tu dois modifier les autres également

    edit :
    Je viens de voir que desfois c'est bon, des fois non, pourquoi tu changes en cours de route ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // compter le nb de lignes du tableau pour savoir il y a combien d'images qui correspondent à la requête
    		$this->$nb_lignes=count($result); // KO
    		//on tire un nbre au hasard entre 0 et $nb_lignes-1
    		$this->$nb_aleatoire=mt_rand(0,$this->$nb_lignes-1); //KO
    		//ce nbre correspond au n° de ligne où on va chercher l'adresse de l'image
    		$this->adresse=$result[$nb_aleatoire][adresseImg]; // $nb_aleatoire ? Pourquoi pas de $this->nb_aleatoire ici ?
    Tu devrais reprendre ligne par ligne pour corriger tes variables.
    Règle N° 1 : Si tout va bien, ne touchez à rien.

  16. #16
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Diantre!! Je crois que la vérité éclate au grand jour : je manque de RIGUEUR!!

  17. #17
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Eh bien ça marche dans le sens où il m'affiche l'adresse qui doit être retournée par la fonction MAIS… (désolée il y a un mais)
    il m'indique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Notice: Use of undefined constant adresseImg - assumed 'adresseImg' in /Applications/MAMP/htdocs/site_dazibao/image.classe.php on line 34
    images/image06.jpg
    Il arrive à faire la fonction mais il a visiblement un problème quand même
    adresseImg est en fait le nom de la colonne du tableau associatif où sont stockés les résultats de la requête. Et il me renvoie une adresse à la fin, ce qui est normal. Vu que "constant" est évoqué, il faut peut-être que je définisse une variable particulière mais pourquoi il arrive à me retourner l'adresse?

  18. #18
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Tu pourrais remettre le code avec les dernières modifications ?

    Sinon sur la ligne 33 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->adresse=$result[$nb_aleatoire][adresseImg];
    adresseImg est jamais déclaré .. je pense qu'il te renvoie une valeur avec de la chance. Si c'est le nom d'une colonne dans ton result, alors il faut peut-être mettre ta variable entre quote du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->adresse=$result[$this->nb_aleatoire]['adresseImg'];
    Règle N° 1 : Si tout va bien, ne touchez à rien.

  19. #19
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Oui c'est ça c'était les quotes autour du nom de la colonne.
    C'est nickel!! Merci de ta patience bob633
    Les choses se sont pas mal éclaircies pour moi quand même!

    Le code de la classe avec les modif et qui fonctionne (ça peut aider quelqu'un d'autre) :
    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
    <?php
    class Image
    {
    	public $numJeu;
    	public $nb_lignes=0;	
    	public $nb_aleatoire=0;
    	public $adresse='';
    	private $connexion;
     
    	function __construct()
    	{
    		include('connexionBDD.php');
     
    		$this->connexion=$connexion;
     
    	}
     
    	function imgAleatoire()
    	{
    		$sql='SELECT Image.idImg, Image.adresseImg FROM Image INNER JOIN Texte_Image ON Image.idImg = Texte_Image.idImg WHERE Texte_Image.numJeu =?';
    		$reqPrep=$this->connexion->prepare($sql);
    		$reqPrep->bindParam(1,$this->numJeu);
    		$reqPrep->execute();
    		//on obtient un tableau associatif à 2 dimensions
    		$result=$reqPrep->fetchAll(PDO::FETCH_ASSOC);
    		//print_r($result);
     
    		// compter le nb de lignes du tableau pour savoir il y a combien d'images qui correspondent à la requête
    		$this->nb_lignes=count($result);
    		//on tire un nbre au hasard entre 0 et $nb_lignes-1
    		$this->nb_aleatoire=mt_rand(0,$this->nb_lignes-1);
    		//ce nbre correspond au n° de ligne où on va chercher l'adresse de l'image
    		$this->adresse=$result[$this->nb_aleatoire]['adresseImg'];
    		return $this->adresse;
    	}
     
    	function setNumJeu($numJeu)
    	{
    		$this->numJeu=$numJeu;
    	}
    }
     
    ?>
    Par contre ton histoire de singleton ça m'intéresse. Je vais peut-être finir ce sujet sur ça. Je connais pas les singleton donc je vais juste regarder comment ça marche pour essayer de l'utiliser parce faire une connexion à chaque fois… Comme ça me servira forcément, autant que j'apprenne.

  20. #20
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Bon le singleton je pense que je vais laisser de côté pour l'instant parce que ça m'a l'air vraiment plus compliqué même si ça semble efficace

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

Discussions similaires

  1. addClass(): ajout de classe ne fonctionne pas
    Par t3__rrY dans le forum jQuery
    Réponses: 11
    Dernier message: 31/10/2014, 12h51
  2. [Python 3.X] Ma class ne fonctionne pas dans un Thread
    Par Bydouil dans le forum GUI
    Réponses: 7
    Dernier message: 19/08/2014, 19h25
  3. Import de DLL - appel 2 fois ne fonctionne pas
    Par douze_12 dans le forum VB.NET
    Réponses: 14
    Dernier message: 16/05/2012, 14h52
  4. Les appels aux fonctions ne fonctionnent pas
    Par MaPommeTao dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 16/08/2011, 22h33
  5. [POO] Faire appel au constructeur de la classe parent
    Par sliderman dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2008, 14h30

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