PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 15-11-2018 10:50:41

Godjojo
Membre
Inscription : 15-11-2018
Messages : 2

[RESOLU] Warning constant()

Bonjour à tous,

après avoir fouillé un peu partout sur le forum et sur le net, je n'arrive toujours pas à comprendre où est mon problème... Je m'explique:

J'ai un fichier Language.php qui recherche dans ma Bdd les traductions de mes noms de page et de mes titres de page. Ce fichier crée dynamiquement des constantes globales en fonction de la langue utilisée.

//on recherche si on a déjà quelque chose pour cette langue
$query_AllDetailsConstant = "SELECT * FROM `".$DiminutifBD."pages_details` WHERE Language= '". ucfirst($Language) ."' ";
$AllDetailsConstant = mysqli_query($connexion,$query_AllDetailsConstant) or die(mysqli_error($connexion));
$row_AllDetailsConstant = mysqli_fetch_assoc($AllDetailsConstant);
$totalRows_AllDetailsConstant = mysqli_num_rows($AllDetailsConstant);

do{
 
        define("MENU_".$row_AllDetailsConstant['IdPage']."_".strtoupper($row_AllDetailsConstant['Language']) ,$row_AllDetailsConstant['DenominationPage']);
 
  define("MENU_".$row_AllDetailsConstant['IdPage']."_TITLE_".strtoupper($row_AllDetailsConstant['Language']) ,$row_AllDetailsConstant['Title']);

 
}while($row_AllDetailsConstant = mysqli_fetch_assoc($AllDetailsConstant));
 

Ce fichier Language.php est inclus dans mon fichier Page.php. Ce fichier, Page.php, affiche les informations reprises dans ces constantes globales en fonction de l'ID de page reçu.

              $VarConst = MENU_.$IdPage._; echo "<H1>".constant($VarConst.$LangConstante)."</H1>";
        $VarConst = MENU_.$IdPage._TITLE_; echo "<H2>".constant($VarConst.$LangConstante)."</H2>";

 

Depuis le passage du serveur en Php 7.2, le message d'erreur suivant s'affiche:

Warning: Use of undefined constant MENU_ - assumed 'MENU_' (this will throw an Error in a future version of PHP)

Ma variable s'affiche néanmoins bien suite à ce message d'erreur. D'où mon incompréhension !?

J'ai trouvé pas mal de chose sur le net, mais cela n'a pas vraiment éclairé ma lanterne.

Si quelqu'un pouvait m'aider, ce serait bien sympa car je commence à m'arracher les cheveux tongue

Dernière modification par Godjojo (30-11-2018 08:45:31)

Hors ligne

#2 25-11-2018 11:19:26

levelKro
Membre
Inscription : 18-01-2015
Messages : 7

Re : [RESOLU] Warning constant()

Dans mon cas, j'évite d'utiliser des constante.

Je me suis créé une fonction dans ma Class pour sortir le texte;

$this->text("NAME_STRING",array("variable"=>"value"))

- La fonction va ajouter avant le NAME_STRING la langue (FR_ ou EN_)
- La fonction va prendre le NAME_STRING édité et va chercher dans la DB, si n'existe pas il crée un string facilement retrouvable; MISSING:NAME_STRING
- La array() (optionnel) est pour remplacer des termes, par exemple ton NAME_STRING="Je m'appelle %username%" et dans la fonction je prend chaque valeur du array (si existe) et remplace le "variable" par son "value", par exemple;

str_replace("%".$variable."%",$value,$string)

pour visualiser l'action
- Le résultat de la fonction est un "return", alors tu peux inclure facilement dans ton code.

Exemple de code, je saute des codes et des syntaxes pour passer à l'essentiel.


function text($text,$values=null){
  $search_text="FR_".$text; // Tu formate ton nom de string au besoin, ajoute ta langue, tu peux corriger le uppercase
  $result=// (recherche de $search_text dans le DB et sortir le résultat, sinon ==false);
  if($result!==false){ // Il a un résultat tu travail le résultat
    if(is_array($values)){ // Tu as des valeurs à remplacer
      foreach($values as $name=>$value){ // Tu travaille l'ensemble du array
        $result=str_replace("%".$name."%",$value,$result);
      }
    }
    return $result; // Ouput
  }
  else { // N'existe pas, ont va le créer pour le savoir et l'éditer
    $result="MISSING:".$text; // Après une recherche dans le DB avec "MISSING:" permet de trouver facilement les manquants.
    // (mysql insert pour créer le string dans la DB, le "name" est le $text et la "value" actuel sera $result)
    return $result; // Ouput
  }
}

 

ET au passage, je te sugère d'utiliser une Class pour ton SQL, comme Medoo, comme ça tes syntaxes sont plus simples et sécuritaire.

Hors ligne

#3 30-11-2018 08:43:06

Godjojo
Membre
Inscription : 15-11-2018
Messages : 2

Re : [RESOLU] Warning constant()

Un grand merci pour ta fonction, je vais grandement améliorer mon code grâce à toi...

Pour le problème que je présentais ici, le soucis venait du fait que j'appelais ma constante :

$VarConst = MENU_.$IdPage._

Le moteur recherchait une constante :

MENU_

Celle-ci n'existait pas...

j'ai donc fait ceci :

$VarConst = "MENU_".$IdPage._

Voilà tout... Bref, encore quelques siècles et je devrais être au top tongue

Donc, j'ai trouvé mon où était mon problème (Pas tout seul, on m'a aidé), et la fonction que tu m'as fourni va me permettre d'optimiser mon code, encore merci! D'une pierre deux coups tongue

Hors ligne

Pied de page des forums