Polish Bittorrent Tracker Support

  • Maj 18, 2012, 04:19:50
  • Witamy, Gość
Zaloguj się lub zarejestruj.

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Szukanie zaawansowane  

Aktualności:

Autor Wątek: System piszący na forum o Ankiecie  (Przeczytany 1355 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Kuba1530

  • Gość
System piszący na forum o Ankiecie
« dnia: Sierpień 14, 2008, 11:36:58 »

Mod polega na tym, że jak utworzymy nową ankietę automatycznie tworzy się nowy temat na forum na dyskusję tej ankiety.
Został napisany przez Perss00n, zmodyfikowany przez Piter.
W makepoll.php znajdź:
  mysql_query("INSERT INTO polls VALUES(0" .
", '" . get_date_time() . "'" .
    ", " . sqlesc($question) .
    ", " . sqlesc($option0) .
    ", " . sqlesc($option1) .
    ", " . sqlesc($option2) .
    ", " . sqlesc($option3) .
    ", " . sqlesc($option4) .
    ", " . sqlesc($option5) .
    ", " . sqlesc($option6) .
    ", " . sqlesc($option7) .
    ", " . sqlesc($option8) .
    ", " . sqlesc($option9) .
  ", " . sqlesc($option10) .
", " . sqlesc($option11) .
", " . sqlesc($option12) .
", " . sqlesc($option13) .
", " . sqlesc($option14) .
", " . sqlesc($option15) .
", " . sqlesc($option16) .
", " . sqlesc($option17) .
", " . sqlesc($option18) .
", " . sqlesc($option19) .
    ", " . sqlesc($sort) .
  ")") or sqlerr(__FILE__, __LINE__);
I dodaj pod tym:
            //START
     if ($pollid == "")
     {
       $options = array();
    for ($i = 0; $i < 20; $i++) {
      $option = "option".$i;
      if (!empty($$option))
        $options[] = "[*] ".$$option;
    }
    $forumid = 2; // Twoje ID forum
    mysql_query("INSERT INTO topics (userid, forumid, subject, sticky) VALUES($CURUSER[id], $forumid, ".sqlesc($question).", 'yes')") or sqlerr(__FILE__, __LINE__);
    $topicid = mysql_insert_id() or stderr("Error", "No topic ID returned.");
    $body = sqlesc("[size=4]Pytanie ankiety: [b]".$question."[/b][/size]\n\n\n[size=2]Opcje ankiety:[/size]\n\n".implode("\n", $options));
    mysql_query("INSERT INTO posts (topicid, userid, added, body) VALUES($topicid, $CURUSER[id], '".get_date_time()."', $body)") or sqlerr(__FILE__, __LINE__);
    $res = mysql_query("SELECT id FROM posts WHERE topicid = $topicid ORDER BY id DESC LIMIT 1") or sqlerr(__FILE__, __LINE__);
    $arr = mysql_fetch_row($res) or stderr("Error", "No post found.");
    mysql_query("UPDATE topics SET lastpost = $arr[0] WHERE id = $topicid") or sqlerr(__FILE__, __LINE__);
    }
    //END
Następnie w index.php znajdź:
    print("<p align=center><input type=submit value='Vote!' class=btn></p>");
  }
?>
</td></tr></table>
Dodaj pod tym:
<?php
$res 
mysql_query("SELECT id FROM topics WHERE forumid = 2 ORDER BY id DESC LIMIT 1") or sqlerr();
while (
$arr mysql_fetch_assoc($res))
   {
$topicid $arr["id"];
  }

if (
$voted)
  print(
"<p align=center><font class=small><a class=altlink href=polls.php>Poprzednie ankiety</a>&nbsp;-&nbsp;<a class=altlink href=/forums.php?action=viewtopic&topicid=$topicid>Dyskutuj na temat ankiety
Pamiętaj, aby ustawić $forumid = 2na Twoje ID forum
I koniec ;-)
Zapisane

halfpaddy

  • Średnio zaawansowany
  • ****
  • Reputacja 0
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 85
Odp: System piszący na forum o Ankiecie
« Odpowiedź #1 dnia: Listopad 05, 2008, 11:10:26 »

zabraklo koncowki </a></p>");
Zapisane

kingofspace

  • Początkujący++
  • ***
  • Reputacja 0
  • Offline Offline
  • Wiadomości: 40
Odp: System piszący na forum o Ankiecie
« Odpowiedź #2 dnia: Listopad 05, 2008, 12:02:59 »

gtdzei trza wstukać tę koncówkę ?
Zapisane

kingofspace

  • Początkujący++
  • ***
  • Reputacja 0
  • Offline Offline
  • Wiadomości: 40
Odp: System piszący na forum o Ankiecie
« Odpowiedź #3 dnia: Listopad 05, 2008, 05:56:55 »

aha no oki dzieki działa pieknie   :bry:
Zapisane

MoviesMaster

  • Średnio zaawansowany
  • ****
  • Reputacja 0
  • Offline Offline
  • Wiadomości: 60
  • Użytkownik jest na liście obserwowanychObserwowany
Odp: System piszący na forum o Ankiecie
« Odpowiedź #4 dnia: Marzec 25, 2010, 06:29:51 »

a jak zrobic by pisal to system a nie ten kto zalozyl ankiete?
Zapisane

Pawlik242

  • Początkujący++
  • ***
  • Reputacja 1
  • Offline Offline
  • Wiadomości: 46
Odp: System piszący na forum o Ankiecie
« Odpowiedź #5 dnia: Marzec 25, 2010, 09:32:28 »

mysql_query("INSERT INTO posts  (topicid, userid, added, body) VALUES($topicid, $CURUSER[id],  '".get_date_time()."', $body)") or sqlerr(__FILE__, __LINE__);

Widzisz zapytanie które idzie do bazy??
A widzisz kolumnę userid i odpowiadający jej argument $CURUSER[id] ???
Czyli odpowiedź jest prosta zmień $CURUSER[id] na ID które posiada u ciebie System, dokładnie:

mysql_query("INSERT INTO posts  (topicid, userid, added, body) VALUES($topicid, '1',  '".get_date_time()."', $body)") or sqlerr(__FILE__, __LINE__);
Zmień se '1' na ID twojego systemu  :whistling:

Ech jeszcze jedno, zrób tak samo z tym jak chcesz by autorem nowego topicu z ankietą był System:

mysql_query("INSERT INTO topics  (userid, forumid, subject, sticky) VALUES($CURUSER[id], $forumid,  ".sqlesc($question).", 'yes')") or sqlerr(__FILE__, __LINE__);
Zmień $CURUSER[id] na ID które posiada u ciebie System.

 :bounce:
Zapisane

MoviesMaster

  • Średnio zaawansowany
  • ****
  • Reputacja 0
  • Offline Offline
  • Wiadomości: 60
  • Użytkownik jest na liście obserwowanychObserwowany
Odp: System piszący na forum o Ankiecie
« Odpowiedź #6 dnia: Marzec 25, 2010, 09:55:21 »

dzieki,ale jesli w temacie klikne na system to przekieruje mnei na konto o ID x da rady zrobic tak zeby nie mozna bylo wejsc w ten profil?
Zapisane

Pawlik242

  • Początkujący++
  • ***
  • Reputacja 1
  • Offline Offline
  • Wiadomości: 46
Odp: System piszący na forum o Ankiecie
« Odpowiedź #7 dnia: Marzec 25, 2010, 10:08:56 »

Nie chce mu się szukać ale musisz zagrzebać w skrypcie forum, tam gdzie jest wyświetlanie nazwy Autora Topicu/Postu trzeba dołożyć warunek że jeżeli userid = X to ma wyświetlić jako nazwę System bez linku else wyświetlić normalnie z linkiem.

Oczywiście zakładam że twój System to ID = X
Zaraz może poszukam, zobaczę ;)
Zapisane

Pawlik242

  • Początkujący++
  • ***
  • Reputacja 1
  • Offline Offline
  • Wiadomości: 46
Odp: System piszący na forum o Ankiecie
« Odpowiedź #8 dnia: Marzec 25, 2010, 10:54:40 »

Ok, o ile nie walnę byka to będzie pierwsze:

Znajdź
            $res = mysql_query("SELECT username FROM users WHERE id=$topic_userid") or sqlerr(__FILE__, __LINE__);
            if (mysql_num_rows($res) == 1) {
                $arr = mysql_fetch_assoc($res);
                $lpauthor = "<a href=/userdetails.php?id=$topic_userid>$arr[username][/url]";
            }
            else
                $lpauthor = "unknown[$topic_userid]";

To będzie blokada w wyświetlaniu linku w kolumnie "Ostatni Post".
Zmień na:
            $res = query("SELECT * FROM users WHERE id=$lpuserid",__FILE__, __LINE__,__FUNCTION__);
            if (mysql_num_rows($res) == 1) {
                $arr = mysql_fetch_assoc($res);
                    if ($lpuserid == X) {
                $lpusername = "$arr[username]";
                }
                else {
                $lpusername = "<a href=/userdetails.php?id=$lpuserid>$arr[username][/url]";
                }
            }
            else
                $lpusername = "unknown[$topic_userid]";

Następnie znajdź:

            $res = query("SELECT username FROM users WHERE id=$topic_userid",__FILE__, __LINE__,__FUNCTION__);
            if (mysql_num_rows($res) == 1) {
                $arr = mysql_fetch_assoc($res);
                $lpauthor = "<a href=/userdetails.php?id=$topic_userid>$arr[username][/url]";
            }
            else
                $lpauthor = "unknown[$topic_userid]";

To będzie blokada w wyświetlaniu linka do profilu w kolumnie "Autor"
Zmień na:
            $res = query("SELECT username FROM users WHERE id=$topic_userid",__FILE__, __LINE__,__FUNCTION__);
            if (mysql_num_rows($res) == 1) {
                $arr = mysql_fetch_assoc($res);
                if ($topic_userid == X) {
                $lpauthor = "$arr[username]";
                }
                else {
                $lpauthor = "<a href=/userdetails.php?id=$topic_userid>$arr[username][/url]";
                }
            }
            else
                $lpauthor = "unknown[$topic_userid]";

Następnie znajdź:

            $lastpost = "<nobr>$lastpostdate[br /]" . "przez <a href=/userdetails.php?id=$lastposterid>$lastposter[/url][br /]" . "w <a href=?action=viewtopic&topicid=$lasttopicid&page=p$lastpostid#$lastpostid>$lasttopic[/url]</nobr>";
To będzie blokada w wyświetlaniu linka na głównej stronie forum w kolumnie "Ostatni Post"
Zmień na:

            $lastpost = "<nobr>$lastpostdate[br /]" . "przez " . "$postersys" . "[br /]" . "w <a href=?action=viewtopic&topicid=$lasttopicid&page=p$lastpostid#$lastpostid>$lasttopic[/url]</nobr>";
Oraz przed kodem który zmienisz w powyższym momencie dodaj:

          if ($lastposterid == X) {
                  $postersys = "$lastposter";
                }
                else {
                $postersys = "<a href=/userdetails.php?id=$lastposterid>$lastposter";
                }

No i ostatnie czyli wyświetlanie Linku w Topicu obok lub nad postem (zależy jak kto ma).
Znajdź:
     $by = "<a onMouseOver='show($posterid)' onMouseOut='hide($posterid)' href=/userdetails.php?id=$posterid>$postername[/url]" . ($arr2["donor"] == "yes" ? "<img src=" . "/pic/star.gif alt='Donor'>" : "") . ($arr2["enabled"] == "no" ? "<img src=" . "/pic/disabled.gif alt="This account is disabled" style='margin-left: 2px'>" : ($arr2["warned"] == "yes" ? "<a href=rules.php#warning class=altlink><img src=/pic/warned.gif alt="Warned" border=0>[/url]" : "")) . " ($title)";
Zmień na:

            $by = "<a onMouseOver='show($posterid)' onMouseOut='hide($posterid)' " . " $postersysss " . "[/url]" . ($arr2["donor"] == "yes" ? "<img src=" . "/pic/star.gif alt='Donor'>" : "") . ($arr2["enabled"] == "no" ? "<img src=" . "/pic/disabled.gif alt="This account is disabled" style='margin-left: 2px'>" : ($arr2["warned"] == "yes" ? "<a href=rules.php#warning class=altlink><img src=/pic/warned.gif alt="Warned" border=0>[/url]" : "")) . " ($title)";
Dodaj Nad:

            if ($posterid == X) {
                  $postersysss = "$postername";
                }
                else {
                $postersysss = "href=/userdetails.php?id=$posterid>$postername";
                }

Myślę że to wszystko, uprzedzam że twój kod możne być trochę inny, wszyściutko jak na tacy  :robot:
Aaaa i pozmieniaj se "X" na ID twojego systemu.
Szkoda że ja kiedyś tak nie miałem  :beach:


Szanownie przepraszam administrację za 2 posty pod rząd.
 
Zapisane

MoviesMaster

  • Średnio zaawansowany
  • ****
  • Reputacja 0
  • Offline Offline
  • Wiadomości: 60
  • Użytkownik jest na liście obserwowanychObserwowany
Odp: System piszący na forum o Ankiecie
« Odpowiedź #9 dnia: Marzec 26, 2010, 02:00:23 »

dziekuje Pawlik242,piter co jest zle ?:P
Zapisane

Pawlik242

  • Początkujący++
  • ***
  • Reputacja 1
  • Offline Offline
  • Wiadomości: 46
Odp: System piszący na forum o Ankiecie
« Odpowiedź #10 dnia: Marzec 26, 2010, 04:56:20 »

no właśnie piter co jest źle twoim zdaniem? Na moim forum (localhost) taki sposób działa bo sprawdzałem wczoraj wpisując zamiast X swój ID więc w tym problemu nie widzę.
O składnie chodzi?
O to że warunek będzie sprawdzany przy każdym wyświetleniu ID dla każdej z kolumn?
He to fakt trochę taktów zegara to opierdzieli przy wyświetlaniu lecz jak to powiadają nad optymalnym kodem trzeba samemu pracować bo każdy ma inne wymagania....

Chyba że chciałbyś to wszystko zamienić w jedną funkcję sprawdzającą ID i dopiero ID Systemu odfiltrować żeby to nie było jako link.

Jak dla mnie to jest najszybszy sposób i tyle, dalej nad tym roztrwaniał się nie będę bo dla mnie coś takiego jest niepotrzebne. Wystarczy mi stosowny komunikat dla pliku userdetails.php gdy ktoś chce wyświetlić profil Systemu.

 :salute:
Zapisane

Pawlik242

  • Początkujący++
  • ***
  • Reputacja 1
  • Offline Offline
  • Wiadomości: 46
Odp: System piszący na forum o Ankiecie
« Odpowiedź #11 dnia: Marzec 27, 2010, 08:27:52 »

Pobieranie wszystkiego z bazy to fakt, jest niepotrzebne, funkcja query została zastosowana u mnie na całym trackerze po kombinacjach z replikacją bazy (na pewno wiesz co chciałem uzyskać), poza tym mam do funkcji query przebudowane połączenie z bazą a więc u mnie nic błędów nie tworzy, następnie do funkcji query zrobiłem sobie w stopce SQLdebug a więc widzę wszystkie zapytania które idą do bazy bo optymalizuję kod, dodam też iż zrobiłem se logowanie zapytań se skryptów refresh a więc nic mnie nie ominie w podglądzie tego co idzie do mojej bazy. Poza tym napisałem że moje forum może różnic się od podstawowego, i nie przywiązuje do niego wagi ponieważ jestem w trakcie tworzenia innego skryptu forum, o wiele optymalniejszego bo to co się dzieje w podstawowym to "pożal się Boże" mimo to iż mam je trochę przerobione. Napisałem ze do ostatniego warunku zamiast X ma podać ID swojego systemu a więc warunek będzie spełniany tylko dla jego ID, zresztą jak nie pasuje == to zawsze operator można se zmienić na inny co wiąże się z przerobieniem funkcji, wg swojego uznania.
Nie przemyślałem kwestii ze skoro działa na moim moim localu to nie będzie działać u innych, to fakt, ja nie mam podstawowej wersji postawionej u siebie tylko kopię swojego silnika, dlatego jak chcesz to kasuj.
Zapisane
 

Strona wygenerowana w 0.197 sekund z 23 zapytaniami.