Problème PHP
Résolu/Ferméavion-f16 Messages postés 19250 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 22 décembre 2024 - 15 nov. 2022 à 19:03
- Problème PHP
- Easy php - Télécharger - Divers Web & Internet
- Php?id=1 - Forum PHP
- Br php ✓ - Forum PHP
- Expert php - Télécharger - Langages
- Php echo image ✓ - Forum PHP
5 réponses
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
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
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
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.
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 !!!!
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.
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))
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...
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
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.
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"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionMerci beaucoup cela fonctionne.
L'erreur referer est partie, je vais faire maintenant l'undefined key HOST
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'];
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