francoisch Posté 21 Juin 2011 Posté 21 Juin 2011 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
captain_torche Posté 22 Juin 2011 Posté 22 Juin 2011 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 ?
francoisch Posté 22 Juin 2011 Auteur Posté 22 Juin 2011 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
captain_torche Posté 22 Juin 2011 Posté 22 Juin 2011 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) ?
francoisch Posté 23 Juin 2011 Auteur Posté 23 Juin 2011 (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é 23 Juin 2011 par francoisch
captain_torche Posté 23 Juin 2011 Posté 23 Juin 2011 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.
francoisch Posté 24 Juin 2011 Auteur Posté 24 Juin 2011 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
captain_torche Posté 24 Juin 2011 Posté 24 Juin 2011 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.
francoisch Posté 25 Juin 2011 Auteur Posté 25 Juin 2011 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
Dadou Posté 25 Juin 2011 Posté 25 Juin 2011 Non il ne peut pas, sinon ce n'est pas une constante mais une variable. D'ailleurs pourquoi veut tu utiliser des constantes ?
francoisch Posté 2 Juillet 2011 Auteur Posté 2 Juillet 2011 (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é 2 Juillet 2011 par francoisch
Dadou Posté 2 Juillet 2011 Posté 2 Juillet 2011 Même question, pourquoi des variables de sessions, franchement cela ne se justifie pas la
Nicolas Posté 3 Juillet 2011 Posté 3 Juillet 2011 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 ;-)
Nicolas Posté 3 Juillet 2011 Posté 3 Juillet 2011 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.
francoisch Posté 4 Juillet 2011 Auteur Posté 4 Juillet 2011 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
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant