Aller au contenu

Deux valeurs pour une constante


Sujets conseillés

Posté

Bonjour

Javais trouvé il y a longtemps du code pour une connexion MySql :


define('SERVEUR',$siteServeur);
define('NOM', $siteNom);
define('PASSE',$sitePasse);
define('BASE',$siteBase);

qui me convient très bien et que jutilise largement ; suivant la situation, je donne à ces constantes une valeur ou une autre.

Mais jai rapidement un message derreur Constant SERVEUR already defined in, ....

Et je comprends tout juste que, en Php, une constante ne peut pas être supprimée.

Comment faire ? remplacer ces constantes par des variables ?

Merci par avance de votre aide.

Francois

Posté

bonjour Captain

Mes tables sont hébergées dans 2 bases, autant sur le site de test que sur le site de prod, ce qui fait 4 jeux de valeur pour ces constantes suivant les besoins.

Je définis ces constantes dans ce code:


if ( $baseMySql == "1" )
{
define('SERVEUR',$siteServeur);
define('NOM', $siteNom);
define('PASSE',$sitePasse);
define('BASE',$siteBase);
}
else if ( $baseMySql == "2" ) {
define('SERVEUR',$siteServeur2);
define('NOM',$siteNom2);
define('PASSE',$sitePasse2);
define('BASE',$siteBase2);
}

Je pourrai convenir que l'utilisation de constantes, dans mon cas, n'est pas judicieux.

Peut-être faudrait-il que je modifie mon code pour remplacer ces constantes par des variables?

Ou bien que je laisse Php émettre des messages Notice qui ne font pas de mal?

Francois

Posté (modifié)

bonjour Captain

Voila l'appel, par exemple:


$connexion = mysql_pconnect(SERVEUR, NOM, PASSE);
...
$requete = "REPLACE INTO ".$table." (repertoire,prenom, ...) .... ";
$result = mysql_query ($requete, $connexion);
...

Ca fonctionne sans souci à ceci près que ça produit des erreurs de type Notice.

Je me demandais si je ne faisais pas qqechose de maladroit mais je peux parfaitement vivre avec ça.

Merci de ton aide.

Francois

Modifié par francoisch
Posté

S'il y a une erreur, c'est que tu tentes de redéfinir une variable qui a déjà été définie.

Donc de deux choses l'une : soit une partie de ton script est améliorable, soit tu appelles plusieurs fois ce fichier de configuration.

Dans la seconde optique, une solution serait d'appeler les fichiers avec require_once (ou include_once) au lieu de require/include.

Posté

bonsoir Captain

Oui, j'appelle plusieurs fois ce fichier de configuration et pas toujours pour adresser la même base.

Je n'avais pas pensé à include_once mais ça n'est pas possible pour moi puisque je n'adresse pas toujours la même base.

Je pense que je vais rester avec mes erreurs Notice qui paraissent bien benignes.

Merci de ton aide Captain.

Francois

Posté

Là, tu m'inquiètes car, pour moi, tout fonctionne correctement.

Pour cette raison, je croyais que le Define était revalorisé à chaque fois qu'il était exécuté.

Je vais effectivement revoir mon code.

Merci de soulever ce sujet.

Francois

Posté

Non il ne peut pas, sinon ce n'est pas une constante mais une variable. D'ailleurs pourquoi veut tu utiliser des constantes ?

Posté (modifié)

Je ne tiens pas particulièrement à utiliser des constantes.

Simplement, comme je le disais au début, j'avais trouvé ce code il y a qqes années, il me convenait bien donc j'ai continué à l'utiliser dans la forme où je l'avais trouvé, avec des constantes.

Je crois que je vais le modifier pour utiliser plutôt des variables.

Francois

---------------------------------------------------

Je suis en train de remplacer ces constantes par des variables de session.

Francois

Modifié par francoisch
Posté

Même question, pourquoi des variables de sessions, franchement cela ne se justifie pas la

Posté

Utiliser des variables enlèvera sans doute ton message d'erreur mais ce n'est pas logique d'appeler plusieurs fois un fichier de configurations.

Cela fait des traitements supplémentaires inutiles et cela peut causer des erreurs.

De plus tes variables ($siteServeur, $siteNom, ...) sont déjà définies. Pourquoi les associer à des constantes ensuite ?

Et l'utilisation de variables de session ne se justifie pas (comme dit précédemment) sauf rajouter un peu complexité à ton code.

Perso j'aurai fait un tableau pour définir les 2 séries de valeurs de connexion (dans un fichier de config appelé qu'une seule fois ;-) ):


$siteServeur[1]="xxxx";
$siteNom[1]="yyyyy";
.....

$siteServeur[2]="xxxx2";
$siteNom[2]="yyyyy2";
.....

Ensuite tu appeler tes variables de la façon suivante :

$siteServeur[$baseMySql]

$siteNom[$baseMysql]

1 - Ca prendra moins de place mémoire que ta méthode vu que tu définis tes variables 3 fois ($siteServeur1,$siteServeur2, define[sERVEUR])

2 - Ca élimine un traitement (if)

3 - Moins de lignes de code

4 - Code plus clair et plus facile à maintenir.

Il faut toujours essayer de faire au plus simple ;-)

Posté

2ème méthode (qui utilise moins de mémoire que la 1ere)

Tu peux faire un fichier config pour chaque base exemple :

config-serveur-1.php

<?php
$siteServeur="xxxx";
$siteNom="yyyyy";
...
?>

config-serveur-2.php

<?php
$siteServeur="xxxx2";
$siteNom="yyyyy2";
...
?>

Ensuite tu appelles "le bon" fichier de config suivant le numéro de base my sql (1 ou 2) de la façon suivante :

<?php

include ("./config-serveur-".$baseMySql);

?>

"./" à remplacer par le bon chemin si les fichiers de configs ne sont pas dans le même répertoire.

Posté

J'ai effectivement un fichier de configuration où sont définis les 4 paramètres habituels pour chacune des deux bases.

En dépit de vos conseils avisés, je crois que je vais rester au code que j'ai modifié ces derniers jours, même s'il n'est pas le plus élégant.

Ca fonctionne et je m'y retrouve sans difficulté.

Merci encore de votre aide.

Francois

Veuillez vous connecter pour commenter

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



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