Aller au contenu

Variables globales


furious Gontran

Sujets conseillés

Bonjour, bonnes fetes a tous :fete:

pour meconnecter a ma base mysql, j'utilise un script definissant des variables globales: define ('NOM',"202");

ce script contient le nom, le mot de passe, le nom de la base et le serveur.

J'apelle ce script lorsque j'ais besoin d'un de me connecter, car il contient toutes les variables nescessaire pour ca.

Cependant, ce sont des globales ais je vraiment besoin de l'apeller ?

Les globales ne restent-elles pas en memoire une fois definie ?

Je me pose ces questions car j'ais plusieurs utilisateurs avec des droits different que je pourrais determiner par un if simple derriere un formulaire demandant le nom et le code.

Seulement, si j'utilise des include pour ce script, je suis bien obligé de lui passer le nom et le pass de l'utilisateur a chaque fois que je l'apelle.

D'ou la question: puis je determiner mes globales une fois pour toute ??

Lien vers le commentaire
Partager sur d’autres sites

Tu confonds plusieurs choses, les globales et les constantes.

define("NOM","nico");

est une constante, qu'il faut appeler à chaque fois.

On la met en majuscule, mais ce n'est pas une obligation.

$GLOBALS['NOM'] est une variable particulière. C'est une variable globale.

Tu peux te créer tes variables globales, mais il faut savoir qu'elles sont tout de même réinitialisées à chaque démarrage de la page en qestion.

Lien vers le commentaire
Partager sur d’autres sites

Donc, dans mon cas il vaudrais mieux determiner des constantes des le depart avec le login et le mdp les serveur etc ?

Mon code fais le test de la personne qui se connecte par une serie de if determinant les constantes appropriées.

Dois-je toujours passer le nom de la personne a chaque fois que je veux me connecter (pas glop niveau securité,non ?)ou les constantes peuvent me permettre de le faire une fois pour toute ?

Lien vers le commentaire
Partager sur d’autres sites

Ce n'est pas la même chose. La constante est... constante. Les variables, même globales, peuvent évoluer en cours de programme.

Mettre les données de connexion sql en constante est normal, puisqu'elles ne risquent pas de changer durant le programme. Idem pour le nom de la personne. Mais mettre il faut faire attention à ne pas avoir besoin de le modifier en cours de programme (A priori, je ne vois pas pourquoi, tu vas me dire, mais bon..)

Que tu mettes le nom de la personne ou une constante, c'est (presque) pareil au niveau sécurité. Un utilisateur lambda ne doit pas acceder à une partie, même infime de tes scripts. Ce serait là une faille très importante.

Les constantes sont normalement plus rapides que les variables. Mais par rapport au nom de la personne pour une connexion sql, leur emploi est surtout plus facile si tu es amené à changer de serveur, ou autre.

Normalement, tu as un seul fichier config. pour tout le programme, voire pour tout le site. Si tu disperses les données à droite à gauche, le site devient vite dépendant du serveur sur lequel il tourne, et au moindre changement, tu auras tout à reprendre..

Lien vers le commentaire
Partager sur d’autres sites

  • 1 month later...

Je rouvre ce sujet pour une question toute bete.

J'utilise un script contenant mes variables de connection SQL.

Ce sont des constantes.

Dans chaques scripts en ayant besoin j'apelle donc ce fichier avec un require.

Mais si je determine mes variables une seule fois, au tout debut de mon programme, suis je obligé de rapeller tout le temps le script par un require ???

Lien vers le commentaire
Partager sur d’autres sites

Non, une seule fois, au début. Ensuite, tu n'as plus besoin. Il faut voir les includes un peu comme des fonctions, en fait. On les 'charge' une fois, après c'est bon,.. jusqu'à la fin du programme. Pour un autre internaute qui demande une autre page, il faut refaire un include, évidement. Mais, tant que le programme ne se termine pas, il n'en faut qu'un seul ;)

Lien vers le commentaire
Partager sur d’autres sites

Merci ca va me faciliter la vie ca.

Par contre encore un truc: la definition du terme programme.

Un programme est un ensemblede pages et de scripts effectuant des actions particuliere sur ma base?

Parceque l'on doit pas etre d'accord sur la definition de ce terme vu que ca marche pas.

Parceque la je determine mes globales au debut, sur une page ou l'utilisateur rentre son code. Celui ci determine son mot de passe et son login sql en constante.

L'utilisateur arrive ensuite sur une pagede recherche. Le probleme c'est que si je ne reinclus pas le fichier connect. La connection ne marche pas.

Un autre probleme est que si je le reinclus, il faudrais que je lui renvoisles données de mon utilisateu. mais je ne peux pas lui demander de taper sans cesse son login et son pass...

Modifié par furious Gontran
Lien vers le commentaire
Partager sur d’autres sites

Je l'ais moi aussi entendu dire.

Ce pourquoi je suis en train de me galerer avec des constantes au lieud'utiliser le tableau $_GLOBALS ce qui me semblerait beaucoup plus simple et pratique....

Personne ne peut m'aider ??

Je sais que c'est une routine, mais j'ais beau chercher je ne trouve reellement pas comment faire...

:wacko:

Modifié par furious Gontran
Lien vers le commentaire
Partager sur d’autres sites

Il ne faut pas confondre programme et programme. En fait, plus clairement, je ne connais pas de définitions de programme...

Un programme est un ensemble de routines et sous-routines destiné à effectuer une tache, en prenant ou non des variables en entrée.

Il ne faut pas mélanger programme et fonction. Une fonction est une 'sous-routine'. De même qu'il ne faut pas mélanger programme et procédure. La procédure est une fonction qui effectue une tache, sans rien retourner.

Mais php est assez permissif. Il mélange assez bien programme, fonction et procédure. Un fichier include peut etre utilisé comme 'fonction', il peut retourner quelque chose. De même , une fonction peut ne rien retourner, etc..

A coté de ca, il y a deux choses. Le programme qui s'execute pour afficher une page, et le fichier (c'est comme ca que je l'appelle ;) ) qui est appelé par un include, et qui précède bien souvent une autre partie de programme.

Ce dont tu me parles, c'est donc le programme, dans son ensemble. Ce dont je te parlais, c'est plutot les fichiers d'include... :D

Ainsi, si tu as ce shéma :

index.php

- include header

- include page

- include footer

Là, tu n'as besoin d'appeler tes variables de connexion qu'une seule fois, disons.. dans le header, par exemple.

Si tu as ce schéma :

index.php

- include footer

- lien vers page.php

page.php

- include footer

- lien vers tartempion.

Là, tu as besoin d'appeler tes var. de connexion pour 'page', et pour 'index'. Tu les mets donc dans le fichier footer.

Bonne lecture ;)

Lien vers le commentaire
Partager sur d’autres sites

Donc, pour en revenir à ta question, le problème n'est pas dans les globales, mais dans les sessions...

Mais tu mélanges un peu, il me semble.

Pour que ce soit accessible dans tout le programme (donc pour l'exemple ci-dessus) dans index.php, dans le fichier page, dans le fichier footer, dans le fichier header), il te faut utiliser soit des constantes, soit des globales, soit des variables simples (normales, quoi..)

Pour que ce soit accessible sur toutes les pages de ton site, il te faut utilsier les sessions : $_SESSION.

Quel est l'intéret de $_GLOBALES ??

Simple : Si tu fais une fonction, par exemple :

function foo($a){
$b =  "<b>".$a."</b>";
return $b;
}

Là, tu as accès à la variable retournée. Il te suffit d'affecter le retour de fonction à une variable, et ca marche :

$text = foo("coucou");

Mais tu n'as pas accès aux variables dont tu te sert, dans la fonction. Si tu fais, par exemple :

function foo(){
$b =  "coucou";
return $b;
}
echo $b;

ca ne va rien afficher, parce que la variable $b ne veut rien dire en dehors de la fonction.

Tu voudrais qu'elle veuille dire tout de même quelque chose ?

Ben.. Faut se servir des globales ;)

Par exemple, tu veux faire une fonction pour ta base de données :

function query($query){

$result = mysql_query($query,$_GLOBALS['link']);

return $result;

}

Là, tu utilises la variable globale $link, qui correspond traditionnellement à la ligne :

$link = mysql_connect("","","");

(je n'ai pas dit que ca permettait de ne pas écrire ces lignes !! )

...

j'ai été clair, là ?

(j'en suis plus trop sûr :( )

Lien vers le commentaire
Partager sur d’autres sites

je relis et je te dis ca...

Hummm...

Ben apres le mot session j'ais eu un peu de mal mais je vais m'y mettre.

Par contre j'ais au moins compris qu'il faut que j'utilise des sessions pour faire ce que je desire faire...

Alors le temps de me trouver des articles la dessus et je reviens pour des questions sur les session...

(Je fais du café aussi paske je sens que la nuit va etre longue. :gueule: )

Modifié par furious Gontran
Lien vers le commentaire
Partager sur d’autres sites

Et utiliser

Remote_user et remote_password ?

Est ce une solution acceptable pour mon programme ?

Elle me parait plus simple que les sessions.

enfin, plutot

$_SERVER['PHP_AUTH_USER'] et $_SERVER['PHP_AUTH_PW']

comme me l'as appris nexen.

Y'a t'il une raison de ne pas utiliser cette methode ?

Modifié par furious Gontran
Lien vers le commentaire
Partager sur d’autres sites

Oui, c'est buggé dans certains cas.

Tout du moins, c'est ce que je considère, outre le fait qu'il est possible d'éviter l'affichage de cette page, et autres choses, que décrit très bien la doc.. dispo sur le site de nexen ;)

Lien vers le commentaire
Partager sur d’autres sites

hello,

Je viens de lire tout ça, et je voudrais poser une question supplémentaire:

Quand est-ce qu'on sort du programme ? Par ex, si :

cas 1) j'appelle des pages en .php qui ne contienne que du HTML sans <? ni ?> pour encadrer le tout, est-ce que je sors de mon programme.

cas 2) si j'appelle des pages .php qui ne contiennent que du HTML que j'ai encadré dans <? et ?> est-ce que je reste dans mon programme ? Est-ce qu'un <a href="... .php"> me fait sortir de mon programme ?

merci.

Lien vers le commentaire
Partager sur d’autres sites

Le serveur recoit une requète, venant d'un internaute. Il la traite, et renvoie les infos au navigateur. Une fois l'information traitée, le programme est terminé.

Donc, quand la page est finie d'être affichée, et qu'il est marqué 'terminé' en bas, le serveur a fini (c'est un peu plus complexe, mais c'ets à peu près ca.).

Pour le programme php en lui même, c'est identique. Les variables ont une durée de vie qui commence lorsque le serveur recoit l'information, et qui se termine lorsque le serveur a fini d'envoyer ses infos.

Les variables de session, par exemple, permettent de pallier à ce problème, à condition de les utiliser sciemment.

Lien vers le commentaire
Partager sur d’autres sites

merci.

bon, donc, ce que tu dis expliques pourquoi il faut utiliser session_start() à chaque fois (page.php), pour relire le "cookie" (sur le serveur) qui contient les datas appelée par $_SESSION[''], à chaque fois qu'il y a un nouvel échange client/serveur ?

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...