Кусок PHP кода, голосовалка PHP: <?php if ($CURUSER){ //global $LANG; // Get current poll $query = 'SELECT * FROM polls ORDER BY added DESC LIMIT 1'; $arr = cache($query, $index_recache_time); $arr = $arr[0]; $pollid = $arr["id"]; $userid = $CURUSER["id"]; $question = $arr["question"]; $o = array($arr["option0"], $arr["option1"], $arr["option2"], $arr["option3"], $arr["option4"], $arr["option5"], $arr["option6"], $arr["option7"], $arr["option8"], $arr["option9"], $arr["option10"], $arr["option11"], $arr["option12"], $arr["option13"], $arr["option14"], $arr["option15"], $arr["option16"], $arr["option17"], $arr["option18"], $arr["option19"], $arr["option20"], $arr["option21"], $arr["option22"], $arr["option23"], $arr["option24"], $arr["option25"], $arr["option26"], $arr["option27"], $arr["option28"], $arr["option29"], $arr["option30"], $arr["option31"], $arr["option32"], $arr["option33"], $arr["option34"], $arr["option35"], $arr["option36"], $arr["option37"], $arr["option38"], $arr["option39"], $arr["option40"], $arr["option41"], $arr["option42"], $arr["option43"], $arr["option44"], $arr["option45"], $arr["option46"], $arr["option47"], $arr["option48"], $arr["option49"], $arr["option50"], $arr["option51"], $arr["option52"], $arr["option53"], $arr["option54"], $arr["option55"], $arr["option56"], $arr["option57"], $arr["option58"], $arr["option59"], $arr["option60"], $arr["option61"], $arr["option62"], $arr["option63"], $arr["option64"], $arr["option65"], $arr["option66"], $arr["option67"], $arr["option68"], $arr["option69"], $arr["option70"], $arr["option71"], $arr["option72"], $arr["option73"], $arr["option74"], $arr["option75"], $arr["option76"], $arr["option77"], $arr["option78"], $arr["option79"], $arr["option80"], $arr["option81"], $arr["option82"], $arr["option83"], $arr["option84"], $arr["option85"], $arr["option86"], $arr["option87"], $arr["option88"], $arr["option89"], $arr["option90"], $arr["option91"], $arr["option92"], $arr["option93"], $arr["option94"], $arr["option95"], $arr["option96"], $arr["option97"], $arr["option98"], $arr["option99"]); // Check if user has already voted $query = "SELECT * FROM pollanswers WHERE pollid=$pollid && userid=$userid"; $res = mysql_query($query); $arr2 = mysql_fetch_assoc($res); //$arr2 = cache($query, $index_recache_time); //$arr2 = $arr[0]; print("<h2>" . $LANG['in_poll']); if (get_user_class() >= UC_MODERATOR){ print("<font class=small>"); print(" - [<a class=altlink href=makepoll.php?returnto=main><b>New</b></a>]\n"); print(" - [<a class=altlink href=makepoll.php?action=edit&pollid=$arr[id]&returnto=main><b>Edit</b></a>]\n"); print(" - [<a class=altlink href=polls.php?action=delete&pollid=$arr[id]&returnto=main><b>Delete</b></a>]"); print("</font>"); } print("</h2>\n"); print("<table width=100% border=1 cellspacing=0 cellpadding=10><tr><td align=center>\n"); print("<table class=main border=1 cellspacing=0 cellpadding=0><tr><td class=text>"); print("<p align=center><b>$question</b></p>\n"); $voted = $arr2; if ($voted){ // display results if ($arr["selection"]) $uservote = $arr["selection"]; else $uservote = -1; // we reserve 255 for blank vote. $query = 'SELECT selection FROM pollanswers WHERE pollid = '.(int)$pollid.' AND selection < 101'; $res = cache($query); $tvotes = count($res); $vs = array(); // array of $os = array(); // Count votes for ($i = 0; $i < $tvotes; $i++){ $vs[$res[$i]['selection']] += 1; } //while ($arr2 = mysql_fetch_row($res)) //$vs[$arr2[0]] += 1; reset($o); for ($i = 0; $i < count($o); ++$i){ if ($o[$i]) $os[$i] = array($vs[$i], $o[$i]); } // now os is an array like this: array(array(123, "Option 1"), array(45, "Option 2")) if ($arr["sort"] == "yes") usort($os, 'srt'); print("<table class=main width=100% border=0 cellspacing=0 cellpadding=0>\n"); $i = 0; while ($a = $os[$i]){ if ($i == $uservote) $a[1] .= " *"; if ($tvotes == 0) $p = 0; else $p = round($a[0] / $tvotes * 100); if ($i % 2) $c = " class=embedded"; else $c = " class=pollalt"; print("<tr><td width=1%$c><nobr>" . $a[1] . " </nobr></td><td width=98%$c>" . "<img src=/pic/bar_left.gif><img src=/pic/bar.gif height=9 width=" . ($p * 3) . "><img src=/pic/bar_right.gif> $p%</td>".(isset($CURUSER['class']) && $CURUSER['class'] > UC_VIP ? "<td class=embedded align=right> $a[0]</td>" : '')."</tr>\n"); ++$i; } print("</table>\n"); $tvotes = number_format($tvotes); print("<p align=center>Votes: $tvotes</p>\n"); }else{ print("<form method=post action=index.php>\n"); $i = 0; while ($a = $o[$i]) { print('<input type="radio" name="choice" value="'.$i.'">'.$a.'<br>'); ++$i; } print("<br>"); // print("<input type=radio name=choice value=255>Blank vote (a.k.a. \"I just want to see the results!\")<br>\n"); print("<p align=center><input type=submit value='Vote!' class=btn></p>"); } print '</td></tr></table>'; if ($voted){ print("<p align=center><a href=polls.php>Previous polls</a></p>\n"); } print '</td></tr></table>'; } Вот после таких дебилов приходиться переделывать коды, модифицировать и добавлять функционал. Вот щас сижу и думаю, как сделать эту голосовалку принудительную, типа пока не проголосуешь, дальше никуда не пойдёшь, так, что бы оно не подвесило сайт....
Сессии используются? Может быть, при загрузке страницы с этой штукой организовать проверку, голосовал ли пользователь, и в зависимости от этого отображать либо форму, либо то, что должно быть дальше? При голосовании, естественно, перегружать страницу, т.е. в форме target != "_blank". Или я что-то совсем не то вкуриваю сейчас?
Вы в код глянте, на его ужастность и кривость. Как сделать надо я знаю. Эта голосовалка щас на главной висит. Мне её надо сделать так, что при проверке залогинен ли юзер, проверялось, а не голосовал ли он (это происходит каждый refresh, т.к. авторизация на куках и каждый раз проверяеться залогинен ли юзер), и если не голосовал, показать только голосовалку, пока не проголосует.
Где-то я уже говорил (но не тебе) радуйся что у тебя там хотя бы "LIMIT" в запросах стоит (т.е тот кто писал этот скрипт знает что это такое) есть люди которые этого не знают. Однако пишут "программы" (речь не только а РНР а вообще о программистах с которыми я работал) ошибки в которых могли бы стоить людям жизни (и не стоили чисто по счастливой случайности) Вот такие дела...
Мне щас эту кашу надо считай по косточкам разобрать и написать с 0. Что-бы в другом месте я мог её нормально внедрить...
Да, чувствую, если бы голосовалка, не дай Бог, была организована на текстовиках, тема бы называлась совершенно иначе...
Вот во что я смог превратить этот кусок кода PHP: <?php if ($CURUSER){ $query = 'SELECT * FROM polls ORDER BY added DESC LIMIT 1'; $arr = cache_row($query, $index_recache_time); $pollid = $arr['id']; $userid = $CURUSER['id']; $question = $arr['question']; $tvotes = $arr['total_votes']; $o = array($arr['option0'], $arr['option1'], $arr['option2'], $arr['option3'], $arr['option4'], $arr['option5'], $arr['option6'], $arr['option7'], $arr['option8'], $arr['option9'], $arr['option10'], $arr['option11'], $arr['option12'], $arr['option13'], $arr['option14'], $arr['option15'], $arr['option16'], $arr['option17'], $arr['option18'], $arr['option19'], $arr['option20'], $arr['option21'], $arr['option22'], $arr['option23'], $arr['option24'], $arr['option25'], $arr['option26'], $arr['option27'], $arr['option28'], $arr['option29'], $arr['option30'], $arr['option31'], $arr['option32'], $arr['option33'], $arr['option34'], $arr['option35'], $arr['option36'], $arr['option37'], $arr['option38'], $arr['option39'], $arr['option40'], $arr['option41'], $arr['option42'], $arr['option43'], $arr['option44'], $arr['option45'], $arr['option46'], $arr['option47'], $arr['option48'], $arr['option49'], $arr['option50'], $arr['option51'], $arr['option52'], $arr['option53'], $arr['option54'], $arr['option55'], $arr['option56'], $arr['option57'], $arr['option58'], $arr['option59'], $arr['option60'], $arr['option61'], $arr['option62'], $arr['option63'], $arr['option64'], $arr['option65'], $arr['option66'], $arr['option67'], $arr['option68'], $arr['option69'], $arr['option70'], $arr['option71'], $arr['option72'], $arr['option73'], $arr['option74'], $arr['option75'], $arr['option76'], $arr['option77'], $arr['option78'], $arr['option79'], $arr['option80'], $arr['option81'], $arr['option82'], $arr['option83'], $arr['option84'], $arr['option85'], $arr['option86'], $arr['option87'], $arr['option88'], $arr['option89'], $arr['option90'], $arr['option91'], $arr['option92'], $arr['option93'], $arr['option94'], $arr['option95'], $arr['option96'], $arr['option97'], $arr['option98'], $arr['option99']); // Check if user has already voted $query = 'SELECT * FROM pollanswers WHERE pollid = '.$pollid.' AND userid = '.$CURUSER['id']; $res = mysql_query($query); $arr2 = mysql_fetch_assoc($res); print('<h2>'.$LANG['in_poll']); if (get_user_class() >= UC_MODERATOR){ print('<font class=small> - [<a class="altlink" href="makepoll.php?returnto=main"><b>New</b></a>] - [<a class="altlink" href="makepoll.php?action=edit&pollid='.$arr['id'].'&returnto=main"><b>Edit</b></a>] - [<a class="altlink" href="polls.php?action=delete&pollid='.$arr['id'].'&returnto=main"><b>Delete</b></a>] </font>'); } print('</h2> <table width="100%" border="1" cellspacing="0" cellpadding="10"><tr><td align="center"> <table class="main" border="1" cellspacing="0" cellpadding="0"><tr><td class="text"> <p align="center"><b>'.$question.'</b></p>'); $voted = $arr2; if ($voted){ // we reserve 255 for blank vote. if ($arr['sort'] == 'yes'){ $orderby = ' ORDER BY cnt DESC'; }else{ $orderby = ''; } $query = 'SELECT selection, COUNT(id) AS cnt FROM pollanswers WHERE pollid = '.(int)$pollid.' AND selection < 101 GROUP BY selection'.$orderby; $res = cache($query); print("<table class=main width=100% border=0 cellspacing=0 cellpadding=0>\n"); for ($i = 0, $cnt = sizeof($res); $i < $cnt; $i++){ if ($tvotes == 0){ $p = 0; }else{ $p = round($res[$i]['cnt'] / $tvotes * 100); } print('<tr> <td width="1%" class="embedded" style="padding-right: 10px;">'.$o[$res[$i]['selection']].'</td> <td width="98%" class="embedded"><img src="/pic/bar_left.gif"><img src="/pic/bar.gif" height="9" width="'.($p * 3).'"><img src="/pic/bar_right.gif"> '.$p.'%</td>' .(isset($CURUSER['class']) && $CURUSER['class'] > UC_VIP ? '<td class="embedded" align="right"> '.$res[$i]['cnt'].'</td>' : ''). '</tr>'); } print("</table>\n"); print("<p align=center>Votes: $tvotes</p>\n"); }else{ print("<form method=post action=index.php>\n"); for ($i = 0, $cnt = sizeof($o); $i < $cnt; $i++){ if (!empty($o[$i])){ print('<input type="radio" name="choice" value="'.$i.'">'.$o[$i].'<br>'); } } print('<p align="center"><input type="submit" value="Vote!" class="btn"></p></form>'); } print '</td></tr></table>'; if ($voted){ print('<p align="center"><a href="polls.php">Previous polls</a></p>'); } print '</td></tr></table>'; }
Psih Собственно у меня притензии только к print, их можно было избежать (код читебельнее был бы) а на счёт всего остального не так и страшно как на прервый взгляд кажется (другое дело что второй раз на это смотреть страшно)
И не говори... Всёравно убралось много лишнего кода и огромный цикл... перебирать масив из 4000-5000 голосов вместо написания правильного запроса было весело... теперь это всё делаеться в разы быстрее
PHP: <?... $o = array($arr['option0'], $arr['option1'],.... ?> По-моему экономичнее было бы написать подобную вещь: PHP: <? for ($i=0;$i<100;$i++) { $index = "option".$i; $o["option"][$i] = $arr[$index]; } ?> Это если $o имеет еще ключи (отличные от option). $arr вроде бы имеет, но желательно поменять на $arr["option"][$i]
это TBDev версии 0.9х, вообщем очень древний уже, т.к. трекер создавался 2.5 года назад. С тех пор он превратился в TBDev Psih's edition, способную выдержать нагрузки раз так в 5 больше минимум Щас это torrenttrader называеться, но это уже совсем другое.
Фуф, всё, добил окончательно. Работает теперь в таком варианте: PHP: <?php $query = 'SELECT * FROM polls ORDER BY added DESC LIMIT 1'; $arr = cache_row($query, 86400, 'current_pool'); $pollid = $arr['id']; $question = $arr['question']; $tvotes = $arr['total_votes']; $o = array($arr['option0'], $arr['option1'], $arr['option2'], $arr['option3'], $arr['option4'], $arr['option5'], $arr['option6'], $arr['option7'], $arr['option8'], $arr['option9'], $arr['option10'], $arr['option11'], $arr['option12'], $arr['option13'], $arr['option14'], $arr['option15'], $arr['option16'], $arr['option17'], $arr['option18'], $arr['option19'], $arr['option20'], $arr['option21'], $arr['option22'], $arr['option23'], $arr['option24'], $arr['option25'], $arr['option26'], $arr['option27'], $arr['option28'], $arr['option29'], $arr['option30'], $arr['option31'], $arr['option32'], $arr['option33'], $arr['option34'], $arr['option35'], $arr['option36'], $arr['option37'], $arr['option38'], $arr['option39'], $arr['option40'], $arr['option41'], $arr['option42'], $arr['option43'], $arr['option44'], $arr['option45'], $arr['option46'], $arr['option47'], $arr['option48'], $arr['option49'], $arr['option50'], $arr['option51'], $arr['option52'], $arr['option53'], $arr['option54'], $arr['option55'], $arr['option56'], $arr['option57'], $arr['option58'], $arr['option59'], $arr['option60'], $arr['option61'], $arr['option62'], $arr['option63'], $arr['option64'], $arr['option65'], $arr['option66'], $arr['option67'], $arr['option68'], $arr['option69'], $arr['option70'], $arr['option71'], $arr['option72'], $arr['option73'], $arr['option74'], $arr['option75'], $arr['option76'], $arr['option77'], $arr['option78'], $arr['option79'], $arr['option80'], $arr['option81'], $arr['option82'], $arr['option83'], $arr['option84'], $arr['option85'], $arr['option86'], $arr['option87'], $arr['option88'], $arr['option89'], $arr['option90'], $arr['option91'], $arr['option92'], $arr['option93'], $arr['option94'], $arr['option95'], $arr['option96'], $arr['option97'], $arr['option98'], $arr['option99']); // Check if user has already voted print('<h2>'.$LANG['in_poll']); if (get_user_class() >= UC_MODERATOR){ print('<font class=small> - [<a class="altlink" href="makepoll.php?returnto=main"><b>New</b></a>] - [<a class="altlink" href="makepoll.php?action=edit&pollid='.$arr['id'].'&returnto=main"><b>Edit</b></a>] - [<a class="altlink" href="polls.php?action=delete&pollid='.$arr['id'].'&returnto=main"><b>Delete</b></a>] </font>'); } print('</h2> <table width="100%" border="1" cellspacing="0" cellpadding="10"><tr><td align="center"> <table class="main" border="1" cellspacing="0" cellpadding="0"><tr><td class="text"> <p align="center"><b>'.$question.'</b></p>'); if ($CURUSER['poll_voted']){ // we reserve 255 for blank vote. if ($arr['sort'] == 'yes'){ $orderby = ' ORDER BY cnt DESC'; }else{ $orderby = ''; } $query = 'SELECT selection, COUNT(id) AS cnt FROM pollanswers WHERE pollid = '.(int)$pollid.' AND selection < 101 GROUP BY selection'.$orderby; $res = cache($query); print("<table class=main width=100% border=0 cellspacing=0 cellpadding=0>\n"); for ($i = 0, $cnt = sizeof($res); $i < $cnt; $i++){ if ($tvotes > 0){ $p = round($res[$i]['cnt'] / $tvotes * 100); }else{ $p = 0; } print('<tr> <td width="1%" class="embedded" style="padding-right: 10px;">'.$o[$res[$i]['selection']].'</td> <td width="98%" class="embedded"><img src="/pic/bar_left.gif"><img src="/pic/bar.gif" height="9" width="'.($p * 3).'"><img src="/pic/bar_right.gif"> '.$p.'%</td>' .(isset($CURUSER['class']) && $CURUSER['class'] > UC_VIP ? '<td class="embedded" align="right"> '.$res[$i]['cnt'].'</td>' : ''). '</tr>'); } print('</table> <p align=center>Votes: '.$tvotes.'</p>'); }else{ print("<form method=post action=index.php>\n"); for ($i = 0, $cnt = sizeof($o); $i < $cnt; $i++){ if (!empty($o[$i])){ print('<input type="radio" name="choice" value="'.$i.'">'.$o[$i].'<br>'); } } print('<p align="center"><input type="submit" value="Vote!" class="btn"></p></form>'); } print '</td></tr></table>'; if ($CURUSER['poll_voted']){ print('<p align="center"><a href="polls.php">Previous polls</a></p>'); } print '</td></tr></table>';
Вот ещё таких "гениальных" кусков кода откопаешь, исправишь, и будет больше раз в 6 и даже 7 (если не 99)
Ну я многое уже подправил. Это ещё мелочи по сравнению с тем, что мне приходилось править. БЫл скрипт, о отображал список юзеров. 100 штук на страницу. Так в цикле делался запрос что-бы выбрать имя фаила флага страны с которой юзер. Это абздец. 1 страница, 101 запрос к базе. Ебанько делали скрипты... И не один такой скрипт был, довольно много.
У нас на XTG парниша сделал список последних 10-ти созданных топиков из рнрВВ на страницу сайта. Так он умудрился выбирать ВСЕ топики из базы, (их там слава богу было тогда вроде не больше 200) и на каждый топик прилепил по запросу на то доступный ли это топик для чтения гостями. (слава богу сразу же сказал об этом мне и попросил поправить если что не так)
Проголосуйте и вы сможете нормально зайти на сайт! Make your vote and you will be able to enter site! Nobalsoiet un jus varesiet ieiet saita! :shock: :twisted: я даж незнаю никого тут )) буду гадать 8)
Я тоже там только недавно Cлава богу в списке мой тёзка есть, подумаю, может за него и проголосую, хотя кто знает, может это жлоб какой нибудь типа меня
Нет, потому что это не первый vote и система работает. Заменить на другое нельзя было. Да и не целесообразно, поскольку мы делаем свой новый движок, на котором это уже сделано НОРМАЛЬНО