Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
Un ami devait réaliser une interface d'administration pour un projet en PHP, et devait utiliser les sessions. Malheureusement, il n'arrivait pas à se connecter, et ne comprenait pas d'où venait le problème.

Il avait simplement oublié d'appeler session_start(), qui est obligatoire pour que le gestionnaire de session fonctionne. PEBKAC.
PEBKAC #7586 proposé par qwerty le 16/04/2013 | 14 commentaires | 👍🏽 👎🏽 -24
Hier j'ai lancé un de mes logiciels en développement, mais j'avais pas mis de point-virgule à la fin d'une ligne alors ça disait « syntax error ». PEBKAC.

Bon, si le type a passé trois jours sans lire les messages d'erreurs ou quoi que ce soit, d'accord, mais en l'état, ça fait un peu faible pour constituer un PEBKAC. Je m'abstiens.
Commentaire #89261 écrit par Hart le 16/04/2013 à 13h32 | 👍🏽 👎🏽
Il n'y a pas de message d'erreur, juste que $_SESSION est null.
Commentaire #89264 écrit par juu le 16/04/2013 à 14h04 | 👍🏽 👎🏽
Non session_start() n'est pas obligatoire pour le gestionnaire de session fonctionne (session.auto_start dans la config de php).
Après ce n'est pas un pebkac, ça peut être de l'inattention, une méconnaissance des sessions en PHP.

Si à chaque fois que quelqu'un ici bloquait sur un problème informatique, il postait un pebkac, il faudrait beaucoup de monde pour valider les pebkac.

En conséquence CTLP !
Commentaire #89270 écrit par neo le 16/04/2013 à 14h16 | 👍🏽 👎🏽
Si ta session n'est pas initialisée quand tu l'utilises, il me semble qu'une erreur de niveau notice est affichée dans la page (avec un bon print des familles) sauf si le niveau par défaut des erreurs a été changé ou si les erreurs sont masquées en dev (ce qui est stupide).
Commentaire #89273 écrit par neo le 16/04/2013 à 14h19 | 👍🏽 👎🏽
"quand tu l'utilises", sauf que tu n'utilises pas tes variables sans savoir si elles existes. Tu feras par exemple
 if( isset($_SESSION['tototo']) )
 {
   ...
 }
 

et là, aucun notice ne sera envoyée.
Commentaire #89275 écrit par juu le 16/04/2013 à 14h26 | 👍🏽 👎🏽
Une petite inattention, une petite erreur. Rien très sérieux, donc.

Je vote blanc.

Soit dit en passant, isset($_SESSION), puis array_key_exists("tototo", $_SESSION). Ça évitera toute confusion.
Commentaire #89298 écrit par Hart le 16/04/2013 à 16h57 | 👍🏽 👎🏽
Je lis "session"... je suppose que vous parlez de disques à graver ? J'espère que vous avez tous payé votre taxe SACEM, jeunes petits voyous.
Commentaire #89302 écrit par Pascal N. le 16/04/2013 à 17h17 | 👍🏽 👎🏽
Évoquer la taxe SACEM pour un PEBKAC qui a un vague rapport avec un support de sauvegarde quelconque ou une copie de données, je veut bien.
Mais là, non, rien, aucun rapport, même tiré par les cheveux, le PEBKAC a plus de rapport avec le commerce de l'ivoire qu'avec la SACEM !
Commentaire #89389 écrit par Shirluban le 16/04/2013 à 20h11 | 👍🏽 👎🏽
Le pebkac, c'est d'avoir pas lu avec assez d'attention le manuel ? Tout le monde est pebkac un jour ou l'autre à ce niveau là...
Commentaire #89401 écrit par tchouc le 16/04/2013 à 21h14 | 👍🏽 👎🏽
Rien ne sert de faire plusieurs tests. isset($foo['toto']['titi']['tata']) fonctionne très bien sans que $foo['toto']['titi'] ou même $foo ne soient définis. PHP gère ce genre de chose. Et il n'y a aucune confusion puisque le but étant de savoir s'il y a quelque chose dedans, null n'est pas souhaitable ici.

De plus, le array_key_exists c'est moche, 5 fois plus long à l'exécution, et ça va renvoyer true même si la valeur est null alors ce n'est pas du tout ce qu'on veut tester.
Commentaire #89403 écrit par juu le 16/04/2013 à 21h16 | 👍🏽 👎🏽
qwerty a parlé de la fonction car c'est surement le plus simple pour lui, ça ne lui sert à rien de lister les 36 méthodes pour montrer comment on démarre le gestionnaire de session.
Et quand je dis "plus simple", c'est surtout qu'on ne touche pas à la configuration d'un serveur comme ça à la va-vite, il peut y avoir plusieurs autres projets PHP qui tournent dessus sans avoir besoin de session. Et aussi, si tu déploies ton projet sur un hébergement mutualisé, tu n'auras surement accès à la configuration PHP du serveur. Donc pour moi, le session_start() est plus conseillé.

Pour ce qui est de l'erreur d'inattention, je suis tout à fait d'accords avec toi, pas de quoi en faire un fromage, mais ça rentre quand même dans les petits PEBKAC mignons.
Commentaire #89428 écrit par juu le 16/04/2013 à 22h58 | 👍🏽 👎🏽
Ah bon ? Bah moi ça m'importe de savoir si un tableau existe avant de tester s'il possède une clef particulière. Surtout quand l'existence de ce tableau n'est pas garanti.

« Rien ne sert de faire plusieurs tests ». Bah si justement. Dans le cas présent, ça éviterait de se demander pourquoi la session ne contient pas "tototo" alors que celle ci n'est tout simplement pas ouverte. Et la confusion est bien présente, quand on se demande alors si c'est la clef ou le tableau qui est n'est pas défini lorsque isset retourne false.

Je ne dis pas qu'il faut décomposer chaque isset de cette façon, mais il y a bel et bien des cas où c'est nécessaire. La question n'est pas de savoir si PHP le gère ou quoi. Il le gère, tant mieux. Ça ne m'empêche pas de vouloir faire des tests précis quand j'en ai besoin.

C'est vachement fort d'affirmer que PHP gère super bien le truc et que tout est super avec un seul isset tout en ayant démontré à peine un commentaire avant qu'un bug pouvait passer inaperçu avec cette méthode.
Commentaire #89440 écrit par Hart le 17/04/2013 à 01h39 | 👍🏽 👎🏽
Pour faire plus simple, les tests que tu penses avoir besoin ne sont pour moi pas nécessaire dans ce cas précis, c'est 'toto' dans lequel j'ai placé mes éléments de session utilisateur, donc on se fout alors de tester si la clé 'toto' existe mais juste que s'il n'y a rien dedans alors l'enregistrement en session ne fonctionne pas.
Il est évident qu'il n'y a pas besoin de se demander si c'est la clé où le tableau qui n'est pas défini ici. On n'est pas en mode debug.

Aussi, j'ai pas dit que la question était de savoir si PHP gérait, la question est de savoir ce que l'on veut utiliser pour savoir ce qu'on doit tester. array_key_exists n'effectue pas ici le test qui m'intéresse. Et le tableau à null n'est pas bug inaperçu.
Commentaire #89463 écrit par juu le 17/04/2013 à 09h54 | 👍🏽 👎🏽
Ce que j'ai oublié de mentionné, c'est que cet ami est censé être un "professionnel du PHP", comme il le prétend !
Commentaire #89494 écrit par qwerty le 17/04/2013 à 12h18 | 👍🏽 👎🏽