Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/07/2006, 11h45   #1
Membre du Club
 
Inscription : juillet 2006
Messages : 127
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 127
Points : 46
Points : 46
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
Lideln est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 11h49   #2
Membre confirmé
 
Avatar de griese
 
Inscription : juin 2006
Messages : 646
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juin 2006
Messages : 646
Points : 243
Points : 243
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.
__________________
(\ _ /)
(='.'=) Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant.

http://mosfootball.over-blog.com
griese est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 11h52   #3
Membre du Club
 
Inscription : juillet 2006
Messages : 127
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 127
Points : 46
Points : 46
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 :
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
Lideln est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 11h53   #4
Membre émérite
 
Avatar de guitou12
 
Guillaume
Inscription : juillet 2006
Messages : 813
Détails du profil
Informations personnelles :
Nom : Guillaume
Âge : 29

Informations forums :
Inscription : juillet 2006
Messages : 813
Points : 905
Points : 905
Envoyer un message via MSN à guitou12
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 !
guitou12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 11h54   #5
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
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)
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 11h56   #6
Membre du Club
 
Inscription : juillet 2006
Messages : 127
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 127
Points : 46
Points : 46
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
Lideln est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 12h03   #7
Membre du Club
 
Inscription : juillet 2006
Messages : 127
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 127
Points : 46
Points : 46
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
Lideln est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 12h06   #8
Membre Expert
 
Avatar de SnakemaN
 
Bidouille-tout Android
Inscription : juillet 2006
Messages : 871
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Bidouille-tout Android

Informations forums :
Inscription : juillet 2006
Messages : 871
Points : 1 102
Points : 1 102
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 :
Citation:
<?
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...
@+
SnakemaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 12h10   #9
Membre Expert
 
Avatar de SnakemaN
 
Bidouille-tout Android
Inscription : juillet 2006
Messages : 871
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Bidouille-tout Android

Informations forums :
Inscription : juillet 2006
Messages : 871
Points : 1 102
Points : 1 102
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 !
SnakemaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 12h11   #10
Membre du Club
 
Inscription : juillet 2006
Messages : 127
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 127
Points : 46
Points : 46
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
Lideln est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 12h13   #11
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
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).
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 12h14   #12
Membre du Club
 
Inscription : juillet 2006
Messages : 127
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 127
Points : 46
Points : 46
Citation:
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 ....
Lideln est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 12h14   #13
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
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...
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 12h16   #14
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
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.
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 12h16   #15
Membre du Club
 
Inscription : juillet 2006
Messages : 127
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 127
Points : 46
Points : 46
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...
Lideln est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 12h17   #16
Membre du Club
 
Inscription : juillet 2006
Messages : 127
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 127
Points : 46
Points : 46
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
Lideln est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 14h19   #17
Membre confirmé
 
Avatar de griese
 
Inscription : juin 2006
Messages : 646
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juin 2006
Messages : 646
Points : 243
Points : 243
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.
__________________
(\ _ /)
(='.'=) Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant.

http://mosfootball.over-blog.com
griese est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 20h49   #18
Membre du Club
 
Inscription : juillet 2006
Messages : 127
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 127
Points : 46
Points : 46
Merci
Citation:
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
Lideln est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h32.


 
 
 
 
Partenaires

Hébergement Web