[RESOLU] Problème sur un extrait de code au passage de la version de PHP 5.5 vers la version PHP 7 ?!

Eléphant du PHP | 218 Messages

11 avr. 2022, 14:40

Bonjour, en voulant passer de la version de PHP 5.5 vers la version PHP 7 (oui j'ai un peu de retard) :roll:
Je me retrouve confronté à l'erreur suivante :
Fatal error: Uncaught Error: Using $this when not in object context in C:\PROGS\wamp\www\site\configurator\viewer\bd.php on line 20
( ! ) Error: Using $this when not in object context in C:\PROGS\wamp\www\site\configurator\viewer\bd.php on line 20

La ligne 20 du code ci-dessous étant :
mysqli_query($this->db_connect, 'SET NAMES \'utf8\'') or die('error');
Le problème est que, comme je n'est pas fait ce code et que je fais mes requêtes en PDO alors ce langage me semble inconnu et est même peut être obsolète :?
Par conséquent je me permet de solliciter votre aide afin de me conseiller sur la modification de ce code car il semble y avoir une expression qui ne fonctionne plus après les maj de PHP 5.5 ?
Merci beaucoup pour votre aide !
$type_connect=0;
$port=null;
$serv=DB_HOST;
$p=explode(':',$serv);
if (isset($p[1]))
{
	$port=$p[1];
}


// Se connect visiblement dans la BDD
if (function_exists('mysqli_connect'))
{
	$type_connect=1;
	$bdd_az=mysqli_connect($p[0], DB_USER, DB_PASSWD, DB_NAME,$port);
	mysqli_query($this->db_connect, 'SET NAMES \'utf8\'') or die('error');
}
else
{
	echo 'ERREUR PROBLEME MYSQL';
}	
	
	

//écrit visiblement dans la BDD
$requete_az=array();
$tables_az=array('az_byproduct','az_bysession','az_byfields');

$requete_az['az_byproduct']='CREATE TABLE IF NOT EXISTS `az_byproduct` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `svg` mediumtext NULL,
  `propriete` mediumtext NULL,
  `actif` tinyint default \'1\',
   PRIMARY KEY (`id`)
) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci';


$requete_az['az_byfields']='CREATE TABLE IF NOT EXISTS `az_byfields` (
  `id_product` int(11) unsigned NOT NULL,
  `label` varchar(60) NOT NULL,
  `type` tinyint(1) NOT NULL,
  `field` varchar(60) NOT NULL,
  `value` text NOT NULL,
  PRIMARY KEY (`id_product`,`type`,`field`,`label`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8';

$requete_az['az_bysession']='CREATE TABLE IF NOT EXISTS `az_bysession` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`keydata` varchar (15) NULL ,
`agent` varchar (32) NULL ,
`data` text NULL,
`date` date NOT NULL,
 KEY `agent` (`agent`),
PRIMARY KEY (`id`)
) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci';
Cadeaux personnalisés pour toute la famille :
https://cadeauxplaisir.com/

ynx
Mammouth du PHP | 586 Messages

12 avr. 2022, 12:31

Bonjour,

Le message d'erreur est explicite : la pseudo-variable $this ne peut être utilisée que dans un contexte objet, ton code devrait donc se trouver au sein d'une classe PHP.
Le code de ton message est seulement un extrait ?

Il est possible que tu avais déjà le problème en PHP 5, mais avec cette version PHP déclenche seulement une Notice "undefined variable", ce qui ne bloque pas l'exécution du script et tu n'avais donc p-e pas fait attention à cette erreur avec PHP5.
Avec PHP 8, ce code déclenche une Fatal error qui bloque donc l'exécution du script, moins facile de louper cette erreur dans ce cas.

Mammouth du PHP | 1967 Messages

13 avr. 2022, 08:24

Hello,

essaie en remplacant cette ligne
mysqli_query($this->db_connect, 'SET NAMES \'utf8\'') or die('error');
par
mysqli_query($bdd_az, 'SET NAMES \'utf8\'') or die('error');
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 218 Messages

21 avr. 2022, 15:19

La correction de Spols a l'air de fonctionner :) Merci à vous deux.
Cadeaux personnalisés pour toute la famille :
https://cadeauxplaisir.com/