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.
Je tombe sur un tuto portant sur la gestion des visiteurs d'un site Web.

Outre l'indentation aléatoire, l'absence totale de regroupement de code sous fonction ou objet, les requêtes devant retourner un seul et unique enregistrement et qui sont traités comme si elles en renvoyaient plusieurs, l'absence totale de vérification sur les données saisies par les utilisateurs, les nombreuses étapes de l'inscription et de la récupération de mot de passe dans un seul et unique fichier… le plus étrange à mes yeux reste l'impression que l'auteur ne connaît pas du tout les booléens : il utilise au choix une variable dans laquelle il stocke le texte "O" ou "N", ou bien il met une valeur aléatoire loin de "0" lorsque la variable doit contenir "Faux", et "0" lorsque la variable doit contenir "Vrai". PEBKAC.
PEBKAC #7994 proposé par Garf365 le 18/06/2013 | 45 commentaires | 👍🏽 👎🏽 +183
Cool, je voulais apprendre à faire ça et ce tuto a l'air trop bien ! (Ironie)

On peut avoir un lien ? :D
Commentaire #97253 écrit par Limeila le 18/06/2013 à 10h03 | 👍🏽 👎🏽
Qui n'a jamais vu la réimplémentation de la classe Boolean sous forme d'enum ? o/
Commentaire #97254 écrit par mini le 18/06/2013 à 10h04 | 👍🏽 👎🏽
Eu... c'est irréel de "savoir" faire tout ça sans savoir le faire bien. Il est certain que c'est pas une forme de blague, un "tuto d'avril" ?
Comme Limeila, j'aimerais voir le lien.
Commentaire #97257 écrit par Voynich le 18/06/2013 à 10h29 | 👍🏽 👎🏽
http://christele.developpez.com/tutoriels/php/pdo/gestion-visiteurs-pd[...]
Je pense qu'il s'agit de ceci :)
Commentaire #97260 écrit par Alfred456654 le 18/06/2013 à 10h41 | 👍🏽 👎🏽
True, False et FileNotFound. Tout le monde utilise ça !
http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
Commentaire #97261 écrit par Acné le 18/06/2013 à 10h46 | 👍🏽 👎🏽
Je ne compte plus le nombre de fois où j'ai vu des champs etat avec 1, 0, mais qui peut aussi prendre -1, 2, 999.

Et bien entendu, sans aucune documentation sur la chose. Faut croire que c'est trop évident pour être commenté.
Commentaire #97266 écrit par Clem le 18/06/2013 à 11h30 | 👍🏽 👎🏽
Ça ne risque pas d'être les miens, je les appelle state !
Parce que vu que les langages sont en anglais, ça marche mieux quand les variables sont en anglais aussi, pour qu'ils se comprennent :D
Commentaire #97269 écrit par Marmotte le 18/06/2013 à 11h36 | 👍🏽 👎🏽
LOL, merci pour le lien, un point internetz pour toi.

Regardez bien le fichier inscription.php :

Toutes les variables sont initialisées à partir de $_POST, et donc contrôlées par l'utilisateur.

En assignant à $_POST['Nouveau_MotPasseR'] et $_POST['MotPasse_confirmR'] une valeur choisie (disons 123456), et à $_POST['nomM'] "admin", on change le mot de passe admin, il n'y a aucune vérification. On peut ainsi changer le mot de passe de tout le monde.

Bien sûr, "admin" est un utilisateur ayant tous les droits (c'est hardcodé dans les fichiers).
Commentaire #97271 écrit par FBM le 18/06/2013 à 11h40 | 👍🏽 👎🏽
L'ex-patron de Aaargh!!! a bien pris des cours quelque part.
Commentaire #97272 écrit par mini le 18/06/2013 à 11h41 | 👍🏽 👎🏽
J'ai bien écrit un programme dont les "booléens" peuvent avoir comme valeurs:
#define FALSE        0
 #define TRUE         1
 #define UNKNOW       2
 #define TRUE_BE      UNKNOW

Mais bon, en C il n'y a pas de type booléen, et je n'ai écrit le mot bool nul part dans le code.
Commentaire #97274 écrit par Shirluban le 18/06/2013 à 11h55 | 👍🏽 👎🏽
N'importe quoi ! Son ex-patron est comme Chuck Maurice : ils savaient tout avant même leur naissance !
Commentaire #97275 écrit par Acné le 18/06/2013 à 11h58 | 👍🏽 👎🏽
TRUE_BE, c'est la version de Schrödinger de la vérité ?
Commentaire #97277 écrit par Acné le 18/06/2013 à 12h00 | 👍🏽 👎🏽
C'est bien pour ça que j'ai parlé de classe, je ne connais pas de language objet dépourvu de booléen ^^
Commentaire #97278 écrit par mini le 18/06/2013 à 12h08 | 👍🏽 👎🏽
Merci de faire de la pub pour le site de ma fille ! Elle a de quoi être fière, non ?
Commentaire #97292 écrit par Mme Michu le 18/06/2013 à 12h56 | 👍🏽 👎🏽
Ils laissent passer ça sur developpez.com ? :o
Commentaire #97293 écrit par neeko le 18/06/2013 à 12h57 | 👍🏽 👎🏽
Ca n'a pas été implémenté en C99 les booléens ?
Commentaire #97294 écrit par neeko le 18/06/2013 à 12h58 | 👍🏽 👎🏽
Son boss c'est jvachez, sérieux.
Commentaire #97295 écrit par Aaargh!!! le 18/06/2013 à 12h59 | 👍🏽 👎🏽
En C, depuis 99, il y a un type booléen.
Commentaire #97297 écrit par Peredur le 18/06/2013 à 12h59 | 👍🏽 👎🏽
Vous n'en avez pas assez de me critiquer en permanence ?

Donnez-moi vos adresses IP, vous allez voir !
Commentaire #97299 écrit par Ancien patron de Aaargh!!! le 18/06/2013 à 13h00 | 👍🏽 👎🏽
Vous n'en avez pas assez de me critiquer en permanence ?

Donnez-moi vos adresses IP, vous allez voir ce que vous allez voir !
Commentaire #97300 écrit par Ancien patron de Aaargh!!! le 18/06/2013 à 13h01 | 👍🏽 👎🏽
Je te donne la mienne : 127.0.0.1
Commentaire #97302 écrit par Aaargh!!! le 18/06/2013 à 13h01 | 👍🏽 👎🏽
Ahah ! Erreur funeste ! Tu vas regretter tout ce que tu as dit sur moi.

Format c:, allez ça commence ! tous tes docs sont effacés, maintenant c'est le dossier wind

/connexion reset
Commentaire #97304 écrit par Ancien patron de Aaargh!!! le 18/06/2013 à 13h02 | 👍🏽 👎🏽
Au revoir !
Commentaire #97305 écrit par Aaargh!!! le 18/06/2013 à 13h03 | 👍🏽 👎🏽
Ok, ça se tient comme raisonnement mais c'est parlé par combien de personnes au Japon ? :)
Commentaire #97306 écrit par Cid2Nice le 18/06/2013 à 13h04 | 👍🏽 👎🏽
@Acné: TRUE_BE signifie VRAI et Big-Endian.
Ça me sert dans un cas particulier pour assurer la cohérence des données et la compatibilité multi-plateformes, certaines données devant êtres stockés en Big-Endian quelque soit le système (pas de conversion du fichier en entré, et comme on ne fait dessus que des copies et des comparaisons d'égalité, ça ne pose pas de problème de ne pas respecter l'ordre des octets du système).

@neeko & Peredur: Je ne suis pas sûr de la version IBM C utilisé par le client, et pour me simplifier la vie (les tests) j'ai besoin de travail sur d'autres systèmes avec d'autres compilateurs (voir de compiler en C++). Alors un type qui s'appelle bool en C99, _Bool en IBM C, bool en IBM C++ et jesaispascommentchez Visual C++ et gcc, ... non merci.
Commentaire #97309 écrit par Shirluban le 18/06/2013 à 13h07 | 👍🏽 👎🏽
@neeko : c'est exactement ce que je me suis dit... sa crédibilité en prend un sérieux coup
Commentaire #97313 écrit par Garf365 le 18/06/2013 à 13h17 | 👍🏽 👎🏽
Je suis un partisan du 100% english.
En fait je ne supporte plus de voir des variables, des classes, des champs de BDD, qui ont un nom français...
:-P

C'est plus la logique du code / du modèle de données, qui doit être carrée. Après, français ou pas... bof quand même. Mais quand tu bosses avec des équipes non francophones, tu regrettes d'avoir nommé une table inscrits avec un champ verifie. (ce que je n'ai jamais fait, c'est crapé :) ..)
Commentaire #97347 écrit par Clem le 18/06/2013 à 14h40 | 👍🏽 👎🏽
@Shirluban : excuse-moi, mais c'est à vomir.


TRUE_BE pour vrai et big endian ? Beurk.

Utilise une structure :
typedef struct
{
bool value;
bool big_endian;
} mastructure;

Ou des flags :
#define FLAG_BOOL 1
#define FLAG_BE 2

if (value & FLAG_BOOL)
// code
if (value & FLAG_BE)
// encore du code



Mais pas de TRUE_BE quoi.
Commentaire #97351 écrit par FBM le 18/06/2013 à 15h08 | 👍🏽 👎🏽
T'façon c'est du PHP, et le PHP c'est nul, moche et non sécurisé.
Commentaire #97353 écrit par Shadam le 18/06/2013 à 15h17 | 👍🏽 👎🏽
TRUE_BE || ! TRUE_BE

/me court
Commentaire #97359 écrit par Acné le 18/06/2013 à 15h47 | 👍🏽 👎🏽
@FBM:
1) En comptant la définition et une ligne de commentaires, TRUE_BE est utilisé dans ... 6 lignes de code!
(Sur un programme de ~8500 lignes, sans compter les déclarations de structures et de fonctions.)

2) Dans l'appli en question, le cas FALSE et Big Endian non seulement n'existe pas, mais n'a aucun sens.
Donc techniquement et fonctionnellement, séparer le triléen en deux n'apporte rien.

3) "excuse-moi, mais c'est à vomir"
"#define FLAG_BOOL 1"
Permet moi de te retourner le compliment.
Commentaire #97360 écrit par Shirluban le 18/06/2013 à 15h53 | 👍🏽 👎🏽
1) ok, noté

2) alors dans ce cas, pourquoi ne pas faire un enum ? C'est quand même beaucoup plus propre que des macros.

3) Ces macros définissent la position des flags dans un entier, ça permet d'avoir du code lisible : value & FLAG_MACHIN au lieu de value & 0x0400 par exemple... Je ne vois pas où est le problème. Appelle-le FLAG_BOOLVALUE si tu préfères, peu importe.
Commentaire #97362 écrit par FBM le 18/06/2013 à 16h07 | 👍🏽 👎🏽
La mienne en ce moment, c'est 192.168.1.1 mais elle change tous les 2 jours.
Commentaire #97371 écrit par Ishido le 18/06/2013 à 16h40 | 👍🏽 👎🏽
2) Parce-que quant tu n'a que les deux états TRUE et FALSE, les macro c'est simpa.
Et quant vient le besoin de gérer un troisième état et que tu doit choisir entre rajouter un define qui touche seulement 6 lignes, ou passer par un enum et soit jongler entre deux gestions différentes des booléens/triléens, soit te pallucher tout le code pour verifier les impacts et faire le changement, ben tu choisi la solution qui te prend pas deux jours.

3) Le problème est que le nom FLAG_BOOL n'est pas parlant.
Si quelqun reprend ton appli (ou toi-même deux mois après) et tombe sur if (value & FLAG_BOOL) au milieu du code (ou if (value & FLAG_BOOLVALUE), c'est pas mieux), il y a un grand risque qu'il pense que le flag indique si la valeur est un booléen ou non, et non pas l'état du booléen.
Alors qu'avec if (value & FLAG_TRUE) on voit tout de suite que le test sert à vérifier que la valeur est à VRAI.

Et que penser de valeur |= FLAG_BOOLVALUE ?
Commentaire #97381 écrit par Shirluban le 18/06/2013 à 16h57 | 👍🏽 👎🏽
Pour être honnête, je n'ai jamais trouvé quoi que ce soit d'utile ou de bien fait sur developpez.net

@"PHP caymal blabla" : tu peux faire du PHP sécurité tout comme tu peux faire du java / c++/ whatever tout pourri. Tout dépend de ta rigueur.
Commentaire #97384 écrit par iFrancois le 18/06/2013 à 17h24 | 👍🏽 👎🏽
J'ai les mêmes à la m... au travail.
Et ça fait mal quand on te demande d'ajouter une fonction là-dedans. Des fois tu te dis que tu aurai plus vite fait de tout recoder de 0 plutôt que d'essayer implémenter quoique ce soit carré par dessus ce genre de code excrémentiel.
Commentaire #97395 écrit par Youplà le 18/06/2013 à 18h00 | 👍🏽 👎🏽
La mienne, elle ne change jamais, je ne sais pas pourquoi : 127.0.0.1


(Comment ça "c'est du réchauffé" ?)
Commentaire #97397 écrit par Youplà le 18/06/2013 à 18h01 | 👍🏽 👎🏽
Moi j'ai 141.116.168.135
Commentaire #97427 écrit par Acorah le 18/06/2013 à 19h02 | 👍🏽 👎🏽
"code excrémentiel." c'est noté, je la replacerai, celle-là !

PS : si tu n'as jamais vu un type rire la gorge déployée, ma webcam si, à l'instant où j'ai lu ton comm' !
Commentaire #97456 écrit par Aaargh!!! le 18/06/2013 à 20h35 | 👍🏽 👎🏽
<mode(personnalité) = "dédoublement">

Mais non, Mme Michu, c'est la fille à jvachez !

</mode>
Commentaire #97457 écrit par Aaargh!!! le 18/06/2013 à 20h37 | 👍🏽 👎🏽
J'aime bien le :

if ($dd!=0 && $dd!=1) $dd=0;

Desfois que $dd était déjà à 0 c'est bète de lui réassigner 0 effectivement :p.
Commentaire #97465 écrit par Krogoth le 18/06/2013 à 20h59 | 👍🏽 👎🏽
@Shadam: J'ai déjà entendu des codeurs Java faire cette remarque !
Commentaire #97469 écrit par onèPasTrolldiTanPi le 18/06/2013 à 21h48 | 👍🏽 👎🏽
<mode class="chipoteur">
Il faudrait voir si l'assignation d'une valeur à $dd prend plus de temps que le test. Si oui, cette vérification peut être justifiée.
</mode>
Commentaire #97529 écrit par Youplà le 19/06/2013 à 11h08 | 👍🏽 👎🏽
@Aaargh!! : C'est peut-être la fille de Mme Michu et jvachez?
Commentaire #97541 écrit par Napium le 19/06/2013 à 11h53 | 👍🏽 👎🏽
C'est vrai qu'a la lecture du code le dev s'est posé se genre de question :p
Commentaire #98593 écrit par Krogoth le 23/06/2013 à 18h44 | 👍🏽 👎🏽