var Phenix = function () {
Troll du Web depuis 1996

Syntaxe Horror

il y a le beau code, il y a le code moche. Et ici, c’est le code moche qui était anciennement sur SyntaxeHorror.com. Comme le site n’a jamais fonctionné, je continue ici pour le plaisir :)


Anti-hack des arguments

  1. //-- anti hack des arguments --------------------------------------
  2. function check_arg($key,$type='s',$pardefaut='',$len=80) {
  3.  
  4. // change l'odre de $_REQUEST[$key]
  5.  
  6. if($key=="email") {
  7. if(isset($_GET[$key] )) { $arg = $_GET[$key]; }
  8. else {
  9. if(isset($_POST[$key] )) $arg = $_POST[$key];
  10. else
  11. if(isset($_COOKIE[$key] )) $arg = $_COOKIE[$key];
  12. else if(isset($_SESSION[$key] )) $arg = $_SESSION[$key];
  13. else $arg=$pardefaut;
  14. }
  15. }
  16. else {
  17. if(isset($_REQUEST[$key])) $arg = $_REQUEST[$key];
  18. else $arg=$pardefaut;
  19. }
  20.  
  21. switch ($type) {
  22. case 's': // string
  23. $arg = substr($arg,0,$len);
  24. break;
  25. case 'sd': // string database
  26. $trans = array("%" => "", "," => "", ";" => ""); // anti hack db
  27. $arg = trim(strtr(substr($arg,0,$len),$trans));
  28. break;
  29. case 'n': // nombre
  30. $arg = $arg + 0;
  31. default:
  32. $arg = trim($arg);
  33. }
  34.  
  35. return($arg);
  36. }

Si quelqu’un comprend ce qui ce passe, qu’il n’hésite pas à m’éclairer...

Mention spécial pour ce passage :

  1. $trans = array("%" => "", "," => "", ";" => ""); // anti hack db
  2. $arg = trim(strtr(substr($arg,0,$len),$trans));

Worlpress...

  1. include_once("config.php");
  2. $config['run_include'] = ""; // execution pas inclus dans worldpress
  3. include_once("mlist.php");

Non, je sais que Wordpress a une grosse part du marché des CMS, mais quand même...


Template Joomla

Ceci est un fichier de template Joomla. Comment je suis censé comprendre ce qui ce qui ce passe ?
C’est un template fourni avec le core, il devrait servir d’exemple, être facile à comprendre.

  1. <?php
  2. /**
  3.  * @package Joomla.Site
  4.  * @subpackage com_content
  5.  *
  6.  * @copyright Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
  7.  * @license GNU General Public License version 2 or later; see LICENSE.txt
  8.  */
  9.  
  10. defined('_JEXEC') or die;
  11.  
  12. // Create a shortcut for params.
  13. $params = $this->item->params;
  14. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
  15. $canEdit = $this->item->params->get('access-edit');
  16. $info = $params->get('info_block_position', 0);
  17. ?>
  18. <?php if ($this->item->state == 0 || strtotime($this->item->publish_up) > strtotime(JFactory::getDate())
  19. || ((strtotime($this->item->publish_down) < strtotime(JFactory::getDate())) && $this->item->publish_down != JFactory::getDbo()->getNullDate())) : ?>
  20. <div class="system-unpublished">
  21. <?php endif; ?>
  22.  
  23. <?php echo JLayoutHelper::render('joomla.content.blog_style_default_item_title', $this->item); ?>
  24.  
  25. <?php if ($canEdit || $params->get('show_print_icon') || $params->get('show_email_icon')) : ?>
  26. <?php echo JLayoutHelper::render('joomla.content.icons', array('params' => $params, 'item' => $this->item, 'print' => false)); ?>
  27. <?php endif; ?>
  28.  
  29. <?php if ($params->get('show_tags') && !empty($this->item->tags->itemTags)) : ?>
  30. <?php echo JLayoutHelper::render('joomla.content.tags', $this->item->tags->itemTags); ?>
  31. <?php endif; ?>
  32.  
  33. <?php // Todo Not that elegant would be nice to group the params ?>
  34. <?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date') || $params->get('show_create_date')
  35. || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author') ); ?>
  36.  
  37. <?php if ($useDefList && ($info == 0 || $info == 2)) : ?>
  38. <?php echo JLayoutHelper::render('joomla.content.info_block.block', array('item' => $this->item, 'params' => $params, 'position' => 'above')); ?>
  39. <?php endif; ?>
  40.  
  41. <?php echo JLayoutHelper::render('joomla.content.intro_image', $this->item); ?>
  42.  
  43.  
  44. <?php if (!$params->get('show_intro')) : ?>
  45. <?php // Content is generated by content plugin event "onContentAfterTitle" ?>
  46. <?php echo $this->item->event->afterDisplayTitle; ?>
  47. <?php endif; ?>
  48. <?php // Content is generated by content plugin event "onContentBeforeDisplay" ?>
  49. <?php echo $this->item->event->beforeDisplayContent; ?>
  50.  
  51. <?php echo $this->item->introtext; ?>
  52.  
  53. <?php if ($useDefList && ($info == 1 || $info == 2)) : ?>
  54. <?php echo JLayoutHelper::render('joomla.content.info_block.block', array('item' => $this->item, 'params' => $params, 'position' => 'below')); ?>
  55. <?php endif; ?>
  56.  
  57. <?php if ($params->get('show_readmore') && $this->item->readmore) :
  58. if ($params->get('access-view')) :
  59. $link = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language));
  60. else :
  61. $menu = JFactory::getApplication()->getMenu();
  62. $active = $menu->getActive();
  63. $itemId = $active->id;
  64. $link = new JUri(JRoute::_('index.php?option=com_users&view=login&Itemid=' . $itemId, false));
  65. $link->setVar('return', base64_encode(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language)));
  66. endif; ?>
  67.  
  68. <?php echo JLayoutHelper::render('joomla.content.readmore', array('item' => $this->item, 'params' => $params, 'link' => $link)); ?>
  69.  
  70. <?php endif; ?>
  71.  
  72. <?php if ($this->item->state == 0 || strtotime($this->item->publish_up) > strtotime(JFactory::getDate())
  73. || ((strtotime($this->item->publish_down) < strtotime(JFactory::getDate())) && $this->item->publish_down != JFactory::getDbo()->getNullDate())) : ?>
  74. </div>
  75. <?php endif; ?>
  76.  
  77. <?php // Content is generated by content plugin event "onContentAfterDisplay" ?>
  78. <?php echo $this->item->event->afterDisplayContent; ?>

Quand tu n’as pas comprit le principe des clés primaire en AUTO_INCREMENT

J’ai trouvé ceci dans le code d’un plugin Joomla.
Je ne comprenais pas pourquoi j’avais une erreur de clé primaire dupliquée. Voilà pourquoi :

  1. $db->setQuery("SELECT MAX( `extension_id` ) as id FROM `#__extensions` WHERE `type` = \"plugin\" AND (`extension_id` > 8000 AND `extension_id` < 10000)");
  2. $id = $db->loadResult();
  3. if (empty($id) or $id='') $id = 9998;
  4. $id = $id + 1;
  5. // Enable mod_
  6. $db->setQuery("INSERT INTO #__extensions (extension_id, name, type, element, folder, enabled, access, protected, manifest_cache, params)
  7. VALUES (".((int)$id).", '******', 'plugin', 'cp', 'system', 1, 1, 1, '{\"name\":\"******\",\"type\":\"plugin\",\"creationDate\":\"December 2006\",\"author\":\"*******\",\"copyright\":\"**********\",\"authorEmail\":\"********\",\"authorUrl\":\"*******\",\"version\":\"3.0.0\",\"description\":\"*******_COPYRIGHT_DESCRIPTION\",\"group\":\"\"}', '{}')");
  8. $db->query();

Visiblement, le concept de clé primaire en AUTO_INCREMENT est - j’espère plutôt « était » - inconnu du créateur de ce plugin.