Problème PHP

Résolu/Fermé
Zizanie - 5 nov. 2022 à 17:50
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 - 15 nov. 2022 à 19:03

Bonjour,

Jusqu'à présent, et depuis 7 ans, ce code fonctionnait et me retournait le nombre de visiteurs.

Hors depuis que je suis passée au PHP 8.0, cela fonctionne toujours mais avec ces lignes :

Warning: Undefined array key "#HTTP_REFERER#" in/homepages/8/d560574319/htdocs/clickandbuilds/test/wp-content/plugins/insert-php-code-snippet/stats_passages.phpon line174

Warning: Undefined array key "#HTTP_HOST#" in/homepages/8/d560574319/htdocs/clickandbuilds/test/wp-content/plugins/insert-php-code-snippet/stats_passages.phpon line175

Voici les lignes en question et je pense que la variable est vide :

$site_referant = $_SERVER['#HTTP_REFERER#'];
         $monsite = '#' . $_SERVER['#HTTP_HOST#'];
        if (preg_match($monsite,$site_referant))
            {
            $site_referant = "";}

Merci de m'aider à trouver une solution

A voir également:

5 réponses

avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
5 nov. 2022 à 18:03

Bonjour,

J'ai appris le PHP il y a plus de 15 ans et je n'ai jamais vu cette notation pour les variables $_SERVER, avec des dièses autour des clés HTTP_REFERER ou HTTP_HOST.

Peut-être que cela fonctionnait sur un serveur spécifique dans un fonctionnement non-standard mais alors c'est un choix fait par l'administrateur du serveur, ce n'est pas la façon "standard" de nommer ces variables.

Tu peux accéder aux valeurs avec $_SERVER['HTTP_REFERER'] au lieu de $_SERVER['#HTTP_REFERER#'] et idem pour HTTP_HOST.

Voir ici pour plus d'infos : https://www.php.net/manual/fr/reserved.variables.server.php

0

Bonjour,

Merci beaucoup : Il semble que grâce à vos explications à tous deux, le problème soit résolu.

Si, j'ai de nouveau des ennuis, je ne manquerai pas de vous le signaler.

Cordialement

0

Bonjour,

Nouveau problème depuis que j'ai ôté les dièses :

Warning: Undefined array key "HTTP_REFERER" in /homepages/8/d560574319/htdocs/clickandbuilds/test/wp-content/plugins/insert-php-code-snippet/stats_passages.php on line 174

Warning: preg_match(): Delimiter must not be alphanumeric or backslash in /homepages/8/d560574319/htdocs/clickandbuilds/test/wp-content/plugins/insert-php-

code-snippet/stats_passages.php on line 176

La ligne 175 s'en est trouvée améliorée

Merci

0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
7 nov. 2022 à 16:12

Bonjour,

L'entête HTTP Referer n'est pas toujours définie, il faut vérifier si elle existe avant de tenter de la lire.

0
Zizanie > avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024
Modifié le 7 nov. 2022 à 18:36

jE COMPRENDS bien, mais je ne me souviens plus du tout comment on fait !!! Le temps a passé depuis mes premières codifications.

Bien

Merci pour votre aide

Ave empty bien sûr !!!!

0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497 > Zizanie
Modifié le 7 nov. 2022 à 23:41

Avec la fonction isset : https://www.php.net/manual/en/function.isset.php

isset permet de s'assurer que la clé existe avant de continuer et donc éviter l'erreur "Undefined array key".

Mais la fonction empty() est peut-être préférable si tu souhaites aussi t'assurer que la valeur est non-vide.

0

Voilà ce que j'ai fait mais bon.

La valeur n'est pas vide puisque ma BDD enregistre

Merci

$site_referent = $_SERVER['HTTP_REFERER'];
          if(isset($site_referent)){
          echo "valeur déclarée";}
          else {
          echo "valeur nulle";}
         $site_referent = $_SERVER['HTTP_REFERER'];
          $monsite = 'http://' . $_SERVER['HTTP_HOST']; 
         if (preg_match($monsite,$site_referent))

0

Je n'en ai fait qu'une pour voir si cela fonctionnait mais non.....

0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
8 nov. 2022 à 12:20

Bonjour,

Il faut vérifier si $_SERVER['HTTP_REFERER'] existe avant de l'utiliser ou de l'attribuer à une autre variable.

Faire une vérification isset() sur une variable que tu as définie manuellement juste au-dessus n'apporte rien...

0
Zizanie > avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024
8 nov. 2022 à 13:30

Cela donnerait donc ceci :
          if(isset($site_referent)){
          echo "valeur déclarée";}
          else {
          echo "valeur nulle";}
         $site_referent = $_SERVER['HTTP_REFERER'];
          $monsite = 'http://' . $_SERVER['HTTP_HOST']; 
         if (preg_match($monsite,$site_referent)){blabla

0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497 > Zizanie
8 nov. 2022 à 15:33

Non c'est encore pire là. Tu fais un isset sur une variable non-déclarée, et plus tard, tu lui assignes $_SERVER['HTTP_REFERER'] sans avoir vérifié si $_SERVER['HTTP_REFERER'] est défini.

Il faut d'abord vérifier si $_SERVER['HTTP_REFERER'] existe avant de l'utiliser.

0
Zizanie > avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024
8 nov. 2022 à 16:33

Bonjour,

Excuse-moi, mais je ne comprends plus du tout, où je dois mettre mon isset !

Désolée, d'être si "obtus"

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question

Merci beaucoup cela fonctionne.

L'erreur referer est partie, je vais faire maintenant l'undefined key HOST

0

Bonsoir, 

Mes deux "undefined key" sont réglées.

Me reste ceci à la ligne 179

		
		$monsite = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ''; 
		
		 if (preg_match($monsite,$site_referant))
		    {
			$site_referant = "";}

Warning: preg_match(): Delimiter must not be alphanumeric or backslash in

/homepages/8/d560574319/htdocs/clickandbuilds/test/wp-content/plugins/insert-php-code-snippet/stats_passages.php on line 179 (la ligne de l'ouverture de la parenthèse du preg_match)

voilà ce que j'avais pour $monsite

$monsite = 'http://' . $_SERVER['HTTP_HOST'];
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497 > Zizanie
15 nov. 2022 à 19:03

Bonjour,

La premier argument de la fonction preg_match ne peut pas être simplement ton domaine, il faut inclure des délimiteurs comme « # » ou « / ». C'est exactement ce que l'erreur te dit.

Là encore, rien de neuf depuis des années, c'était déjà une erreur de faire ce que tu fais avec les anciennes versions de PHP.

Voir ici pour des exemples : https://www.php.net/manual/fr/function.preg-match.php

Afin de vérifier si une chaine ($site_refereant) en contient une autre ($monsite), on utilise généralement strpos() qui retourne la position si la chaine est trouvée, ou false sinon.
https://www.php.net/manual/en/function.strpos.php

Depuis PHP 8.0, il y a aussi https://www.php.net/manual/en/function.str-contains.php

0