We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 25423
    • 47 Posts
    Как передать какой либо параметр сниппету из сайта? т.е. например чтобы посетитель мог поменять через ссылку или выпадающий список сортировку новостей или что нибудь подобное..
      Excuse for bad English
      • 28814 ☆ A M B ☆
      • 1,086 Posts
      URL: http://www.example.com/?p=wow

      Сниппет с названием CoolSnippet:

      /* <? */

      echo $_GET[’p’];

      /* ?> */

      P.S.: Только сниппет, который получает динамические значения, должен быть некешируемым, а для этого его надо вызывать в шаблоне или в документе как [!CoolSnippet!].
      P.S2: Аналогично можно получать параметры, переданные посредством метода POST:
      /* <? */

      echo $_POST[’p’];

      /* ?> */
      P.S3: Забыл напомнить, все подобные данные, приходящие со стороны пользователя, надо жестко контролировать и вырезать нафиг все возможные намеки на SQL инъекции..
        Разработка сайтов и программных модулей на MODX.
        Опыт работы на MODx с 2005 года. Высокое качество.
        Компания Baltic Design Colors: http://www.bdcolors.ru.
        • 33273
        • 60 Posts
        А передать параметр в случае Search Engine Friendly URLS? Только POST?
        Спасибо, Игорь. Такие ответы человеческие.
          • 33273
          • 60 Posts
          И как можно передать параметр не через form, а когда пользователь кликает ссылку?
            • 31213
            • 153 Posts
            Quote from: yurican at Feb 08, 2007, 10:13 AM

            И как можно передать параметр не через form, а когда пользователь кликает ссылку?
            через JS можно, сначала сделать скрытую форму, а потом обработать событие по щелчку, например:

            <script type="text/javascript">
            function clicks()
            {
            document.getElementById("pole").value = "OK";
            document.getElementById("forma").submit();
            }
            </script>
            <form action="" method="get" id="forma">
            <input type="hidden" id="pole" value=""/>
            </form>
            <a href="#" onclick="clicks()">PREVED!</a>
              • 26704
              • 115 Posts
              Добрый день,
              с целью пофиксить возможности инъекции написала вот такой код:

              if (!function_exists('isValid')) {
                  function getTags($pValue, $pPattern) {
                      return isset($pValue) && !empty($pValue) && preg_match($pPattern, $pValue);
                  }
              }
              //...
              $myValue = (isValid($_GET['a'], '/^[0-9]+$/')) ? $_GET['a'] : 0;
              

              В данном конкретном случае требуется проверять параметр на принадлежность к целым, положительным (без указания знака) числам. Мб есть способ организовать проверку более грамотно? Долго пыталась придумать способы решить задачу с помощью методов is_int и is_numeric но в итоге пришлось использовать регулярку. Заранее спасибо.
                • 26704
                • 115 Posts
                Мб, я чего то не понимаю... но is_int($_GET[’a’]) будет возвращать false и в случае правильного параметра, так как
                var_dump(is_int("23"));

                вернет:
                bool(false)

                на сколько я вчера выяснила $_GET[’a’] возвращает текстовое значение, таким образом приходится использовать приведение к типу, при этом в случае передачи значения "-1" требуется доп проверка или же я все сильно напутала?
                  • 26704
                  • 115 Posts
                  Quote from: Andchir at Apr 02, 2009, 08:30 AM

                  Ага... Тогда можно попробовать так:

                  $myValue = is_int(intval($_GET['a'])) ? intval($_GET['a']) : 0;

                  Согласна что так можно, но при этом будет возможность передать в виде параметра отрицательное значение, значит дополнительно придется брать значение по модулю. Andchir, огромное спасибо за ответы, но вот итоговый вопрос - что же лучше делать? Использовать сравнение с рег выражением в не кешируемом сниппете или же вызывать несколько методов для проверки? И еще вопрос... я ни как не могу найти описание стандартов php интерпретатора, по этому не совсем уверена в необходимости использовать проверки типа:
                  isset($pValue) && !empty($pValue)

                  На сколько я помню (на 100% не уверена конечно, особенно в руби) руби и питон в случае если значение не установлено или же пустое просто не стали бы производить проверку регулярки, что в итоге даст малюсенький выигрыш.... экономия на спичках конечно же, но все таки интересно, как себя ведет в подобных случая php? И финальный вопрос - стоит ли использовать именно связку из isset и empty или же isset вполне будет достаточно одного isset? Заранее спасибо!