Un lector llamado Charles envió a The Daily WTF un bloque PHP de más de 400 líneas, anonimizado para proteger a los responsables. Charles es el único informático de su empresa y necesitaba desahogarse. El editor Remy Porter le hizo el favor.
<?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;
}
}
}El código construye un formulario de reservas. Empieza con $data_source->fetchData("group=" . $item_id), una condición de filtro pegada como cadena cruda, que sugiere inyección SQL según la librería subyacente. La localización funciona con nombres de propiedad dinámicos: $resm_details->{"label$lang"} produce labelen o labelde, y los precios salen de {"cost" . $currency}, a veces con los sufijos _1 y _2 para tarifas extra.
Una cadena if/elseif de seis ramas sobre un campo category formatea luego los precios con number_format($cost, 2, ",", " ") y saca los textos de interfaz de un misterioso array $mot en índices mágicos como 101, 102, 200, 300 y 500. El HTML se arma por concatenación de cadenas, incluido un campo de cantidad fijado a min="1" max="1". Los horarios de salida y llegada se guardan como cadenas JSON en la base de datos y se decodifican fila a fila.
Todo termina en una plantilla mediante $TEMPLATE->SET_BLOCK_VARIABLES("Block_OPTIONS", [...]) con 18 claves. Después, el bloque entero reaparece para los registros hijos, cada variable con el prefijo child_. Y una tercera vez para los hermanos, obtenidos con fetchData("parent=" . $parent_option_id) y renderizados en el mismo bloque "Block_OPTIONS.Block_OPTIONS_CHILD".
Porter cierra deseando que el autor descubra algún día las funciones.
Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
¿No llega nada? Mira en la carpeta de spam — y marca el correo como «No es spam» para que la próxima vez llegue directo.