Un lecteur nommé Charles a envoyé à The Daily WTF un bloc PHP de plus de 400 lignes, anonymisé pour protéger les coupables. Charles est le seul informaticien de son entreprise et avait besoin d'en parler quelque part. Le rédacteur Remy Porter s'en est chargé.
<?php
$resm_data = $data_source->fetchData("group=" . $item_id);
foreach ($resm_data as $key => $value) {
$option_id = $value->option_id;
$resm_details = $detail_source->fetch($option_id);
if ($resm_details) {
$label = $resm_details->{"label$lang"};
$category = $resm_details->category;
if ($category == 0) {
$cost = $resm_details->{"cost" . $currency};
$cost_info = $mot[101] . " : +" . number_format($cost, 2, ",", " ") . $currency_symbol;
}
}
}Le code construit un formulaire de réservation. Il débute par $data_source->fetchData("group=" . $item_id), une condition de filtre assemblée en chaîne brute, qui évoque une injection SQL selon la bibliothèque sous-jacente. La localisation passe par des noms de propriétés dynamiques : $resm_details->{"label$lang"} produit labelen ou labelde, et les prix viennent de {"cost" . $currency}, avec parfois les suffixes _1 et _2 pour les tarifs supplémentaires.
Une chaîne if/elseif à six branches sur un champ category formate ensuite les prix avec number_format($cost, 2, ",", " ") et puise les libellés d'interface dans un mystérieux tableau $mot à des index magiques comme 101, 102, 200, 300 et 500. Le HTML est assemblé par concaténation, y compris un champ quantité figé à min="1" max="1". Les horaires de départ et d'arrivée sont stockés en JSON dans la base et décodés ligne par ligne.
Le tout atterrit dans un template via $TEMPLATE->SET_BLOCK_VARIABLES("Block_OPTIONS", [...]) avec 18 clés. Puis le bloc entier réapparaît pour les enregistrements enfants, chaque variable préfixée child_. Puis une troisième fois pour les frères et sœurs, récupérés par fetchData("parent=" . $parent_option_id) et rendus dans le même bloc "Block_OPTIONS.Block_OPTIONS_CHILD".
Porter conclut en souhaitant que l'auteur découvre un jour les fonctions.
Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.