Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет на повторного выполнения скрипта 
:(
    Опции темы
Всемогущий
Дата 29.4.2007, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



сегодня для себя решал и решил проблему клонов.
Двоники в зтом случае это одинаковые записи следующие друг за другом.

решая проблему 
Цитата(BuShaRt @  29.4.2007,  10:55 Найти цитируемый пост)
 запросы тяжеловатые



Код

$correct=md5($_POST['name'].$tip.$_POST['cena']);

$result = mysql_query('SELECT md5(concat(`name`, `tip`,`cena`)) as correct  FROM `jobs`  ORDER BY  `id` DESC  LIMIT 1') ;

$line = mysql_fetch_array($result)  ;

if($correct==$line['correct'])die('был обнаружен двойник');



действительно странно 

Код

<?php
echo md5('кодировка');
echo "<br>\r\n";
echo md5(iconv("WINDOWS-1251","UTF-8" ,'кодировка'));
?>







--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
BuShaRt
Дата 29.4.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Всемогущий
Вот это уже очень красивый подход ;)

Какнить потестирую smile
PM MAIL   Вверх
Gold Dragon
Дата 1.5.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(BuShaRt @  29.4.2007,  00:19 Найти цитируемый пост)
Вообще как выще указывал Gold Dragon переменные удаляються функцией unset, но с $_POST этот прием не срабатывает, сам не знаю почему, может гуру ответят
Это точно, правда я так и не понял почему, что-то в доках ничего не нашёл. Вернее POST легко удаляется (смотрет $GLOBALS до и после), но при перезагрузке опять появляется smile


В общем я попытался собрать свой код в одном месте ( у меня это разные файлы). 

commentadd.php
Код

<?php
/*********************************************************************
    Модуль для добавления комментариев
//*********************************************************************/
DEFINE('_COM_USER','Кто-то');
DEFINE('_COM_FLUD',180);
DEFINE('_COM_ERR1','<br>Не указано название.');
DEFINE('_COM_ERR2','Данные успешно добавлены.');
DEFINE('_COM_ERR3','<br>Отсутствует текст в поле отзыва.');

$content = modCommentAdd();
echo $content;

function modCommentAdd(){
    GLOBAL $baza;
    if(!isset($_POST['com'])){// вывод формы (начало)
        // получение данных из кука при завершении с ошибкой
        $info['name'] = (isset($_COOKIE['name'])) ? $_COOKIE['name'] : '';
        $info['user_com'] = (isset($_COOKIE['user_com'])) ? $_COOKIE['user_com'] : '';
        $info['user_nik'] = (isset($_COOKIE['user_name'])) ? $_COOKIE['user_nik'] : '';
        $info['user_mail'] = (isset($_COOKIE['user_mail'])) ? $_COOKIE['user_mail'] : '';
        $info['error'] = (isset($_COOKIE['error'])) ? $_COOKIE['error'] : '';
        // удаление данных об ошибке
        setcookie('error',$info['error'],time()-60);

        return sCommentAddForm($info);
    }else{// запись данных из формы
        $info['error'] = '';
        // проверка названия
        $info['name'] = strip_tags(trim($_POST['name']));
        if($info['name']=='') $info['error'] .= _COM_ERR1;
        // проверка коментария
        $info['user_com'] = strip_tags(trim($_POST['user_com']));
        if($info['user_com']=='') $info['error'] .= _COM_ERR3;
        // проверка именя юзера
        $info['user_nik'] = strip_tags(trim($_POST['user_nik']));
        if($info['user_nik']=='') $info['user_nik'] = _COM_USER;
        // проверка мыла
        $info['user_mail'] = validMail($_POST['user_mail']);
        // запись данных в кук
        setcookie("name",$info['name'],time()+60);
        setcookie("user_com",$info['user_com'],time()+60);
        setcookie('user_nik',$info['user_nik'],time()+60*60*24*10);
        setcookie('user_mail',$info['user_mail'],time()+60*60*24*10);
        // если есть ошибки
        if($info['error']!=''){
            // записать ошибки
            $info['error'] = '<p class=txt9>Ошибка!'.$info['error'];
            setcookie('error',$info['error'],time()+60);
            // переход на страницу вывода комментариев
            header("Location: http://".$_SERVER['HTTP_HOST']."/comment.php");
            exit;
        }
        // проверка на флуд
        $fludIndex = (isset($_COOKIE['index'])) ? $_COOKIE['index'] : '';
        if(isset($_COOKIE['index'])){
            $temTime = _COM_FLUD-(time()-$fludIndex);
            $info['error'] =  '<p class=txt9>Ошибка!<br>На сайте установлен флуд-контроль.';
            $info['error'] .= '<br>Вы не можете сейчас добавить комментарий.';
            $info['error'] .= '<br>У Вас осталось '.$temTime.' секунд.';
            setcookie('error',$info['error'],time()+60);
            // переход на страницу вывода комментариев
            header("Location: http://".$_SERVER['HTTP_HOST']."/comment.php");
            exit;
        }
        //************************************************
        $info['user_data'] = date("Y-m-d H:i:s");
        $info['user_ip'] = fGetIP();
        // сдесь можно добавить проверку по IP

        // запись в базу
        $z = "INSERT INTO `comment` (
                `id` ,
                `user_data` ,
                `user_com` ,
                `user_nik` ,
                `user_mail` ,
                `user_ip` )
            VALUES (
                '',
                '".$info['user_data']."',
                '".$info['user_com']."',
                '".$info['user_nik']."',
                '".$info['user_mail']."',
                '".$info['user_ip']."',
            )";
        $r = $baza->query($z);
        // флуд контроль
        setcookie('index', time() ,time()+_COM_FLUD);

        header("Location: http://".$_SERVER['HTTP_HOST']."/comment.php");
        exit;
    }
}


function validMail($mail){
//********************************************************************
// функция проверки адреса почты
// при ошибке возвращает ''
//********************************************************************
    $result = (preg_match('/[0-9A-Za-z._-]+@([0-9a-z_-]+\.)+[a-z]{2,4}/', $mail)==0)? '' : $mail ;
    return $result;
}
function fGetIP(){
//********************************************************************
// функция получения IP
//********************************************************************
    if ($ip = getenv("HTTP_CLIENT_IP")){
       return $ip;
    }
    if ($ip = getenv("HTTP_X_FORWARDED_FOR")){
       if ($ip == '' || $ip == "unknown"){
          $ip = getenv("REMOTE_ADDR");
       }
       return $ip;
    }
    if ( $ip = getenv("REMOTE_ADDR") ){
    return $ip;
    }
}
function sCommentAddForm($info){
//********************************************************************
// скин формы
//********************************************************************
    return <<<EOF
    <div align="center"><p>&nbsp;</p>
    <form method="post">
        <table border="0" cellpadding="10" width="100%">
            <tr valign="top">
                <td align="center" class="txt8">
                    <p>*Название<br><input name="name" type="text" value="{$info['name']}">
                    <p>*Ваш отзыв<br><textarea name="user_com" rows=7 cols=45>{$info['user_com']}</textarea>
                    <p>Ваше имя: <input name="user_nik" type="text" value="{$info['user_nik']}">
                    <p>Mail: <input name="user_mail" type="text" value="{$info['user_mail']}">

                    <p><input type="submit" value="Добавить" name="com">
                    <p class="txt4">*Эти поля обязательны для заполнения
                </td>
            </tr>
            <tr>
                <td></td>
                <td></td>
            </tr>
        </table>
    </form>
    </div>
EOF;
}

?>

comment.php
Код

<?php
/*********************************************************************
    Модуль для работы с комментарием
//*********************************************************************/
$content = modComment();

echo $content;

function modComment(){
// здесь получаешь и обрабатываешь комментарии как тебе угодно
// лично я все данные закидываю в массиа $info

    // обработка ошибки
    $info['error'] = (isset($_COOKIE['error'])) ? $_COOKIE['error'] : '';

    $result = sCommentMain($info);
            return $result;
}

function sCommentMain($info){
//******************************************************************
// форма для вывода кооментариев
//******************************************************************
    return <<<EOF
    <p align="center">{$info['error']}
    <hr>
    <p>тут всё остальное
    <hr>
    <p><a href="commentadd.php">Добавить комментарий</a>
EOF;
}
?>


В общем, комментировал как мог... Если будет не понятно, спрашивай


Это сообщение отредактировал(а) Gold Dragon - 1.5.2007, 10:48


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Ravanger
Дата 3.8.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 26.6.2007

Репутация: нет
Всего: нет



Вобщем собственно гря проблемы не вижу, делаем что то типа
Код

<input type="hidden" name="action" value="send">


 и в обработке проверяем

Код

if(!empty($_POST['action']))
{
        //выполняем обработку
       header ("location: $_SERVER[HTTP_REFERER]");
}


и все

Это сообщение отредактировал(а) Ravanger - 3.8.2007, 15:28
PM MAIL   Вверх
Anarki
Дата 5.8.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 7
Всего: 11



Что-то я не понял, каким боком тут unset($act); поможет?
будет каждый раз уничтожаться и всё. Или я что-то недопонимаю?

Это сообщение отредактировал(а) Anarki - 5.8.2007, 14:44


--------------------
PM WWW   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1061 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.