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 :

Comment corriger cette classe ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut Comment corriger cette classe ?
    Bonjour,

    Je m'essaie à l'usage des class et fonctions (oui je sais en 2017 je retarde un peu).

    Je ne doute pas que mon code soit foireux et dans la logique et dans la syntaxe, mais enfin, il faut bien débuter par quelque chose.
    Aussi, si vous pouviez me dire quoi corriger là dedans, je vous en serais reconnaissant.
    Il s'agit donc de récupérer l'id d'une page pour le passer en paramètre à une requête sql. Je dois le faire dans le cadre de la classe qui débute le script.

    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
     
    $core->tpl->addValue('myContent',array('myTpl','myContent'));
     
    class myTpl {
     
        public static function myContent ()
        {
     
    //1ere partie, on récupère l'id de la page
    		$p = $_ctx->posts->post_id;
       		return $p; 
     
     
    //2eme partie, on utilise l'id de la page dans la requête 
       $sql = "
    SELECT
    post_content
    FROM
    dot_post
    WHERE post_id=".$p."
    ";
    $stmt = $dbh->prepare ($sql); 
    $stmt->execute();
    while($lettre= $stmt->fetch(PDO::FETCH_OBJ))
    {
    $post_content=$lettre->post_content;
     
    echo' <u>'.$post_content.'</u><br>'
    ;}//ferme while  
     
        	return $sql;
     
        }
     
    }



    Merci d'avance...


    **edit**

    Bon apparemment, le premier return vient clore la fonction, donc il faut l'enlever ? Mais ça ne fonctionne pas davantage, en fait. Si vous avez une idée....

  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
    Par défaut
    Ton $_ctx et plus loin ton $dbh n'existent pas dans la classe et encore moins dans ta fonction myContent().
    D'ou viennent-ils ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut
    Salut sabotage,

    $_ctx et $dbh sont les variables de connexion à la base de données. Donc effectivement, il n'est pas possible d'avoir deux variables différentes.
    Mais pourquoi donc ces deux variables, ou une seule des deux disons, devraient-elles "exister dans la classe ou dans la fonction", dans la mesure où elles sont instanciées ailleurs dans les scripts ?

  4. #4
    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
    Par défaut
    À cause de la portée des variables : tes variables définies à l’extérieur de la classe n'existent pas dans la classe.
    Tout comme et programmation sans objet les variables dans le script courant n'existent pas à l'intérieur d'une fonction.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut
    Hum... Oui, mais alors si je prends l'exemple de ce code fonctionnel :

    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
    $core->tpl->addValue('myContent',array('myTpl','myContent'));
     
    class myTpl {
     
        public static function myContent ()
        {
    		$p = '<?php
    		$con =& $core->con;
    		$id = $_ctx->posts->post_id;
    		$query = \'SELECT post_content FROM \'.$core->prefix.\'post WHERE post_id="\'.$id.\'"\';
    		$res = $con->select($query);
    		echo $res->f(\'post_content\') ?>';
     
    		return $p;
        }
     
    }
    On a donc $_ctx qui est la variable de connexion à la base de donnée. Et ce script fonctionne, pourtant $_ctx n'est pas instanciée dans la class myTpl.

  6. #6
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Salut,
    Le code que tu montres $p est une chaine de caractères dans des quotes simples (les variables ne seront pas interprétées), tu peux faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo myTpl::myContent();
    en dehors de ta classe, tu verras le résultat. Donc l'exemple que tu montres n'a rien à avoir avec la portée des variables. d'ailleurs dans ton premier exemple, le code après ton return $p; ne s’exécutera pas

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/01/2009, 21h51
  2. Réponses: 0
    Dernier message: 30/01/2009, 21h51
  3. Réponses: 4
    Dernier message: 11/01/2008, 21h37
  4. [débutant][JSci][Matrix]comment utiliser cette classe
    Par Clark dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 10/05/2005, 10h40

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