Webmaster Hub: Deux valeurs pour une constante - Webmaster Hub

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Deux valeurs pour une constante Noter : -----

#1 L'utilisateur est hors-ligne   francoisch 

  • Groupe : Hubmaster
  • Messages : 628
  • Inscrit(e) : 05-mars 06

Posté 21 juin 2011 - 20:11

Bonjour

J’avais 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 j’utilise largement ; suivant la situation, je donne à ces constantes une valeur ou une autre.

Mais j’ai rapidement un message d’erreur 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
0

#2 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 22 juin 2011 - 08:38

Je ne vois pas l'intérêt de déclarer plusieurs fois ces constantes.
Tu peux poster la partie du code où tu les redéfinis ?
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#3 L'utilisateur est hors-ligne   francoisch 

  • Groupe : Hubmaster
  • Messages : 628
  • Inscrit(e) : 05-mars 06

Posté 22 juin 2011 - 20:12

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
0

#4 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 22 juin 2011 - 22:56

Tant que tu suis cette logique, tu ne devrais pas avoir d'erreur.
Peux-tu poster le reste du code (Celui qui exécute la connexion au site de test ou de prod) ?
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#5 L'utilisateur est hors-ligne   francoisch 

  • Groupe : Hubmaster
  • Messages : 628
  • Inscrit(e) : 05-mars 06

Posté 23 juin 2011 - 10:58

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

Ce message a été modifié par francoisch - 23 juin 2011 - 11:01.

0

#6 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 23 juin 2011 - 11:13

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.
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#7 L'utilisateur est hors-ligne   francoisch 

  • Groupe : Hubmaster
  • Messages : 628
  • Inscrit(e) : 05-mars 06

Posté 24 juin 2011 - 21:23

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
0

#8 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 24 juin 2011 - 22:07

Un define ne peut pas être redéfini : c'est donc que ta seconde attribution ne fonctionne forcément pas. Il vaudrait mieux revoir ton script de connexion.
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#9 L'utilisateur est hors-ligne   francoisch 

  • Groupe : Hubmaster
  • Messages : 628
  • Inscrit(e) : 05-mars 06

Posté 25 juin 2011 - 14:24

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
0

#10 L'utilisateur est hors-ligne   Dadou 

  • Light or Dark Side ?
  • Groupe : Fondateur
  • Messages : 3 244
  • Inscrit(e) : 29-avril 04
  • Genre:Homme
  • Localisation:13 rue Offenbach, Barentin

Posté 25 juin 2011 - 15:42

Non il ne peut pas, sinon ce n'est pas une constante mais une variable. D'ailleurs pourquoi veut tu utiliser des constantes ?
« Demander ne coûte qu’un instant d’embarras ; ne pas demander, c’est être embarrassé toute sa vie. » (Proverbe japonais)
- Mon petit site a moi
0

#11 L'utilisateur est hors-ligne   francoisch 

  • Groupe : Hubmaster
  • Messages : 628
  • Inscrit(e) : 05-mars 06

Posté 02 juillet 2011 - 13:11

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

Ce message a été modifié par francoisch - 02 juillet 2011 - 19:57.

0

#12 L'utilisateur est hors-ligne   Dadou 

  • Light or Dark Side ?
  • Groupe : Fondateur
  • Messages : 3 244
  • Inscrit(e) : 29-avril 04
  • Genre:Homme
  • Localisation:13 rue Offenbach, Barentin

Posté 03 juillet 2011 - 00:52

Même question, pourquoi des variables de sessions, franchement cela ne se justifie pas la
« Demander ne coûte qu’un instant d’embarras ; ne pas demander, c’est être embarrassé toute sa vie. » (Proverbe japonais)
- Mon petit site a moi
0

#13 L'utilisateur est hors-ligne   Nicolas 

  • ChatMaster
  • Voir le blog
  • Groupe : Fondateur
  • Messages : 4 262
  • Inscrit(e) : 19-août 03
  • Genre:Homme
  • Localisation:Peyrolles

Posté 03 juillet 2011 - 08:12

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 ;-)
0

#14 L'utilisateur est hors-ligne   Nicolas 

  • ChatMaster
  • Voir le blog
  • Groupe : Fondateur
  • Messages : 4 262
  • Inscrit(e) : 19-août 03
  • Genre:Homme
  • Localisation:Peyrolles

Posté 03 juillet 2011 - 09:22

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.
0

#15 L'utilisateur est hors-ligne   francoisch 

  • Groupe : Hubmaster
  • Messages : 628
  • Inscrit(e) : 05-mars 06

Posté 04 juillet 2011 - 20:16

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
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)