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 :

Question de noob sur "include" et les sessions


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut Question de noob sur "include" et les sessions
    Hello à tous !

    Deuxième question de noob (je n'ai pas d'expérience en php donc je découvre...), cette fois concernant la fonction "include" et les sessions (et autre)

    Voilà, je bosse sur un projet de site avec inscription et connexion de membres, et dialogue donc avec une base de données.

    J'ai un fichier index.php dans lequel j'ai quelques iframe, qui me permettent de layouter (copyright ! ) facilement mes pages (menu du haut, menu de gauche, et container).

    A part cela, j'ai donc une base de données, et une session afin de faciliter la sauvegarde des données de page en page.

    Par contre, voilà mon problème : apparemment je connais pas bien "include" car je pensais que ca chargeait mon code directement dans la page index.php. De ce fait, je pensais qu'il me suffirait de faire un session_start() en haut de la page index.php ainsi qu'ouvrir la connexion à la base de données, pour que toutes mes pages y aient accès... Ben voui, puisque je pensais que le code était inclus (d'où le mot "include()"... ) dans ma page index.php.

    Et ben non !
    Je suis malgré tout obligé d'appeler session_start() dans chaque page php, même si je l'include dans index.php, et pareil pour la connexion ! (moi qui voulais optimiser le nombre de connexions à ma base, ben j'ai foiré... )

    Pour ce qui est de la connexion a la BDD, j'ai meme tenté un mysql_pconnect() que je n'appelle qu'une fois, mais non, ca marche pas non plus (il me dit, dans une autre page, qu'il est impossible de contacter blablabla, bref pas de connexion a la BDD quoi).

    Alors... Est ce que je suis donc vraiment obligé de continuer comme j'ai fait maintenant ? (c'est à dire un session_start() et un mysql_connect() pour CHAQUE page.............)

    Si vous avez des tips, conseils ou autre, je suis preneur
    (j'ai parcouru les forums et la faq mais rien de satisfaisant).

    Merci à tous les PHPiens !

    Lideln

  2. #2
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    Salut, malheureusement pour toi oui. Si tu veux récupérer une variable provenant d'une autre page, il faut passer par les variables de sessions. Pour la connexion à la BDD, c'est pareil, sur chaque où tu veux te connecter à ta BDD, tu dois faire un mysql_connect. Il me semble qu'il est possible de mettre le mysql_connect dans une page à part, mais tu seras obligé d'appeler cette page à chaque fois. Désolé pour toi.

  3. #3
    Membre Expert
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Par défaut
    Pour le session_start() j'en ait 1 et 1 seul dans mon code et il est dans une page qui est inclue par toutes les autres donc tu dois avoir un souci au niveau de tes inclusions car ça fonctionne très bien pour moi ^^

    En ce qui concerne la connection à la BDD c'est une autre histoire il te faut en effet te connecter à chaque requête mais bon il te suffit de gérer ça dans une fonction "quifétou" (copyright aussi ) se connecte, exécute ta requête, te renvoie le résultat !
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  4. #4
    Membre émérite
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Par défaut
    Citation Envoyé par guitou12
    En ce qui concerne la connection à la BDD c'est une autre histoire il te faut en effet te connecter à chaque requête mais bon il te suffit de gérer ça dans une fonction "quifétou" (copyright aussi ) se connecte, exécute ta requête, te renvoie le résultat !
    ben la voila la quifétou" juste au dessus !

  5. #5
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Si mes souvenirs sont bons, le mysql_pconnect il faut le faire à chaque fois, seulement si une connexion persistante existe déjà il ne se reconnecte pas.

    Par contre, toujours si mes souvenirs sont bons, c'est plutôt mauvais au niveau des performances du côté du serveur mysql (ça laisse les connexions ouvertes, donc ça augmente le nombre de connexions et on peut saturer).

    Voilà, tout ça c'est sous réserve de vérification (flemme du lundi matin)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut petit ajout :)
    Je me permets d'ajouter une chtite question javascript

    J'ai une fonction qui affiche/cache un élément "div".
    J'appelle cette fonction dans un lien, du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="<script>javascript:toggleVisible('mon_div')</script>" "_top">BLA</a>
    enfin un truc du genre car là je cite de mémoire (et j'ai une mauvaise mémoire lol)

    Donc ca marche impec, c zoli et tout, mais par contre ! Quand j'essaie d'appeler cette fonction "en brut", c'est à dire dans le "onLoad" d'un body, ou comme n'importe quelle instruction php, ca marche pas

    Je l'appelle pourtant pareil :
    [code]
    <?php
    echo '<script>javascript:toggleVisible(\'mon_div\')</script>';
    ?>
    [/php]
    un truc du genre

    Ben ca marche pas....

    Si quelqu'un sait ce que j'ai fait de faux... (la fonction est dans un .js que j'inclus en début de page)

    Merci encore (et désolé pour les questions de noob, c pas du high level, sorry )

    Lideln

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Wow griese merci pour cette réponse d'une rapidité fulgurante

    D'accord... C'est d'ailleurs ce que j'ai fait, j'ai ma fonction de connexion (avec gestion d'erreur et tout le tralala) dans un fichier php que j'inclus, mais justement, mon interrogation venait de là, puisque le mysql_connect() n'est valable que dans un script (il meurt à la fin du script), or ca marche si j'include le script qui contient le mysql_connect().
    Mais par contre ca marche pas quand le script qui inclue le script qui contient mysql_connect() inclue aussi un autre script (oula ca devient compliqué lol)

    C'est ca que je trouvais bizarre...

    Enfin merci de ta réponse, je vais laisse comme c'est, donc

    Thx,

    Lideln

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Merci pour vos réponses rapides, décidément j'aurai pas le temps de me remettre au boulot, vous allez trop vite

    Guitou12, oui j'ai aussi un session_start() dans un fichier que j'include, mais je trouvais ca bizarre en fait d'avoir une page qui en include plein d'autre, et que ces pages là ne puissent pas bénéficier automatiquement du session_start() de la page qui les a include (index.php)...

    Eusebius, oui, il me semble aussi que lorsqu'on appelle mysql_pconnect(), il vérifie si une connexion est déjà active et la retourne si c'est le cas.

    Par contre, pour ce qui est des perf, vu que tous les membres du site se connectent toujours avec le meme nom d'utilisateur et mot de passe (les miens quoi), en gros j'aurai une seule connexion... ? Graaa je m'y perds, ca y est

    Pour l'instant je n'ai que ma page perso Free comme hébergeur, mais j'aimerais faire un site qui permette un peu le meme genre de choses que meetic, mais en totally free (désolé si ca vous parait un peu bidon, mais bon je fais ca dans mon temps libre...)
    C'est a dire : plein de connectés en meme temps, envoi de messages type mail, recherche de membres, affichage des profils etc, et si j'y arrive éventuellement un chat (mais ca c'est vraiment pas sûr, car je considère que ca servira pas a grand chose, des chats gratuits yen a plein, et des bien plus performants et sympas que ce que je pourrais faire lol )

    Voila voila... Est ce réalisable ? J'espere (et je pense) que oui, mais vous etes plus habitués que moi a ce genre de choses, donc votre avis compte

  9. #9
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par Lideln
    Eusebius, oui, il me semble aussi que lorsqu'on appelle mysql_pconnect(), il vérifie si une connexion est déjà active et la retourne si c'est le cas.

    Par contre, pour ce qui est des perf, vu que tous les membres du site se connectent toujours avec le meme nom d'utilisateur et mot de passe (les miens quoi), en gros j'aurai une seule connexion... ? Graaa je m'y perds, ca y est
    Heu... c'est un peu plus compliqué que ça, il me semble que PHP gère un pool de connexions, et qu'en utilisant les connexions persistantes ça met un peu le bronx là-dedans. Mais vu du développeur, chaque utilisateur a une connexion distincte (qui peut éventuellement être multiplexée, mais c'est pas toi qui gère ça).

  10. #10
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    Citation Envoyé par Lideln
    Wow griese merci pour cette réponse d'une rapidité fulgurante
    Toujours à l'affût le griese

    Citation Envoyé par Lideln
    Guitou12, oui j'ai aussi un session_start() dans un fichier que j'include, mais je trouvais ca bizarre en fait d'avoir une page qui en include plein d'autre, et que ces pages là ne puissent pas bénéficier automatiquement du session_start() de la page qui les a include (index.php)...
    Meme si tu inclus une page dans une page, les deux codes restent complètement distincts et n'ont aucun rapport entre eux. Il n'y a aucun échange direct entre ces deux pages.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Merci
    Meme si tu inclus une page dans une page, les deux codes restent complètement distincts et n'ont aucun rapport entre eux. Il n'y a aucun échange direct entre ces deux pages.
    C'est exactement ca que je me demandais...
    Donc merci pour cette réponse !

    Et au fait, impeccable ton avatar de bob l'éponge
    (j'adore ! les tetes trop délirantes qu'ils ont les personnages dans la série et dans le film ! lol)

    Merci encore pour la réponse

    A+

    Lideln

  12. #12
    Membre émérite
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Par défaut
    Ben deja en principe tu fait une connection PAR requete et pares tu ferme, tu reste pas connecté pour rien

    si tu veux de simplifier la vie fait une classe "database" par ex oû tu met une methode pour se connecter, c'est assez simple :
    <?
    Class database{

    var $DB_BDD;
    var $DB_USER;
    var $DB_PASS;
    var $DB_SERVER;
    var $DB_CONN;

    /**Constructeur de la classe*:

    function Database(){
    $this->DB_BDD = "ta base de donnée";
    $this->DB_USER = "ton identifiant";
    $this->DB_PASS = "ton password";
    $this->DB_SERVER = "ton serveur";
    }

    /** methode DB_CONN() pour la connexion
    retourne le ponteur deconnexion a la base
    */
    function DB_CONN(){

    $this->DB_CONN = mysql_connect($this->DB_SERVER, $this->DB_USER, $this->DB_PASS);
    mysql_select_db($this->DB_BDD, $this->DB_CONN);
    return $this->DB_CONN;
    }
    }
    ?>
    puis apres tu n'a plus qu'a faire :

    include("./le/chemin/de/ta/classe/database.php");

    declare la variable :

    global $base;
    ou de session pour toi apparement
    $_SESSION['base'];

    tu l'instancie :

    $base = new Database();
    ou
    $_SESSION['base'] =new Database();

    apres pout tes requetes tu es penard :

    $resultatRequete = mysql_query("SELECT machin FROM truc WHERE etc", $base->DB_CONN());

    ou encore

    $resultatRequete = mysql_query("SELECT machin FROM truc WHERE etc", $_SESSION['base']->DB_CONN());
    voila c'est le plus simple que je peut te proposer...
    @+

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Merci SnakemaN pour cette énorme réponse, plein d'infos que je m'empresserai de mettre à exécution une fois chez moi ce soir heheeee

    Par contre, j'ai toujours une incertitude :
    j'avais lu quelque part qu'il fallait au MAXIMUM minimiser les connexions à la base de données, car ca prend beaucoup de temps (par rapport à une simple requete).

    Donc si je fais une connexion pour chaque requete, ca risque pas d'etre moyen, niveau performances ?

    (j'y connais rien, je te dis juste ce que j'ai lu sur un site qui parlait de mysql)

    Lid

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    ben la voila la quifétou" juste au dessus !
    lol en effet
    Mais reste toujours cette incertitude concernant les performances...
    Si l'on admet que la connexion à la BDD est très lente par rapport à une requete (sur un site j'ai lu que le rapport était de 10, voire 100 je sais plus, mais un gros truc quoi), et si on admet qu'il pourrait y avoir 3 000 connectés en meme temps sur le site (donc potentiellement 3000 requetes a chaque instant, soit 3000 demandes de connexion à la BDD), ca pose pas un sérieux pb de perfs ?

    désolé si je dis nimp lol j'y connais encore pas grand chose ....

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Oki Eusebius, je resterai donc sur le mysql_connect() pour l'instant...
    Car si on rentre trop dans les détails, genre le pool de connexions et tout, ben je vais etre largué lol

    C'est pas toi qui déconseillais mysql_pconnect() d'ailleurs dans un des threads... ? Il me semble...

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Par défaut
    Merci pour ces infos Eusebius, et SnakemaN.

    Je vais en effet aller faire un petit tour sur le forum mysql pdt la pause déjeuner...

    Merci encore pour vos réponses !

    Lideln

  17. #17
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par Lideln
    Donc si je fais une connexion pour chaque requete, ca risque pas d'etre moyen, niveau performances ?
    Si carrément, tes performances vont s'effondrer si tu as beaucoup de requêtes.
    Il ne faut pas ouvrir de connexion pour rien, et regrouper au maximum les requêtes...

  18. #18
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Je te conseille d'aller discuter de tes problèmes de performances sur le forum MySQL, il y a des experts qui sauront t'expliquer tout ça très bien.

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

Discussions similaires

  1. Pb de compil sur une procédure pour killer les sessions d'une base
    Par tibal dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 24/04/2009, 16h42
  2. [c#] une question de noob... sur les textbox
    Par warenbe dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/08/2005, 23h13

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