Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Дубли писем при подписке на топики

Модерирует : Antuan

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

chaosstorm

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравсвтвуйте!
Проблема такая: Пользователи жалуются, что на e-mail приходит куча уведомлений об ответах, а ответ только один. Иногда приходит 4 и более уведомлений на тему, а ответов новых и нет вовсе.
 
Что делать?
 
Как исключить дублирование писем при подписке

(устраняем повторную подписку на тему)

в post.cgi  
в sub addreply {
меняем
           
Код:
$filetoopen = "$ikondir" . "forum$inforum/$intopic.mal";  
            open (FILE, "$filetoopen");  
            @maildata = <FILE>;  
            close (FILE);  
         
             
            if ($innotify eq "yes") {  
                open (FILE, ">$filetoopen");  
                    flock (FILE, 2);  
                print FILE "$inmembername|$emailaddress\n";  
                foreach $line (@maildata) {  
                    chomp $line;  
                    print FILE "$line\n";  
                    }  
                close (FILE);  
                }

 
на
           
Код:
$filetoopen = "$ikondir" . "forum$inforum/$intopic.mal";  
            open (FILE, "$filetoopen");  
            @maildata = <FILE>;  
            close (FILE);  
 
            if ($innotify eq "yes") {  
               
            $ok_mail = "";  
            $changemail = "no";  
            foreach $line_m (@maildata) {  
            chomp $line_m;  
            ($nick_m,$mail_m) = split(/\|/,$line_m);  
            if (($inmembername eq $nick_m) && ($mail_m eq $emailaddress)) {$ok_mail = "1"; $changemail = "no"; last;}  
            if (($inmembername eq $nick_m) && ($mail_m ne $emailaddress)) {$changemail = "yes"; last;}  
            } #end foreach  
            if (!$ok_mail) {  
            open (FILE, ">$filetoopen");  
            flock (FILE, 2);  
            if ($changemail eq "no") {  
            print FILE "$inmembername|$emailaddress\n";  
            foreach $line (@maildata) {  
            print FILE "$line";  
            }  
            }  
            else {  
            foreach $line (@maildata) {  
            chomp $line;  
            ($nick_m,$mail_m) = split(/\|/,$line);  
             if ($nick_m eq $inmembername) {print FILE "$inmembername|$emailaddress\n";}  
             else {print FILE "$line\n";}  
             }  
             }  
             close (FILE);  
             }  
             } #end if $innotify
 
 

Всего записей: 18 | Зарегистр. 04-12-2002 | Отправлено: 07:18 11-06-2003 | Исправлено: Xnom, 00:38 26-06-2003
Shurik



Главком. флейма
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Xnom

Код:
if (($inmembername eq $nick_m)&&("$mail_m" eq "$emailaddress")) {$ok_mail = "1"}  

я бы еще last; вписал туда, ибо мы нашли дубль и зачем нам дальше искать?
 
Xnom, а ты код хоть проверял? Вот вижу невооруженным глазом, что скрипт работать-то не будет:

Код:
if (($inmembername eq $nick_m)&&("$mail_m" eq "$emailaddress")) {$ok_mail = "1";}  

; не хватает. Вот народ попарился бы.
Кстати, интересно, а зачем чомпить $line и потом писать \n ? Кто-нибудь скажет мне?
 
И еще. Допустим есть такой файл:
member1|mail1
member2|mail2
member3|mail3
 
member2 меняет свое мыло, твой кусок че делает?
видит, что дублей нет (т.к. мыло-то другое) и вписывает мембера с новым мылом плюс полностью пишет @maildata, в том числе member2|mail2, где mail2 - старое мыло. вот
кстати, код можно чуть-чуть сократить и улучшить тогда уж:
 

Код:
 
if ($innotify eq "yes") {  
             
$ok_mail = "";  
$changemail = "no";
foreach $line_m (@maildata) {  
chomp $line_m;  
($nick_m,$mail_m) = split(/\|/,$line_m);  
if (($inmembername eq $nick_m) && ($mail_m eq $emailaddress)) {$ok_mail = "1"; $changemail = "no"; last;}  
if (($inmembername eq $nick_m) && ($mail_m ne $emailaddress)) {$changemail = "yes"; last;}
} #end foreach  
if (!$ok_mail) {  
open (FILE, ">$filetoopen");  
flock (FILE, 2);  
if ($changemail eq "no") {
print FILE "$inmembername|$emailaddress\n";  
foreach $line (@maildata) {  
print FILE "$line";  
}  
}
else {
foreach $line (@maildata) {
chomp $line;
($nick_m,$mail_m) = split(/\|/,$line_m);
if ($nick_m eq $inmembername) {print FILE "$inmembername|$emailaddress\n";}
else {print FILE "$line\n";}
}
}
close (FILE);  
}  
} #end if $innotify  
 

 
в итоге мой хак хака Xnom'a теперь еще вроде все должен делать все как надо. Ессно я еще пока не проверял, но к себе прикручу. Если кто раньше проверит - пишите...
 
Добавлено
тьфу блин... табы не сработали в коде
у меня так все отформатировано было круто...

----------
Metal Bands...

Всего записей: 3171 | Зарегистр. 11-06-2001 | Отправлено: 19:40 14-06-2003
Xnom



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shurik

Цитата:
Xnom, а ты код хоть проверял?

проверял %)

Цитата:
; не хватает. Вот народ попарился бы.

не обязательно если там всего одна строка (одно значение)%)

Цитата:
member2 меняет свое мыло, твой кусок че делает?  

добавляет новую пару - "ник/мыло" %)
 

Цитата:
в итоге мой хак хака Xnom'a  

маладца. я бы до такого не додумался %)
 
Добавлено
и сразу первый фикс к хаку хака Xnom'а

Код:
else {  
foreach $line (@maildata) {  
chomp $line;  
($nick_m,$mail_m) = split(/\|/,$line_m);  
if ($nick_m eq $inmembername) {print FILE "$inmembername|$emailaddress\n";}  
else {print FILE "$line\n";}  
}  
}  
close (FILE);

убрать то, что выделено красным

Всего записей: 778 | Зарегистр. 09-10-2002 | Отправлено: 21:10 14-06-2003 | Исправлено: Xnom, 21:12 14-06-2003
Shurik



Главком. флейма
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Xnom

Цитата:
маладца. я бы до такого не додумался %)  



Цитата:
и сразу первый фикс к хаку хака Xnom'а  

мы щас так и будем фиксить и хакать свои поделки.

Цитата:
убрать то, что выделено красным  

издержки скриптописательства.

----------
Metal Bands...

Всего записей: 3171 | Зарегистр. 11-06-2001 | Отправлено: 12:03 15-06-2003
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Дубли писем при подписке на топики


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru