[EF IV] Ile punktów pozostało do nowej rangi w wob_rank_system
|
MEZmaster |
Dodany dnia 11.06.2008 12:52:11
|
Przedszkolak
Postów: 54
Data rejestracji: 16.02.2008 22:53
|
Chciał bym dodać pod obrazkiem rangi informację ile % postów napisano już w tej randze. Przykładowo, gdy ranga zaczyna się od 300 postów i idzie do 399, to wskaźnik miał by pokazywać przy 300 postach usera 0% i z każdym postem aktualizować.
Pewnie bym to zrobił, ale nie znam zmiennych stosowanych w pliku func, które będą potrzebne do tego.
Według mnie potrzebna była by ilość postów usera, ile postów wymagane jest do danej rangi i ile do kolejnej rangi. Wtedy już wiadomo jak to miało by liczyć. Problem w tym, że nie wiem jakie zmienne za co odpowiadają, a i ze składnią w php u mnie średnio jest.
Mógł by ktoś pomóc?
PW od moderatora:
- Przeniesienie tematu - Pieka 11.06 - 13:14
Edytowane przez Pieka dnia 11.06.2008 13:13:27
|
|
|
|
Wścibski Gość |
Dodany dnia 15.11.2024 07:58:21
|
Pan Kontekstualny
Postów: n^x
Data rejestracji: Zawsze
|
|
IP: localhost |
|
|
kefirek |
Dodany dnia 12.06.2008 07:43:30
|
Zaawansowany
Postów: 1191 Pomógł: 418 Ostrzeżeń: 1
v6.00.xxx Data rejestracji: 06.04.2008 21:59
|
Obliczenia już chyba sobie zrobisz sam to nic trudnego
$query = sprintf('SELECT * FROM %s WHERE posts >= %s ORDER BY posts ASC LIMIT 2;', $db_prefix.'forumrang', $userdata['user_posts']);
$result = dbquery($query);
$row = dbarray($result);
$currentRank = $row['names']; //aktualna ranga uzytkowniaka
$currentRankLimit = $row['posts']; //limit aktualnej rangi uzytkownika
$row = dbarray($result);
$nextRank = $row['names']; //nastepna ranga (do której uzytkownik dąży)
$nextRankLimit = $row['posts']; //i jej limit
//twoje obliczenia
Edytowane przez kefirek dnia 12.06.2008 07:47:21
|
|
|
|
MEZmaster |
Dodany dnia 12.06.2008 17:15:10
|
Przedszkolak
Postów: 54
Data rejestracji: 16.02.2008 22:53
|
Wstawiłem to, ale ani $nextRankLimit, ani $currentRankLimit nie zwracają wartości.
Kazałem wypisać ich wartość i nic nie zwróciło
Za to, żeby było ciekawie, to na forum wyświetla mi się "Something is wrong in your syntax obok 'ORDER BY posts ASC LIMIT 2' w linii 1Something is wrong in your syntax obok 'ORDER BY posts ASC LIMIT 2' w linii 1Something is wrong in your syntax obok 'ORDER BY posts ASC LIMIT 2' w linii 1"
Sam kod func.php wygląda tak
<?
function getRank($id_user) {
$udatat = dbquery("SELECT * FROM ".DB_PREFIX."users WHERE user_id='".$id_user."' LIMIT 1");
$udata = dbarray($udatat);
$u_post = $udata['user_posts'];
if($udata['user_groups'] != '' OR $udata['user_level'] == '102' OR $udata['user_level'] == '103'){
$extrarang = dbquery("SELECT * FROM ".DB_PREFIX."forumrang_extra WHERE typ=".$udata['user_level']." OR typ='".str_replace(".", "' OR typ='", substr($udata['user_groups'], 1))."' LIMIT 1");
$extrarangab = dbarray($extrarang);
$rows = dbrows($extrarang);
if ($rows != 0) {
$rangret = "".$extrarangab['name']."<br>";
for($q=1;$q <= $extrarangab['anz'];$q++){
$rangret .= "<img border='0' src=".INFUSIONS."wob_rank_system/images/".$extrarangab['bild'].">";
}
$rangret .= "<br>";
}
else{
$res = dbquery("SELECT * FROM ".DB_PREFIX."forumrang WHERE posts >= '".$u_post."' ORDER BY posts ASC LIMIT 1");
$rank = dbarray($res);
$bil = dbquery("SELECT * FROM ".DB_PREFIX."forumrang_bilder WHERE id='".$rank['id']."' LIMIT 1");
$bild = dbarray($bil);
$rangret = "".$rank['rank']."<br>";
for($q=1;$q <= $bild['anz'];$q++){
$rangret .= "<img border='0' src=".INFUSIONS."wob_rank_system/images/".$bild['bild'].">";
}
$rangret .= "<br>";
}
}
else{
$res = dbquery("SELECT * FROM ".DB_PREFIX."forumrang WHERE posts >= '".$u_post."' ORDER BY posts ASC LIMIT 1");
$rank = dbarray($res);
$bil = dbquery("SELECT * FROM ".DB_PREFIX."forumrang_bilder WHERE id='".$rank['id']."' LIMIT 1");
$bild = dbarray($bil);
$rangret = "".$rank['rank']."<br>";
for($q=1;$q <= $bild['anz'];$q++){
$rangret .= "<img border='0' src=".INFUSIONS."wob_rank_system/images/".$bild['bild']." >";
}
[color=orange]$query = sprintf('SELECT * FROM %s WHERE posts >= %s ORDER BY posts ASC LIMIT 2;', $db_prefix.'forumrang', $userdata['user_posts']);
$result = dbquery($query);
$row = dbarray($result);
$currentRank = $row['names']; //aktualna ranga uzytkowniaka
$currentRankLimit = $row['posts']; //limit aktualnej rangi uzytkownika
$row = dbarray($result);
$nextRank = $row['names']; //nastepna ranga (do której uzytkownik dąży)
$nextRankLimit = $row['posts']; //i jej limit
$jeden = $data['user_posts'] - $currentRankLimit;
$dwa = $nextRankLimit - $currentRankLimit;
$proc = ceil($dwa / $jeden);
$proc = $proc / 10;[/color]
$rangret .= "[color=orange]<br>".$proc."% rangi spełnione...[/color]<br>";
}
return $rangret;
}
?>
Na pomarańczowo jest to, co wstawiłem w kod.
W czym tkwi błąd? |
|
|
|
kefirek |
Dodany dnia 12.06.2008 19:50:19
|
Zaawansowany
Postów: 1191 Pomógł: 418 Ostrzeżeń: 1
v6.00.xxx Data rejestracji: 06.04.2008 21:59
|
Po co ty się upierasz by wstawić to do pliku func.php chcesz by to wyświetlało ci się na forum to wstaw to w pliku viewthread.php po
echo getRank($data['user_id']);
$query = sprintf('SELECT * FROM %s WHERE posts >= %s ORDER BY posts ASC LIMIT 1;', $db_prefix.'forumrang', $userdata['user_posts']);
$result = dbquery($query);
$row = dbarray($result);
$currentRank = $row['names'];
$currentRankLimit = $row['posts'];
$wynik = $userdata['user_posts'] * 100;
$wynik1 = $wynik / $currentRankLimit;
echo "Masz $wynik1%";
|
|
|
|
MEZmaster |
Dodany dnia 12.06.2008 23:41:55
|
Przedszkolak
Postów: 54
Data rejestracji: 16.02.2008 22:53
|
Chciałem tam wstawić, ponieważ to ma być wyświetlane wyłącznie gdy user nie będzie należał do grupy specjalnej, czyli będzie miał normalną rangę. Administratorzy i inny specjalni nie będą mieli innych rang tylko cały czas taką samą. Akurat w func.php jest taka zależność wprowadzona i chciałem tam to dodać.
Spróbuję dodać tego ifa do viewthreat. Po przeróbce ten kod działa dobrze. Miał pokazywać ile % z danej rangi, a nie z całości, ale to nie problem. Jak sprawdzę, to napiszę jak to wyszło. Teraz serwer mi siadł, więc nic nie zrobię.
//
Wstawiłem takie coś
$qdatat = dbquery("SELECT * FROM ".DB_PREFIX."users WHERE user_id='".$data['user_id']."' LIMIT 1");
$qdata = dbarray($qdatat);
if($qdata['user_groups'] != '' OR $qdata['user_level'] == '102' OR $qdata['user_level'] == '103') {
} else {
$que = sprintf('SELECT * FROM %s WHERE posts >= %s ORDER BY posts ASC LIMIT 1;', $db_prefix.'forumrang', $qdata['user_posts']);
$rez = dbquery($que);
$raw = dbarray($rez);
$currl = $raw['posts'];
$raw = dbarray($rez);
$jeden = $qdata['user_posts'] - $currl;
$nextrl = $raw['posts'];
$jeden = $jeden * 1000;
$dwa = $nextrl - $currl;
$proc = ceil($jeden / $dwa);
$proc = $proc / 10;
echo "$proc% rangi spełnione...<br>";
}
Już prawie ładnie działa, nie koliduje z innymi częściami forum, ale źle liczy.
Kazałem wypisać kilka wartości i kolejno
$qdata['user_posts'] - wypisuje dobrą wartość (ilość postów usera)
$currl - zwraca początek kolejnej rangi, więc chyba powinien to być nextrl (nextranglimit)
$nextrl - nic nie zwraca
$jeden i $dwa zwracają odpowiednie wyniki dla błędnych $currl i $nexrl, czyli ujemne liczby.
Jakiś pomysł?
Edytowane przez MEZmaster dnia 13.06.2008 13:40:28
|
|
|
|
wlodekp |
Dodany dnia 13.06.2008 09:13:06
|
Weteran
Postów: 3101 Pomógł: 29
Data rejestracji: 21.05.2005 22:27
|
Przynajmiej w kodzie, który widzę nie mogę się doszukać ile to jest $nextrl?
|
|
|
|
MEZmaster |
Dodany dnia 13.06.2008 13:45:59
|
Przedszkolak
Postów: 54
Data rejestracji: 16.02.2008 22:53
|
Myślałem, że się pomyliłem, ale dobrze jest. Miałem wstawiony $nextrl i nic nie zwraca. nextrl to Twój nextrangelimit.
Jak można by cofnąć o jeden w tył te zmienne? nextrl powinno wyświetlać to, co w tej chwili currl, a currl powinno zwrócić początek danej rangi, czyli inaczej limit poprzedniej rangi + 1. |
|
|
|
wlodekp |
Dodany dnia 13.06.2008 13:55:24
|
Weteran
Postów: 3101 Pomógł: 29
Data rejestracji: 21.05.2005 22:27
|
Next co oznacza, to ja doskonale wiem, pytam się jednak gdzie jest zadeklarowana wartość zmiennej $next w kodzie skoro ona ma zadziałać?
|
|
|
|
MEZmaster |
Dodany dnia 13.06.2008 15:03:41
|
Przedszkolak
Postów: 54
Data rejestracji: 16.02.2008 22:53
|
Chyba wyraźnie pisze $nextrl = $raw['posts'];
przesunąłem to w linijkach, żeby było czytelniej.
$qdatat = dbquery("SELECT * FROM ".DB_PREFIX."users WHERE user_id='".$data['user_id']."' LIMIT 1");
$qdata = dbarray($qdatat);
if($qdata['user_groups'] != '' OR $qdata['user_level'] == '102' OR $qdata['user_level'] == '103') {
} else {
$que = sprintf('SELECT * FROM %s WHERE posts >= %s ORDER BY posts ASC LIMIT 1;', $db_prefix.'forumrang', $qdata['user_posts']);
$rez = dbquery($que);
$raw = dbarray($rez);
$currl = $raw['posts'];
$raw = dbarray($rez);
$nextrl = $raw['posts'];
$jeden = $qdata['user_posts'] - $currl;
$jeden = $jeden * 1000;
$dwa = $nextrl - $currl;
$proc = ceil($jeden / $dwa);
$proc = $proc / 10;
echo "$proc% rangi spełnione...<br>";
}
|
|
|
|
wlodekp |
Dodany dnia 13.06.2008 16:02:49
|
Weteran
Postów: 3101 Pomógł: 29
Data rejestracji: 21.05.2005 22:27
|
Faktycznie była moje niedopatrzenie, przepraszam.
|
|
|
|
MEZmaster |
Dodany dnia 13.06.2008 16:52:29
|
Przedszkolak
Postów: 54
Data rejestracji: 16.02.2008 22:53
|
Więc jak, jakieś pomysły?
Widzę, że dobrze kombinujesz, trzeba by tylko jakoś przestawić te zmienne jeden stopień w dół, aby nextrl wskazywał to, co currl, a currl wskazywał na limit poprzedniej rangi. Ja coś kombinowałem, ale nie znam zasady działania. Co prawda trochę podobne do cpp, ale nie do końca wiem co za co odpowiada.
Ewentualnie mógł bym ręcznie zrobić zależności zgodnie z punktacją, ale było by 15 rang do zrobienia i jeszcze możliwość zmiany w przyszłości xŁ
// W sumie zrobiłem to tak.
$qdatat = dbquery("SELECT * FROM ".DB_PREFIX."users WHERE user_id='".$data['user_id']."' LIMIT 1");
$qdata = dbarray($qdatat);
if($qdata['user_groups'] != '' OR $qdata['user_level'] == '102' OR $qdata['user_level'] == '103' OR $qdata['user_posts'] > '10000') {
} else {
$que = sprintf('SELECT * FROM %s WHERE posts >= %s ORDER BY posts ASC LIMIT 1;', $db_prefix.'forumrang', $qdata['user_posts']);
$rez = dbquery($que);
$raw = dbarray($rez);
$nextrl = $raw['posts'];
if ($nextrl == '5') {
$currl = '1';
} elseif ($nextrl == '15') {
$currl = '6';
} elseif ($nextrl == '39') {
$currl = '16';
} elseif ($nextrl == '99') {
$currl = '40';
} elseif ($nextrl == '199') {
$currl = '100';
} elseif ($nextrl == '499') {
$currl = '200';
} elseif ($nextrl == '899') {
$currl = '500';
} elseif ($nextrl == '1399') {
$currl = '900';
} elseif ($nextrl == '1999') {
$currl = '1400';
} elseif ($nextrl == '2999') {
$currl = '2000';
} elseif ($nextrl == '3999') {
$currl = '3000';
} elseif ($nextrl == '4999') {
$currl = '4000';
} elseif ($nextrl == '6499') {
$currl = '5000';
} elseif ($nextrl == '7999') {
$currl = '6500';
} else {
$currl = '8000';
}
$jeden = $qdata['user_posts'] - $currl;
$jeden = $jeden * 100;
$dwa = $nextrl - $currl;
$proc = floor($jeden / $dwa);
echo "$proc% rangi spełnione...<br>";
}
Główna wada to to, że zadziała u mnie, a inni musieli by wstawić tu wartości własnych rang, ale... Da się przeżyć. Rangi do 1mln postów, więc i tak nikt nigdy tyle nie będzie u mnie miał.
// Aby czytelniej było zmieniłem na
$qdatat = dbquery("SELECT * FROM ".DB_PREFIX."users WHERE user_id='".$data['user_id']."' LIMIT 1");
$qdata = dbarray($qdatat);
if($qdata['user_groups'] != '' OR $qdata['user_level'] == '102' OR $qdata['user_level'] == '103' OR $qdata['user_posts'] > '10000') {
} else {
$que = sprintf('SELECT * FROM %s WHERE posts >= %s ORDER BY posts ASC LIMIT 1;', $db_prefix.'forumrang', $qdata['user_posts']);
$rez = dbquery($que);
$raw = dbarray($rez);
$nextrl = $raw['posts'];
switch ($nextrl) {
case '5': $currl = '1'; break;
case '15': $currl = '6'; break;
case '39': $currl = '16'; break;
case '99': $currl = '40'; break;
case '199': $currl = '100'; break;
case '499': $currl = '200'; break;
case '899': $currl = '500'; break;
case '1399': $currl = '900'; break;
case '1999': $currl = '1400'; break;
case '2999': $currl = '2000'; break;
case '3999': $currl = '3000'; break;
case '4999': $currl = '4000'; break;
case '6499': $currl = '5000'; break;
case '7999': $currl = '6500'; break;
case '9999': $currl = '8000'; break;
}
$jeden = $qdata['user_posts'] - $currl;
$jeden = $jeden * 100;
$dwa = $nextrl - $currl;
$proc = floor($jeden / $dwa);
echo "$proc% rangi spełnione...<br>";
}
Edytowane przez MEZmaster dnia 13.06.2008 18:35:13
|
|
|