Сегодня: 16:12:2025 Доброго вам вечера!

I live ExBB and CMS Limbo!  I live ExBB and CMS Limbo!
Логин :
Пароль :
Регистрация?  Забыли пароль? 
 

Страниц (117): В начало « ... 109 110 111 112 [113] 114 115 116 117 »

> Найдено сообщений: 1165
NordWest Отправлено: 22 января 2012 — 00:08 • Тема: Как работать с сессиями в PHP? • Форум: Записная книжка PHP

Ответов: 0
Просмотров: 2559
Все, что мы записываем в переменную $s (массив), будет доступно для чтения при следующем заходе посетителя на сервер. Про сессии, на самом деле, можно сказать очень много, чтобы описать возможности и особенноти.. Но если вы поюзаете пример и попробуете использовать в своих задачах, сами поймете.
code:
<?php
unset($s);// думаю, это писать не надо, но это явно не повредит
session_start();// это равносильно HEADERS() и SETCOOKIES(), до вызова функции
// ничего на экран не выводить
session_register('s');// объявляем, что $s является частью сессии
if (isset($c) && $c=='clear')
{ unset($s);// обнуления идентификации посетителя.
header('Location: sess.html');
echo 'clear…';
exit;
}
echo '<a href="sess.html">обновить страницу</a>';
echo '<a href="sess.html?c=clear">обнулить идентификацию</a>';
if (!isset($s['count']))
{ // Посетитель пришел впервые. Объявляем переменную, которая
// должны быть всегда. Это счетчик загрузок страницы.
$s['count']=1;
}
else
{ $s['count']++;
}
echo 'Вы загружили эту страницу раз: '.$s[count];
// обработка формы, заполняемой посетителем
// если введено имя, заносим в сессию
if (strlen($name)>1) { $s['name']=$name; }
if (!isset($s['name']))
{ // если имя еще не введено, выводим форму для ввода
echo 'Вы новый пользователь. Пожалуйста, введите ваше имя: ';
echo '<form action="sess.html"><input type="text" name="name" />';
echo '<input type="submit">';
echo '</form>';
}
else
{ // иначе пишем имя из сесси
echo 'Вы зарегистрированы под именем: '.$s[name];
}
?>
NordWest Отправлено: 21 января 2012 — 19:00 • Тема: Проверка checkbox на форме • Форум: Записная книжка PHP

Ответов: 0
Просмотров: 3386
Хотелось бы отметить, что многие изначально совершают ошибки и пишут не правильно html checkbox. То есть начитавшись в Интернет информации 10 летней давности пишут всякую охинею. Согласно одного из последних строгих DOCTYPE, который пытается нас сопроводить в эпоху HTML5 checkbox правильно пишется следующим образом:
code:
<input type="checkbox" name="checkme" checked="checked" />


Обратите внимание, id в input объекте нет! Согласно последним стандартам к таким html объектам нужно обращаться через свойство name. Также обратите внимания, что нет и value, при type="checkbox" это значение не прописывается. Оно по умолчанию =0. То есть нет смысла его указывать, если не требуется выставить, что либо принудительно.

Речь идет о стандарте: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">, в других стандартах DOCTYPE данный объект может писаться по другому. Смотрите внимательно спецификацию.


Можно сделать так. Перед тегом <input type="checkbox"> поместить тег <input type="hidden"> с тем же самым значением параметра «name»:
code:
<form …>

<input type="hidden" name="checkme" value="0">
<input type="checkbox" name="checkme" value="1">

</form>


Теперь если checkbox установлен, в переменной $checkme передастся «1», в противном случае «0». Однако, если у вас будет 10 checkbox`ов, то будете уже не приятно удивлены, как быстро начнет увеличиваться ваш html код, а некоторые браузеры покрутят пальцем возле вашего виска.

Правильно делать так...
Для начала, нужно форму сделать согласно стандартам консорциума W3C

Код html:
code:
<form action="page.php" method="post">
<input type="checkbox" name="checkme" checked="checked" /> <- правильно пишем input согласно стандартам
</form>


Код PHP:
code:
function checkbox_verify($_name)
{
$result=0;// обязательно прописываем, чтобы функция всегда возвращала результат
// проверяем, а есть ли вообще такой checkbox на html форме, а то часто промахиваются
if (isset($_REQUEST[$_name]))
{ if ($_REQUEST[$_name]=='on') { $result=1; } else { $result=0; }
}
return $result;
}


В итоге, вызов получается очень простым:
code:
echo checkbox_verify('checkme');
NordWest Отправлено: 21 января 2012 — 18:54 • Тема: Вставки в код PHP Javascript • Форум: Записная книжка PHP

Ответов: 3
Просмотров: 6523
Вызов стиля из ява скрипта

code:
<style type="text/css">
<!--
.browse
{
width: 100%;
border: 1px solid #CCCCCC;
}
-->
</style>
NordWest Отправлено: 21 января 2012 — 18:53 • Тема: Вставки в код PHP Javascript • Форум: Записная книжка PHP

Ответов: 3
Просмотров: 6523
Вставка в *.php файл ява скрипта для отображения php переменной:

code:
?><script type="text/javascript"> var desc='<?php echo $Itemid;?>'; alert(desc); </script> <?php


Для файлов *.tpl конструкция выглядит чуть по другому:

code:
<script type="text/javascript"> var desc='{$Itemid}'; alert(desc); </script>
NordWest Отправлено: 21 января 2012 — 18:43 • Тема: Как определить значение по умолчанию в javascript? • Форум: Записная книжка PHP

Ответов: 0
Просмотров: 2465
code:
function func_name(_params)
{
// если входящий параметр _params не определен, то значение подставляется по умолчанию 555
var r=(typeof(_params)!='undefined')?_params:555;
return r;
}
NordWest Отправлено: 21 января 2012 — 12:17 • Тема: Создание и редактирование модулей Limbo • Форум: Limbo CMS

Ответов: 2
Просмотров: 1540
Вот ещё ссылка почитать и вот...
NordWest Отправлено: 19 января 2012 — 00:41 • Тема: История изменений... • Форум: Limbo CMS

Ответов: 40
Просмотров: 28461
mambo.php

было...

code:
function mosLoadModules( $position='left', $horiz=false)
{
global $conn,$Itemid,$access_sql;
$horiz=false;
$query = "SELECT id,title,message,module,ordering,position,showtitle,showon,params"
."\nFROM #__modules"
."\nWHERE published=1 AND position='$position' $access_sql"
."\nORDER BY ordering ASC";
$rs=$conn->Execute($query);
if($rs && $rs->RecordCount()>0 && $rsa = $rs->GetArray() )
{
if ($horiz)
{echo '<table cellpadding="0" cellspacing="0" border="1" width="100%"><tr>';}
foreach($rsa as $module)
{
if ($horiz)
{echo "<td valign=\"top\">";}
if($module['showon']=='' || ($Itemid<>'' && strstr($module['showon'],'_'.$Itemid.'_')) || strstr($module['showon'],'_0_'))
{
$params=parseparams(dbdecode($module['params']));
html_module2( $module, $params, $Itemid );
}
if ($horiz)
{echo "</td>";}
}
if ($horiz)
{echo "\n</tr>\n</table>";}
}
}


стало...

code:
function mosLoadModules( $position='left')
{
global $conn,$Itemid,$access_sql;
$query = "SELECT id,title,message,module,ordering,position,showtitle,showon,params"
."\nFROM #__modules"
."\nWHERE published=1 AND position='$position' $access_sql"
."\nORDER BY ordering ASC";
$rs=$conn->Execute($query);
if($rs && $rs->RecordCount()>0 && $rsa = $rs->GetArray() )
{
foreach($rsa as $module)
{
if($module['showon']=='' || ($Itemid<>'' && strstr($module['showon'],'_'.$Itemid.'_')) || strstr($module['showon'],'_0_'))
{
$params=parseparams(dbdecode($module['params']));
html_module2( $module, $params, $Itemid );
}
}
}
}


Убрал куски кода связанные с переменной $horiz т.к. она всегда false и условия никогда не выполнятся.
NordWest Отправлено: 18 января 2012 — 23:56 • Тема: Этапы разработки CMS Limbo • Форум: Limbo CMS

Ответов: 115
Просмотров: 41348
Блин, до чего же тяжело мне дается дизайн. Найти ошибку в коде мне значительно проще чем поправить дизайн. С дизайном значительно хуже прокатывает метод копирования кусков кода, особенно когда дизайн в принципе не нравиться и хочется замутить свой.

Видимо нужно сесть за теорию.
NordWest Отправлено: 18 января 2012 — 00:39 • Тема: Методы защиты веб-формы без капчи • Форум: Limbo CMS

Ответов: 7
Просмотров: 3389
Минимальное время заполнения формы

Суть метода заключается в том, что сервер замечает время создания формы. Если пользователь заполнил форму меньше чем за определённое время, то он считается ботом. Время можно варьировать в зависимости от сложности формы.
Верно также, что если форма не была заполнена слишком долго, то что-то не так.

Скрытое поле

Этот метод может показаться странным, но он, похоже, работает. К форме добавляется скрытое поле (скрытое в смысле display:none). Если поле заполнено, то пользователь считается ботом.
Удивительно, но многие простенькие боты заполняют все неизвестные поля.

Обфускация или шифрование HTML

Исходный код страницы является, по сути, вызовом javascript функции вроде document.write( decode( encodedHTML ) ), где encodedHTML — это как-то зашифрованный HTML.

Методы шифрования могут варьироваться от простого эскейпирования значений буковок (буква превращается '%код' ) до некоторых алгоритмов шифрования (например, простенький XOR).
В интернете есть много готовых решений, например, вот тут.

Блокирование определённых user-agent

Некоторые боты используют весьма специфические заголовки user-agent. Можно блокировать запросы не содержащие user-agent вообще или содержащие заведомо плохой заголовок.

В интернете есть списки таких заголовков. Вот, например, от некого Нила Гантона.

«Ловушка» для ботов

Суть этого метода заключается в создании специального раздела сайта вроде "/bot/guestbook". Ссылка на этот раздел не видна для пользователя, однако если бот зайдёт в этот раздел и сделает там хоть что-нибудь, то его IP тут же блокируется.
Раздел должен содержать лакомые для бота слова вроде «email», «submit», «add comment» и тому подобные. Файл «robots.txt» предупреждает хороших ботов.

Хеширование формы (BarsMonster )

При сабмите формы на сервер вычисляется хеш полей формы и добавляется в одно из специальных скрытых полей. Сервер проверяет значение хеша.

Использование прозрачных кнопок (BarsMonster )

У формы есть несколько кнопок типа <input type="image". Лишь на одной из картинок написан текст, остальные — прозрачные. Для сабмита пользователь должен нажать на картинку с текстом.

Динамическое создание формы (maxshopen )

Сама форма полностью создаётся javascript-методом динамчески. Таким образом, форму может увидить лишь пользователь, у которого отработал соответствующий скрипт.

Использование сторонних сервисов (le0pard )

Можно туннелировать трафик через специальный сервис, предназначенный для анализа контента на спам. Примером такого сервиса может быть Akismet

Гибридный подход

По умолчанию форма защищена каким-либо javascript-методом (динамическое создание формы или шифрование данных) или методом из приведённых выше. Если форма была засабмичена некорректно, то возвращается ошибка и просьба заполнить не очень простую капчу.

«Горшочек с медом».

Смысл метода Honeypot прост, как и его реализация. Помимо настоящих полей ввода, делаются скрытые поля. Пользователь их не видит, следовательно, не может их заполнить. Если поле заполнено, комментарий не нужно добавлять. Почему пользователь не заполняет поле понятно, а почему спам-бот заполняет? В ловушке должна быть приманка. В качестве приманки выступает значение атрибута name.
code:
<input type="input" name="email" value="" />
<input type="input" name="blablabla" value="" />


Бот, очевидно, умеет находить нужные поля и правильно их заполнять. Бот находит поле email, считает, что дело в шляпе, вбивает в него адрес (кстати, валидный). Заполняет тело комментария, отправляет форму. Обрабатывающий скрипт берет данные из поля blablabla. Это настоящие данные с которыми нужно работать. Скрипт также проверяет, есть ли что-то в поле email. Если есть, комментарий просто не будет добавлен в базу.

Несколько штрихов. Я не знаю, как работают боты. Но думаю, они не дураки. Если поле помечено, как hidden, бот может решить, что ловушка и искать другое поле. Поэтому я скрыл поле с помощью CSS, при этом не присваивал отдельный класс, а использовал селектор [name="email"]. Даже такого простого приема хватило, чтобы за сутки не было ни одного спам-комментария.
NordWest Отправлено: 17 января 2012 — 18:06 • Тема: Структура базы данных • Форум: Limbo CMS

Ответов: 7
Просмотров: 3149
Взаимосвязь параметров базы:

1. Таблица категорий
code:
categories/section (int) -> sections/id
categories/section ("com_menu") -> menu/menutype (categories/title)


2. Таблица меню
code:
menu/link_type ("component")/componentid (int) -> components/id
menu/link_type ("сс")/componentid (int) -> categories/id


3. Таблица контента
code:
content/catid (int) -> categories/id
content_frontpage/id (int) -> content/id
content_rating/id (int) -> content/id

Страниц (117): В начало « ... 109 110 111 112 [113] 114 115 116 117 »

Powered by ExBB v1.1.180311