Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1979 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP][Résolu] Undefined property depuis migration PHP5x vers PHP8x

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP][Résolu] Undefined property depuis migration PHP5x vers PHP8x

n°2485490
mrmaxpower
Posté le 24-11-2024 à 18:02:24  profilanswer
 

Hello  :hello:  
 
J'ai un soucis sur la migration d'une classe mysql vers mysqli.
Historiquement (on parle d'un site internet php4/5 qui doit avoir bientôt 20ans :sarcastic:), j'ai une classe dédiée pour mysql, et je crée mon objet / j'ouvre ma connexion via :

$SQL = new mysql($_DB_USER, $_DB_PASS, $_DB_HOST, $_DB_BASE, $_DB_DEBUG);


avec la variable DB_DEBUG qui me permettait d'afficher ou non la requête complète.
 
En version PHP5, j'avais ceci :

class mysql {
  var $muser;
  var $mpass ;
  var $mhost ;
  var $mdb  ;
  var $mdbug;  
  var $mport;
  var $mconnect_id ;
  var $mresultat ;
  var $mnum_res ;
  var $last_id_insert ;
  var $sqlerreurno ;
 
 
  function mysql($_DB_USER, $_DB_PASS, $_DB_HOST, $_DB_BASE, $_DB_DBG)
  {
    $this->muser = $_DB_USER;
    $this->mpass = $_DB_PASS;
    $this->mhost = $_DB_HOST;
    $this->mdb   = $_DB_BASE;
    $this->mdbug = $_DB_DBG;
    $this->mport = 3306;
    $this->sqlerreurno  = 0 ;
    $this->connect();
  }
 
  function connect()
  {
    $this->mconnect_id = @mysql_pconnect($this->mhost.":".$this->mport,$this->muser,$this->mpass) or die("Problème de connexion à la base de données...<br />Il se peut que le problème soit dû à une surcharge des serveurs Free : retentez votre connexion d'ici une vingtaine de minutes." );
    @mysql_select_db($this->mdb,$this->mconnect_id) or die( "Problème de connexion à la base de données... (selection de la base impossible)" );
  }
   
  function query($query)
  {
    if ($this->mdbug == '1') {
      $this->mresultat = @mysql_query($query, $this->mconnect_id) or die("&nbsp;Erreur de base de données - Exécution de requête impossible :<br />".$query."" ) ;
    } else {
      $this->mresultat = @mysql_query($query, $this->mconnect_id) or die("&nbsp;Erreur de base de données - Exécution de requête impossible." ) ;
    }
  }
...


 
J'ai adapté en PHP8 (changement vers mysqli* et modification constructeur) :

class mysql {
  var $muser;
  var $mpass;
  var $mhost;
  var $mdb;
  var $mdbug;
  var $mport;
  var $mconnect_id;
  var $mresultat;
  var $mnum_res;
  var $last_id_insert;
  var $sqlerreurno;
 
  function __construct($_DB_USER, $_DB_PASS, $_DB_HOST, $_DB_BASE, $_DB_DBG)
  {
    $this->muser = $_DB_USER;
    $this->mpass = $_DB_PASS;
    $this->mhost = $_DB_HOST;
    $this->mdb   = $_DB_BASE;
    $this->mdbug = $_DB_DBG;
    $this->mport = 3306;
    $this->sqlerreurno  = 0 ;
    $this->connect();
  }
 
  function connect()
  {
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $this->mconnect_id = mysqli_connect($this->mhost, $this->muser, $this->mpass, $this->mdb) or die("Problème de connexion à la base de données...<br />" );
    mysqli_set_charset($this->mconnect_id, 'utf8mb4');
    $database = mysqli_select_db($this->mconnect_id, $this->mdb);
  }
 
  function query($query)
  {
    if ($this->mdbug == '1') {
      $this->mresultat = mysqli_query($this->mconnect_id, $query) or die("&nbsp;Erreur de base de données - Exécution de requête impossible :<br />".$query."" ) ;
    } else {
      $this->mresultat = mysqli_query($this->mconnect_id, $query) or die("&nbsp;Erreur de base de données - Exécution de requête impossible." ) ;
    }
...


 
Mais mes pages m'insultent :) Warning: Undefined property: mysql::$mdbug  in inc/db.inc.php on line 46
 
J'ai déjà pas mal googlé/die&retry des choses (passage des variables en public), mais sans succès.
Que faire pour qu'au sein de mon objet je puisse accéder à mdbug ? J'arrive bien à accéder à mhost/muser/mpass/mdb pour la fonction connect, pourquoi pas pour la suite ?  
 
Merci aux courageux d'avoir lu jusqu'au bout  :)


Message édité par mrmaxpower le 27-11-2024 à 00:15:24
mood
Publicité
Posté le 24-11-2024 à 18:02:24  profilanswer
 

n°2485530
mechkurt
Posté le 25-11-2024 à 13:26:41  profilanswer
 

[:michaeldell]
Un peu dur de t'aider, la ligne 46 correspond à quoi ?
C'est juste un warning sur un undefined, ça se trouve tu avais déjà ce problème avant mais il passait sous le tapis... :o  
Tu as essayé de mettre une valeur par défaut dans le construct ?
Y'a ptet un endroit ou tu instancie ta connexion sans mettre la valeur debug.
 
Pour la connexion à la base de donnée, un singleton est peut être plus approprié:
https://www.google.com/search?q=php+pdo+class+singleton  [:alkatraz]  


---------------
D3
n°2485531
rufo
Pas me confondre avec Lycos!
Posté le 25-11-2024 à 14:04:27  profilanswer
 

C'est bizarre d'avoir dans le code mysql::$mdbug alors que dans ce que tu montres, on a $this->mdbug. Tu es sûr que ta classe a été déclarée de manière statique ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2485572
mrmaxpower
Posté le 26-11-2024 à 00:24:09  profilanswer
 

mechkurt a écrit :

[:michaeldell]
Un peu dur de t'aider, la ligne 46 correspond à quoi ?
C'est juste un warning sur un undefined, ça se trouve tu avais déjà ce problème avant mais il passait sous le tapis... :o  
Tu as essayé de mettre une valeur par défaut dans le construct ?
Y'a ptet un endroit ou tu instancie ta connexion sans mettre la valeur debug.
 
Pour la connexion à la base de donnée, un singleton est peut être plus approprié:
https://www.google.com/search?q=php+pdo+class+singleton  [:alkatraz]  


 
Oui la ligne 46 c'est le

if ($this->mdbug == '1') {


J'ai tenté une valeur par défaut, mais ça change rien
Et mon appel initial contient toujours $_DB_DEBUG qui est déjà initialisé à 0 ou 1.
$SQL = new mysql($_DB_USER, $_DB_PASS, $_DB_HOST, $_DB_BASE, $_DB_DEBUG);
 
Mon workaround actuel c'est d'enlever ce if/then avec $this->mdbug :D
Mais j'aurais voulu trouver la rootcause, ça fait longtemps que j'ai pas assez touché la prog objet, alors ya certainement qq chose que j'ai loupé.
 
Et c'est vrai qu'il y a PDO mais le move mysql vers mysqli était plus simple :)

n°2485573
mrmaxpower
Posté le 26-11-2024 à 00:39:22  profilanswer
 

rufo a écrit :

C'est bizarre d'avoir dans le code mysql::$mdbug alors que dans ce que tu montres, on a $this->mdbug. Tu es sûr que ta classe a été déclarée de manière statique ?


 
Tu parles de déclarer les variables de la classe en "public static" ?
Comme dit, il va me falloir un refresh sur la prog objet :D
Sur le principe, je ne comprends pas que mon objet $SQL, qui est une instance de la classe "mysql", construit à partir de 5 variables passées en argument, ne me permettent pas de réutiliser ces variables au sein de l'objet.

n°2485574
mrmaxpower
Posté le 26-11-2024 à 00:42:40  profilanswer
 

A l'occasion, RTFM :
https://www.php.net/manual/fr/language.oop5.php
(faut que je prenne le temps :) )

n°2485577
mechkurt
Posté le 26-11-2024 à 07:41:14  profilanswer
 

Déjà je penses que tes déclarations de propriétés de classe avec "var" ne sont pas correct, ça devrait être public ou private :
https://www.php.net/manual/fr/langu [...] erties.php
 
Edit: et essayes de debuger en faisant des affichage de variable avec var_dump lors du construct, avant ton if else, etc...


Message édité par mechkurt le 26-11-2024 à 07:51:09

---------------
D3
n°2485639
mrmaxpower
Posté le 27-11-2024 à 00:08:15  profilanswer
 

Bon j'ai la solution, le var_dump m'a mis sur la voie !
Le bout de code qui a le problème :

Code :
  1. if ($this->mdbug == '1') {


Sauf qu'en copié collé ici, le problème disparait ^^
En fait, j'avais en fait un caractère invisible entre mdbug et ==, qui fait que c'était pas la variable mdbug que j'appelais  :pt1cable:  
https://i.ibb.co/T4QznLY/Capture-d-cran-2024-11-27-000928.jpg
 
Et pour ce qui est du public ou private des variables.
https://www.php.net/manual/fr/langu [...] erties.php
"Note: Une propriété déclarée sans modificateur de Visibilité sera déclarée comme public."  
J'ai testé en public ou en private, ça ne change pas l'exécution de mon code, du coup j'ai laissé private.
 
Merci pour l'aide à la résolution  
 
 :hello:

Message cité 1 fois
Message édité par mrmaxpower le 27-11-2024 à 00:14:39
n°2486443
Hermes le ​Messager
Breton Quiétiste
Posté le 10-12-2024 à 20:54:21  profilanswer
 

mrmaxpower a écrit :

Bon j'ai la solution, le var_dump m'a mis sur la voie !
Le bout de code qui a le problème :

Code :
  1. if ($this->mdbug == '1') {


Sauf qu'en copié collé ici, le problème disparait ^^
En fait, j'avais en fait un caractère invisible entre mdbug et ==, qui fait que c'était pas la variable mdbug que j'appelais  :pt1cable:  
https://i.ibb.co/T4QznLY/Capture-d- [...] 000928.jpg
 
Et pour ce qui est du public ou private des variables.
https://www.php.net/manual/fr/langu [...] erties.php
"Note: Une propriété déclarée sans modificateur de Visibilité sera déclarée comme public."  
J'ai testé en public ou en private, ça ne change pas l'exécution de mon code, du coup j'ai laissé private.
 
Merci pour l'aide à la résolution  
 
 :hello:


 
C'est quoi l'éditeur que tu utilises pour que cela n'ait pas été détecté avant ??  :??:  
 


---------------
Expert en expertises

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP][Résolu] Undefined property depuis migration PHP5x vers PHP8x

 

Sujets relatifs
[PHP] erreurs PHP serveur OCS[Divers] Importer cellules Excel vers Word/PP ou PDF, possible ?
PHP/AJAX JQuery => Comment récupérer les données en PHP ?[PHP] DATE : Problème de formatage
[PHP] Comptage de réponse après clic bouton dans emailVBA word : recopie champs formulaire vers signet
PHP/MySQL : afficher le nombre d'id dans une tableEst-ce possible de transferer le contenu d'un Winform vers un UserCont
[PHP/SQL] somme en php de deux colonnes SQLje connais SQL, mais c'est quoi un site PHP/MYSQL et à quoi sert php?
Plus de sujets relatifs à : [PHP][Résolu] Undefined property depuis migration PHP5x vers PHP8x


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)