Hébergement du site en PHP et Mysql par WDMédia-hébergement
Vous aussi adpotez les éléPHPants de Vincent Pontier !  
CONCOURS
 
 
PLUS DE PHP
 
 
PLUS DE JAVASCRIPT
 
COMMENT CA MARCHE
 
 
EXPLIQUE-MOI
 
 
NEWS LETTER
 

 
PARTENAIRES
 
Découvrez scriptsphp.org
Découvrez phpteam.net
Tout sur les expressions régulières
IE sucks :-)
 
DESIGN DU SITE
 
Notice: Undefined variable (ou index)

Je vais essayer d'expliquer ici, ce que veulent dire "Notice: Undefined variable" et "Notice: Undefined index" et comment les éviter.

Régulièrement, on peut lire sur les forums des questions du genre : J'essaye d'installer un script que j'ai téléchargé et il m'affiche : Notice : Undefined variable ou Depuis la modification de mon serveur, j'ai des messages : Notice : Undefined index. Pas de panique, c'est presque normal !

Pour bien comprendre ce que signifie ce message, observez cet exemple :

<?php
$x
= $y + 10;
?>

A l'exécution de ce code, qu'est censé contenir la variable $x ?
Logiquement, on devrait répondre : Impossible à dire car on ne connaît pas le contenu de la variable $y.

Pour PHP, la réponse est la suivante : Comme la variable $y n'existe pas, je notifie ça à l'utilisateur et je considère qu'elle ne vaut rien. Dans ce cas : rien + 10 = 10 !

Il est donc impératif d'affecter une valeur à la variable $y, ce qui donne :

<?php
$y
= 27;
$x = $y + 10;
?>

Parfois, cette variable peut être extérieure à votre script (fichier inclus, donnée de formulaire, sessions ... etc.), et il faudra donc procéder de la manière suivante :

<?php
if( ! isset( $y ) ) $y = 0; // l'initialiser si elle n'existe pas
$x = $y + 10;
?>

Il en va de même pour les index d'un tableau. Quand j'utilise le code suivant :

<?php
$mon_tableau
= array( 'nom' => 'Charlie', 'animal' => 'furet' );
echo
$mon_tableau['email'];
?>

Vous constatez que l'index "email" n'existe pas, d'où le message "Notice : Undefined index email"

Pourquoi avant mes modifications sur le serveur, ça ne s'affichait pas ?

En fait, il existe plusieurs types d'erreurs, les fatales, les avertissements, les notifications, les mauvaises analyses ... etc. L'affichage de ces erreurs est soumis à une sorte de filtrage par l'intermédiaire de la directive de configuration error_reporting.
Dans les distributions de PHP, les auteurs diffusent deux fichiers de configuration : un fichier par défaut et un fichier recommandé. Normalement, le fichier de configuration par défaut est prévu pour être utilisé en développement mais pas en utilisation réelle. Seulement, ce fichier de configuration n'affiche pas toutes les erreurs et filtre les erreurs de type notification.

Remarque : Personnellement, je trouve ça paradoxal car c'est précisément en développement qu'il faudrait afficher toutes les erreurs !

Une chose est sûre, certaines personnes ont eu l'idée d'installer le fichier de configuration recommandé qui lui affiche les erreurs de notification, d'où l'apparition de ces erreurs.

J'ai vérifié, la configuration précédente ne filtrait pas les notifications

Dans ce cas, le problème est différent, c'est certainement la modification de la directive de configuration "register_globals", je vous laisse lire mon article : "Variables auto-déclarées : Pourquoi c'est mal ?"

Sur un script que j'ai téléchargé, l'auteur n'affecte pas toujours les variables, pourquoi faire ça ?

Tout simplement parce que vous êtes tombés sur l'auteur d'un script qui développait avec le filtrage des notifications et qui ne s'est donc jamais soucié de ce problème. En effet, dans certains langages, les variables non initialisées peuvent contenir n'importe quoi, mais avec PHP, une variable non initialisée est considérée comme une chaîne vide, ou 0 si on l'utilise dans le cadre d'une opération arithmétique.

De plus, il est plus rapide d'écrire :

<?php
echo $_GET['id'];
?>

plutôt que

<?php
if( isset( $_GET['id'] ) ) echo $_GET['id'];
?>

A la limite, vous pouvez utiliser l'opérateur "@" pour désactiver ponctuellement les erreurs, ce qui donne :

<?php
echo @$_GET['id'];
?>

Mais je considère cette méthode comme peu rigoureuse, alors vous faites comme vous le sentez !

En fait, ça ne sert pas à grand chose d'afficher ce type d'erreur.

Je ne serais pas aussi catégorique. En effet, cette notification peut vous aider lors de vos développements à détecter certaines erreurs. Par exemple :

<?php
$ligne
= db->fetch();
echo
$line['id'];
?>

Comme vous pouvez le remarquer, le nom de la variable est différent. Avec le filtrage des notifications, vous allez penser que la méthode de votre objet ne retourne rien, alors que c'est simplement parce que vous n'utilisez pas la bonne variable. De plus, contrairement aux noms des fonctions, PHP est sensible aux majuscules/minuscules pour les noms des variables ce qui conduit parfois à utiliser des variables qui n'existent pas à une majuscule près.

Pour conclure, je vous conseille plus que fortement de ne pas filtrer les notifications lors de vos développements.


Revenir aux mises au point



Ajouter une réponse
Nom
Email
Titre

Mise en forme : gras = [b]...[/b], italic = [i]...[/i], souligné = [u]...[/u], citation = [quote]...[/quote], lien = [url]liens_externe[/url] ou [url nom=texte]liens_externe[/url], code source : [code]...[/code]

Mémoriser mon nom et mon email : Oui Non
www.phpdebutant.org © 2024 - L'équipe de phpDebutant - Hébergement : WDMédia-hébergement
DEBUTEZ !
 
  0.  Introduction
  1.  Afficher une phrase ou une image
  2.  Afficher la date et l'heure
  3.  PHP dans du code HTML
  4.  La concaténation
  5.  Récupérer les valeurs d'un formulaire
  6.  Les structures de contrôle
  7.  Ecrire et lire dans un fichier texte
  8.  Les fonctions utilisateurs
  9.  Les variables d'environnement
  10.  Quelques fonctions utiles
  11.  SQL/MySQL (Create, Alter & Drop)
  12.  SQL/MySQL (Insert et Select)
  13.  SQL/MySQL (Delete et Update)
  14.  SQL/MySQL (Where)
  15.  Fonctions PHP pour mySQL
  16.  Interroger une table MySQL
  17.  Alimenter une ou plusieurs tables mySQL
  18.  Les pseudos-frames
  19.  Les sessions php4
  20.  Affichage page par page
  21.  Images dynamiques
  22.  Ca marche pas ?
  23.  Variables globales à OFF
  24.  Les variables dynamiques