Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
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 17/08/2007, 02h51   #1
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 181
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 181
Points : 32
Points : 32
Par défaut Variables et fonctions

Bonjour, j'ai un probleme qui je suis sur est stupide, mais ne trouvant pas la solution j'ai besoin d'avoir vous .

J'ai fais un fichier functions.php

ou dedans se trouve toutes les var que je nécéssite pour mes fonctions telles que :
Code :
1
2
3
4
5
6
<?php
//Variables
 
//Information serveur
$var1 = blabla;
etc...
bref, mes variables.
Et direct aprés j'ai mes fonctions telles que :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Création du socket / Connection au serveur distant
function connect ($port){
	$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
	if ($socket === false)
	{
		echo "Error(1) : " . socket_strerror(socket_last_error()) . "<br/>\n";
	} else {
	    echo "OK.<br/>\n";
	}
 
	echo "Connexion sur '$address' en cours via le port '$port'...";
	$result = socket_connect($socket, $address, $port);
	if ($result === false)
	{
    	echo "connection failed(2).\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "<br/>\n";
	} else {
	    echo "OK.<br/>\n";
	}
}
//Envoi des données
function send($sdata){
etc......

Donc mon souci est que mes variables déclarée en premier lieu ne sont pas prises en compte dans mes fonctions, et donc quand j'include mon functions.php dans les pages nécéssitantes, il me dit que mes variables ne sont pas déclarées.

Une idée de pourquoi mes variables ne sont pas prises en compte?
Apparement il n'a pas envie de prendre en compte des variables éxterne à ma fonction .

Merci d'avance pour votre aide, votre indulgence et votre patience .
devoluti0n est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 05h48   #2
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
Pour utiliser $var1 dans une fonction, il faudra l'utiliser comme cela :
function foo () {
global $var1. $bar;
echo $var1.$bar
}

C'est comme ca qu'on commence a n'utiliser que des tableaux, puis des objets ...
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 08h37   #3
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut sécurité

Il y a un problème de sécurité dans ta façon de faire. Soit tes variables ont toujours les mêmes valeurs et dans ces conditions mieux vaut les transformer en constantes,
soit effectivement elles peuvent changer et tu crées une classe Config.php dans lesquelles tu déclares tes variables en private (si tu es en PHP5) et tu les récupères avec des fonctions. exemple

Code :
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
class ClassConfig {
    // Définitions des variables de classe
    private $_server = 'server';    // Serveur SQL
    private $_user = 'user';        // Utilisateur SQL
    private $_password = 'pass';    // Password SQL
    private $_dbname = 'dbname';        // Nom de la BDD PostgreSQL
 
    // Définitions des tables MySQL
    private $_prefix0 = '';        // préfixe des tables MySQL
 
    /** Définition des méthodes, et méthodes magiques **/
 
    // Constructeur
    public function __construct(){}
 
    // Destructeur
    public function __destruct(){}
 
    public function getSQLServer(){
        return $this->_server;
    }
 
    public function getSQLUser(){
        return $this->_user;
    }
 
    public function getSQLPassword(){
        return $this->_password;
    }
}
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 14h07   #4
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 181
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 181
Points : 32
Points : 32
En éffet ce sont des variables constantes (cherchez l'erreur ).
Bref je vais passer sa en constantes.

Mais pour les quelques variables qui restent de véritables variables , je les utilise dans plusieurs fonctions différentes et donc il faut vraiment que je puisse les mettre à l'éxtérieur de mes fonctions non ?
(Donc il faudrai utiliser des classes, je m'y atele tout de suite )
Afin de pouvoir les récuperer facilement.

Merci.
devoluti0n est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 16h57   #5
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
Citation:
Envoyé par is_null
Pour utiliser $var1 dans une fonction, il faudra l'utiliser comme cela :
function foo () {
global $var1. $bar;
echo $var1.$bar
}
Hehe ...
Au fait David, je te conseille de lire ca
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 17h21   #6
Membre régulier
 
Avatar de B.Moncef
 
Étudiant
Inscription : août 2007
Messages : 75
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2007
Messages : 75
Points : 83
Points : 83
Citation:
Envoyé par devoluti0n
je les utilise dans plusieurs fonctions différentes et donc il faut vraiment que je puisse les mettre à l'extérieur de mes fonctions non ?
(Donc il faudrai utiliser des classes, je m'y atèle tout de suite )
Faux, utiliser des variables externes dans le corps d'une fonction ne necessite pas forcement de programmation objet, regarde plutôt la solution de is_null.
B.Moncef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2007, 00h15   #7
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Citation:
Envoyé par is_null Voir le message
Hehe ...
Au fait David, je te conseille de lire ca
Ouais, j'avais pas lu. Mais c'est comme ça que je fais de toute façon, comme quoi... après avoir lu des milliers de pages de books et pages web, la logique fini par suivre
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 13h56   #8
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 181
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 181
Points : 32
Points : 32
Citation:
Envoyé par is_null Voir le message
Pour utiliser $var1 dans une fonction, il faudra l'utiliser comme cela :
function foo () {
global $var1. $bar;
echo $var1.$bar
}

C'est comme ca qu'on commence a n'utiliser que des tableaux, puis des objets ...
Okay ^^, mais je n'ai pas trop réagi car je ne comprends pas ce qu'est $bar.
devoluti0n est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 21h39   #9
Membre régulier
 
Avatar de B.Moncef
 
Étudiant
Inscription : août 2007
Messages : 75
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2007
Messages : 75
Points : 83
Points : 83
$bar est une variable qui sert ici juste pour t'expliquer comment t'y prendre. En gros l'exemple de is_null() pouvait tout aussi bien etre :
Code :
1
2
3
4
5
function foo () 
{
    global $var1;
    echo $var1;
}
B.Moncef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 21h52   #10
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 181
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 181
Points : 32
Points : 32
Ah oé ok d'accord .....
donc je met cete fonction avant mes autres fonctions c'est bien sa ? et je l'appele avant d'appeler mes autres fonctions ?
devoluti0n est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 22h25   #11
Membre régulier
 
Avatar de B.Moncef
 
Étudiant
Inscription : août 2007
Messages : 75
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2007
Messages : 75
Points : 83
Points : 83
Non. Au début de la fonction ou tu veux utiliser $var1, tu mets la ligne :
Par exemple :
Code :
1
2
3
4
5
6
function connect ($port)
{
    global $var1;
 
    Code de ta fonction;
}
B.Moncef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 22h52   #12
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 181
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 181
Points : 32
Points : 32
Euh, ben oui mais non .

En fait mon souci réside justement dans le fait que je dois utiliser une meme variable dans plusieurs fonction différentes .

genre :

$var = "a";


function 1 (){

echo $var;
}

function 2(){

$var = "b":
}


Enfin c'est un éxemple sans queue ni tête, mais bon voilà quoi, je veux pouvoir utiliser une variable dans plusieurs fonction diférente, sans avoir à la redéclarer dans mes fonctions à chaque fois.

Ou alors j'ai mal compris vos réponses...
devoluti0n est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 23h12   #13
Membre régulier
 
Avatar de B.Moncef
 
Étudiant
Inscription : août 2007
Messages : 75
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2007
Messages : 75
Points : 83
Points : 83
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
$var = 1;
 
function foo()
{
	global $var;
 
	echo $var;
}
 
function bar()
{
	global $var; 
 
	$var++;
}
 
foo();
bar();
printf('<br /> %d', $var);
 
?>
Citation:
1
2
B.Moncef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 23h21   #14
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 181
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 181
Points : 32
Points : 32
, je viens de comprendre (le temps que sa monte au cerveau ...).

Merci ! .
devoluti0n est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 00h32   #15
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 181
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 181
Points : 32
Points : 32
bon en fait j'ai un probleme :

Code :
1
2
3
 
define("inc","Truc à envoyer");
$sdata = inc;
Code :
1
2
3
4
5
6
7
 
function send($sdata){
global $sdata;
	echo "Envoi des informations de connexion...";
	socket_write($socket, $sdata, strlen($sdata));
	echo "OK.<br/>\n";
}

non pardon, je dirai même mieu, j'ai 2 problemes !

ceci donne lieu à l'érreur suivante :

Notice: Use of undefined constant sdata - assumed 'sdata' in c:\program files\easyphp1-8\www\index2.php on line 31


et à l'érreur suivante:
Notice: Undefined variable: socket in c:\program files\easyphp1-8\www\functions.php on line 58

$socket est en fait une variable que je créé dans une autre fonction.


2problemes, 2questions :

Pourquoi cette premiere erreur ?

Comment récuperer une variable que l'on créé dans une autre fonction ?

merci encore pour votre patience ...
devoluti0n est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 00h47   #16
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
D'abord, au sujet de $foo et $bar : http://fr.wikipedia.org/wiki/Variabl...A9tasyntaxique

Au sujet de ton code, tu t'en sors au plus mal !
Heureusement, la lecture de la documentation sur la portee des variables repondra a toutes questions : http://fr2.php.net/variables.scope.

J'ai un vague souvenir d'une citation amusante : read the manual before asking, or you'll be yelled on a second time !
(Lisez le manual avant de demander, ca evitera qu'on vous gueule dessus une seconde fois)

Bonne lecture !
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 07h56   #17
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut je me défoule

Citation:
Envoyé par B.Moncef Voir le message
$bar est une variable qui sert ici juste pour t'expliquer comment t'y prendre. En gros l'exemple de is_null() pouvait tout aussi bien etre :
Code :
1
2
3
4
5
function foo () 
{
    global $var1;
    echo $var1;
}
Ce qui me semble bien plus clair et pédagogique. Ah la la... le fameux copier/coller des docs...

Citation:
Envoyé par B.Moncef Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
$var = 1;
 
function foo()
{
    global $var;
 
    echo $var;
}
 
function bar()
{
    global $var; 
 
    $var++;
}
 
foo();
bar();
printf('<br /> %d', $var);
 
?>
Vive la POO
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class UneClasse {
    // public $_var;
 
    public function foo($_var){
        return $_var;
    }
 
    public function bar($_var){
        return $_var;
    }
}
 
 
echo UneClasse::foo(1);
echo '<br/>';
echo UneClasse::bar(2);
?>
Citation:
Envoyé par is_null Voir le message
(...)Au sujet de ton code, tu t'en sors au plus mal !
Heureusement, la lecture de la documentation sur la portee des variables repondra a toutes questions : http://fr2.php.net/variables.scope.

J'ai un vague souvenir d'une citation amusante : read the manual before asking, or you'll be yelled on a second time !
(Lisez le manual avant de demander, ca evitera qu'on vous gueule dessus une seconde fois)

Bonne lecture !
Sacré is_null, toujours aussi respectueux et toujours aussi diplômate.
zyongh 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 14h01.


 
 
 
 
Partenaires

Hébergement Web