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 :

appel d'une fonction dans une autre fonction


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut appel d'une fonction dans une autre fonction
    bonjour à tous,

    j'ai un problème, je veux appelé une fonction dans une autre fonction et je ne sait pas comment faire...

    j'ai cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	function initvariable()
    	{
    	// information pour la connection à la DB
    	$host = "localhost"; // connexion au serveur
    	$user = "root"; //utilisateur
    	$pass = ""; // mot de passe
    	$db = "elmcfr"; // nom de la base
    	}
    et celle ci :
    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
    	function connectDB()
    	{
     
    		// connection à la DB
    		$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    		mysql_select_db($db) or die ('Erreur :'.mysql_error());
     
    		mysql_query("SET NAMES UTF8"); //encodage en utf8 - seulement après la connection
    		//Si MySQL n'est pas configuré par défaut pour l'UTF-8 il faut lui préciser la manière dont elle doit traiter les caractères contenus dans une requête SQL à l'aide de cette instruction 
     
    		if($link <= 0)
    		{
    			$link = 'Le serveur nexiste pas';
    		}
    			else
    			{
    				$resultdb = mysql_select_db ("elmcfr"); //mysql_select_db — Sélectionne une base de données MySQL, en l'occurence la base "elmcfr"
     
    					if($resultdb <= 0)
    					$link='La base de données na pas été trouvée';
     
    					else
    					$link='ok';
    			}
    		return $link;
    	}
    comment puis je faire pour insérer ma première fonction dans la seconde ???
    ce n'est pas un "include" vu que ce n'est pas une page ?? merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Ça ne fonctionnera pas de toute manière : la seconde fonction n'aura pas accès aux variables de la première. Question de portée : les variables d'une fonction ne sont connues que d'elle seule et détruites à sa fin.

    Il faudrait adopter une autre méthode (constante, inclusion, retourner un tableau, etc).

    PS : je ne propose pas de subterfuges (références ou global par exemple) qui ne sont pas réellement des solutions (complexité inutile).

  3. #3
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    merci pour vos réponses
    je posais cette question puisque sa doit bien être possible mais comme le dit julp, cela doit être assez complexe. Sa m'évitait de redéfinir plusieurs fois dans différentes fonctions les 4 variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$host = "localhost"; // connexion au serveur
    	$user = "root"; //utilisateur
    	$pass = ""; // mot de passe
    	$db = ""; // nom de la base

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par julp Voir le message
    Il faudrait adopter une autre méthode (constante, inclusion, retourner un tableau, etc).
    Je ne vois pas trop l'intérêt de faire intervenir une fonction pour la définition des paramètres de connexion. Et on peut se demander pourquoi on a en besoin 4 fois.

    Simplifiez-vous la tâche et affranchissez-vous du problème de portée avec des constantes ?

  5. #5
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    je suis débutant donc je cherche des solutions...

    j'ai une page "traitements.php" dont voici le code :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    <?php
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	// CONNECTION A LA BASE DE DONNEE CORRESPONDANTE
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	function connectDB()
    	{
    		$host = "localhost"; // connexion au serveur
    		$user = "root"; //utilisateur
    		$pass = ""; // mot de passe
    		$db = "elmcfr"; // nom de la base
     
    		// connection à la DB
    		$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    		mysql_select_db($db) or die ('Erreur :'.mysql_error());
     
    		mysql_query("SET NAMES UTF8"); //encodage en utf8 - seulement après la connection
    		//Si MySQL n'est pas configuré par défaut pour l'UTF-8 il faut lui préciser la manière dont elle doit traiter les caractères contenus dans une requête SQL à l'aide de cette instruction 
     
    		if($link <= 0)
    		{
    			$link = 'Le serveur nexiste pas';
    		}
    			else
    			{
    				$resultdb = mysql_select_db ("elmcfr"); //mysql_select_db — Sélectionne une base de données MySQL, en l'occurence la base "elmcfr"
     
    					if($resultdb <= 0)
    					$link='La base de données na pas été trouvée';
     
    					else
    					$link='ok';
    			}
    		return $link;
    	}
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	// AFFICHAGE DES EVENEMENTS DANS UN TABLEAU
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	function affichageEvenements()
    	{
    	// information pour la connection à la DB
    	$host = "localhost"; // connexion au serveur
    	$user = "root"; //utilisateur
    	$pass = ""; // mot de passe
    	$db = "elmcfr"; // nom de la base
     
    	// connection à la DB
    	$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    	mysql_select_db($db) or die ('Erreur :'.mysql_error());
     
    	// requête SQL qui compte le nombre total d'enregistrement dans la table EVENEMENTS et qui récupère tous les enregistrements
    	$select = 'SELECT id_evenement, date_evenement, heure, id_etat_evenement FROM jos_evenements';
    	$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
    	$total = mysql_num_rows($result);
     
    	// si on a récupéré un résultat on l'affiche.
    	if($total) 
    	{
    		// debut du tableau
    		echo '<table bgcolor="#FFFFFF">'."\n";
    		// première ligne on affiche les titres dans 4 colonnes
    		echo '<tr>';
    		echo '<td bgcolor="#FFCC00"><b><u>Id Evenement</u></b></td>';
    		echo '<td bgcolor="#FFCC00"><b><u>Date Evenement</u></b></td>';
    		echo '<td bgcolor="#FFCC00"><b><u>Heure</u></b></td>' ;
    		echo '<td bgcolor="#FFCC00"><b><u>Id etat</u></b></td>' ;
    		echo '</tr>'."\n";
    		// lecture et affichage des résultats sur 4 colonnes, 1 résultat par ligne.    
    		while($row = mysql_fetch_array($result)) 
    		{
    			echo '<tr>';
    			echo '<td bgcolor="#CCCCCC">'.$row["id_evenement"].'</td>';
    			echo '<td bgcolor="#CCCCCC">'.$row["date_evenement"].'</td>';
    			echo '<td bgcolor="#CCCCCC">'.$row["heure"].'</td>';
    			echo '<td bgcolor="#CCCCCC">'.$row["id_etat_evenement"].'</td>';
    			echo '</tr>'."\n";
    		}
        echo '</table>'."\n";
        // fin du tableau.
    	}
    	else echo 'Pas d\'enregistrements dans cette table...';
     
    	// on libère le résultat
    	mysql_free_result($result); //mysql_free_result — Libère le résultat de la mémoire
     
    	}
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	// AFFICHAGE DES HORAIRES DANS UN TABLEAU
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	function affichageHoraires()
    	{
    	// information pour la connection à la DB
    	$host = "localhost"; // connexion au serveur
    	$user = "root"; //utilisateur
    	$pass = ""; // mot de passe
    	$db = "elmcfr"; // nom de la base
     
    	// connection à la DB
    	$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    	mysql_select_db($db) or die ('Erreur :'.mysql_error());
     
    	// requête SQL qui compte le nombre total d'enregistrement dans la table HORAIRES et qui récupère tous les enregistrements
    	$select = 'SELECT id_horaire, jour, heure, id_etat_horaire FROM jos_horaires';
    	$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
    	$total = mysql_num_rows($result);
     
    	// si on a récupéré un résultat on l'affiche.
    	if($total) 
    	{
    		// debut du tableau
    		echo '<table bgcolor="#FFFFFF">'."\n";
    		// première ligne on affiche les titres dans 4 colonnes
    		echo '<tr>';
    		echo '<td bgcolor="#FFCC00"><b><u>Id Horaire</u></b></td>';
    		echo '<td bgcolor="#FFCC00"><b><u>Jour</u></b></td>';
    		echo '<td bgcolor="#FFCC00"><b><u>Heure</u></b></td>';
    		echo '<td bgcolor="#FFCC00"><b><u>Id Etat</u></b></td>' ;
    		echo '</tr>'."\n";
    		// lecture et affichage des résultats sur 4 colonnes, 1 résultat par ligne. 
    		while($row = mysql_fetch_array($result)) 
    		{
    			echo '<tr>';
    			echo '<td bgcolor="#CCCCCC">'.$row["id_horaire"].'</td>';
    			echo '<td bgcolor="#CCCCCC">'.$row["jour"].'</td>';
    			echo '<td bgcolor="#CCCCCC">'.$row["heure"].'</td>';
    			echo '<td bgcolor="#CCCCCC">'.$row["id_etat_horaire"].'</td>';
    			echo '</tr>'."\n";
    		}
        echo '</table>'."\n";
        // fin du tableau.
    	}
    	else echo 'Pas d\'enregistrements dans cette table...';
     
    	// on libère le résultat
    	mysql_free_result($result); //mysql_free_result — Libère le résultat de la mémoire
     
    	}
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	// FONCTION D'INSCRIPTION D'UN NOUVEL ETAT
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	function inscription_etat($description_etat, $img)
    	{
    		// information pour la connection à la DB
    		$host = "localhost"; // connexion au serveur
    		$user = "root"; //utilisateur
    		$pass = ""; // mot de passe
    		$db = "elmcfr"; // nom de la base
     
    		//création de la requète d'insertion d'un état
    		$sql="INSERT INTO jos_etat values ('', '$description_etat', '$img')";
    		// connection à la DB
    		$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    		mysql_select_db($db) or die ('Erreur :'.mysql_error());
    	}
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	//Fonction qui permet de vérifier si les champs ont été remplis
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	function verifchamps($i) 
    	{
    		if (empty($i)) //empty — Détermine si une variable est vide
    		{
    			die("Tous les champs n'ont pas été remplis, veuillez y remedier.");
    		}
    	}
     
    ?>
    on voit que je répète tout le temps les paramètres de connexion et il doit y avoir plus simple..
    je vais regarder le problème de portée avec les constantes mais sa me parait difficile...

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    C'est bien ce que je pensais : ça ne sert à rien d'ouvrir une connexion plusieurs fois d'autant plus que l'extension mysql permet de rendre une connexion "globale" :
    La plupart des fonctions MySQL acceptent link_identifier comme le dernier paramètre optionnel. S'il n'est pas fourni, la dernière connexion ouverte est utilisée.
    Donc vous pourriez sortir mysql_connect, mysql_select_db et la définition des paramètres de toutes vos fonctions et le réaliser en début de script (via une inclusion éventuellement). Surtout que vous utilisez déjà parfois cette spécificité.

    Donc en début de script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    define('HOST', 'localhost');
    define('USER', 'root');
    define('PASS', '');
    define('DB', 'elmcfr');
     
     
    mysql_connect(HOST, USER, PASS) or die ('Erreur : ' . mysql_error());
    mysql_select_db(DB) or die ('Erreur : ' . mysql_error());
     
    mysql_query('SET NAMES UTF8');
    Puis réécrire vos fonctions en les simplifiant, par exemple :
    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
    36
    37
    38
    39
    function affichageEvenements()
    	{
     
    	// requête SQL qui compte le nombre total d'enregistrement dans la table EVENEMENTS et qui récupère tous les enregistrements
    	$select = 'SELECT id_evenement, date_evenement, heure, id_etat_evenement FROM jos_evenements';
    	$result = mysql_query($select) or die ('Erreur : ' . mysql_error());
    	$total = mysql_num_rows($result);
     
    	// si on a récupéré un résultat on l'affiche.
    	if($total) 
    	{
    		// debut du tableau
    		echo '<table bgcolor="#FFFFFF">'."\n";
    		// première ligne on affiche les titres dans 4 colonnes
    		echo '<tr>';
    		echo '<td bgcolor="#FFCC00"><b><u>Id Evenement</u></b></td>';
    		echo '<td bgcolor="#FFCC00"><b><u>Date Evenement</u></b></td>';
    		echo '<td bgcolor="#FFCC00"><b><u>Heure</u></b></td>' ;
    		echo '<td bgcolor="#FFCC00"><b><u>Id etat</u></b></td>' ;
    		echo '</tr>'."\n";
    		// lecture et affichage des résultats sur 4 colonnes, 1 résultat par ligne.    
    		while($row = mysql_fetch_array($result)) 
    		{
    			echo '<tr>';
    			echo '<td bgcolor="#CCCCCC">'.$row["id_evenement"].'</td>';
    			echo '<td bgcolor="#CCCCCC">'.$row["date_evenement"].'</td>';
    			echo '<td bgcolor="#CCCCCC">'.$row["heure"].'</td>';
    			echo '<td bgcolor="#CCCCCC">'.$row["id_etat_evenement"].'</td>';
    			echo '</tr>'."\n";
    		}
        echo '</table>'."\n";
        // fin du tableau.
    	}
    	else echo 'Pas d\'enregistrements dans cette table...';
     
    	// on libère le résultat
    	mysql_free_result($result); //mysql_free_result — Libère le résultat de la mémoire
     
    	}

  7. #7
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    merci de ta réponse,

    le code suivant tu le met dans une autre page et je fait un include ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    define('HOST', 'localhost');
    define('USER', 'root');
    define('PASS', '');
    define('DB', 'elmcfr');
     
     
    mysql_connect(HOST, USER, PASS) or die ('Erreur : ' . mysql_error());
    mysql_select_db(DB) or die ('Erreur : ' . mysql_error());
     
    mysql_query('SET NAMES UTF8');
    je ne comprends pas...

  8. #8
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    merci julp je viens de réussir, j'ai lu un tutoriel sur les constantes et sur "define" et cela fonctionne! merci de ton aide!

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

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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