|
[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 25.10.2025 22:55:12
|
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
|
| |
|