Błędne zliczanie w MOD_USER_STAT
|
kirbi |
Dodany dnia 14.12.2008 16:23:58
|
Przedszkolak
Postów: 29 Ostrzeżeń: 2
Data rejestracji: 30.07.2008 13:17
|
Mam nadzieję, że tym razem ktoś pomoże. Źle wylicza liczbę zarejestrowanych użytkowników wczoraj i w tym tygodniu. Oto kod:
GeSHi: PHP openside("LuDzIe"); //wszystkich userow $userow = dbcount("(user_id)", "users", "user_status<='1'"); echo"<center><b>Użytkowników: ".$userow."</b><br></center>"; //oddzielenie echo"<hr>"; //dzisiaj $result = dbquery("SELECT user_id,user_name, user_joined FROM ".$db_prefix."users ORDER BY user_joined DESC"); $time = time(); $today=0; while($data = dbarray($result)){ $data1 = showdate('%D', $data[user_joined]); $data2 = showdate('%D', $time); if($data1 == $data2) $today++; } echo"<img src='".IMAGES."user/week.gif'> <b>Dzisiaj: ".$today."<br>"; //wczoraj $yday = dbcount("(user_id)", "users", "user_joined >= $time1"); echo"<img src='".IMAGES."user/today.gif'> <b>Wczoraj: ".$yday."<br>"; //w tygodniu $week = dbcount("(user_id)", "users", "user_joined >= $time7"); echo "<b><img src='".IMAGES."user/5.gif'> W tym tygodniu: </b>".$week."<br>"; //oddzielenie echo"<hr>"; //najnowszy user $data = dbarray(dbquery("SELECT user_id,user_name FROM ".$db_prefix."users WHERE user_status='0' ORDER BY user_joined DESC LIMIT 0,1")); echo"<center><b>Najnowszy: <a href='".BASEDIR."profile.php?lookup=".$data['user_id']."' class='side'>".$data['user_name']."</a></b></center>"; closeside();
Zinterpretowano w sekund: 0.047, wykorzystano GeSHi 1.0.8.10
Edytowane przez Pieka dnia 14.12.2008 16:25:05
|
|
|
|
Wścibski Gość |
Dodany dnia 22.12.2024 19:00:56
|
Pan Kontekstualny
Postów: n^x
Data rejestracji: Zawsze
|
|
IP: localhost |
|
|
kefirek |
Dodany dnia 14.12.2008 16:54:53
|
Zaawansowany
Postów: 1191 Pomógł: 418 Ostrzeżeń: 1
v6.00.xxx Data rejestracji: 06.04.2008 21:59
|
Teraz powinno działać:
GeSHi: PHP openside("LuDzIe"); //wszystkich userow $wszystkich = dbcount("(user_id)", DB_USERS.""); //dzis $dziś = dbcount("(user_id)", $db_prefix."users WHERE DATE(FROM_UNIXTIME(user_joined)) = DATE(NOW())"); //wczoraj $wczoraj = dbcount("(user_id)", $db_prefix."users WHERE DATE(FROM_UNIXTIME(user_joined)) = DATE(NOW() - INTERVAL 1 DAY)"); //w tym tygodniu $tydzien = dbcount("(user_id)", $db_prefix."users WHERE WEEKOFYEAR(DATE(FROM_UNIXTIME(user_joined))) = WEEKOFYEAR(DATE(NOW()))"); //najnowszy user $wynik = dbquery("SELECT * FROM ".$db_prefix."users ORDER BY user_joined DESC LIMIT 1"); $r = dbarray($wynik); echo "<table border='0' width='100%' class='small'> <tr> <td class='small'>Wszystkich:</td><td align='right' class='small'>".number_format($wszystkich)."</td></tr> <td class='small'>Dziś:</td><td align='right' class='small'>".number_format($dziś )."</td></tr> <td class='small'>Wczoraj:</td><td align='right' class='small'>".number_format($wczoraj)."</td></tr> <td class='small'>W tym tygodniu:</td><td align='right' class='small'>".number_format($tydzien)."</td></tr> <td class='small'>Najnowszy:</td><td align='right' class='small'><a href='".BASEDIR."profile.php?lookup=".$r['user_id']."' class='side'>".$r['user_name']."</a></td></tr> </table>"; closeside();
Zinterpretowano w sekund: 0.036, wykorzystano GeSHi 1.0.8.10
Edytowane przez kefirek dnia 15.12.2008 21:30:48
|
|
|
|
kirbi |
Dodany dnia 14.12.2008 17:08:08
|
Przedszkolak
Postów: 29 Ostrzeżeń: 2
Data rejestracji: 30.07.2008 13:17
|
Teraz działa prawidłowo tylko jedno zastrzeżenie, przy Dzisiaj wyświetla się 0, a dziś się zarejestrowało przynajmniej 6 osób. |
|
|
|
kefirek |
Dodany dnia 14.12.2008 17:10:39
|
Zaawansowany
Postów: 1191 Pomógł: 418 Ostrzeżeń: 1
v6.00.xxx Data rejestracji: 06.04.2008 21:59
|
kirbi napisał/a:
Teraz działa prawidłowo tylko jedno zastrzeżenie, przy Dzisiaj wyświetla się 0, a dziś się zarejestrowało przynajmniej 6 osób.
Sprawdzałem i wyświetla jak trzeba i dziś pokazuje także poprawnie. Mozna zobaczyć na www.gc.boo.pl
Edytowane przez kefirek dnia 14.12.2008 17:11:21
|
|
|
|
kirbi |
Dodany dnia 14.12.2008 17:17:29
|
Przedszkolak
Postów: 29 Ostrzeżeń: 2
Data rejestracji: 30.07.2008 13:17
|
Nie może być. Coś jest nie tak: http://www.golden...l/news.php panel Stat Kliknij w najnowszego i zobaczysz ze dzis sie zarejestrowal, a w panelu jest 0. |
|
|
|
kefirek |
Dodany dnia 14.12.2008 17:21:52
|
Zaawansowany
Postów: 1191 Pomógł: 418 Ostrzeżeń: 1
v6.00.xxx Data rejestracji: 06.04.2008 21:59
|
O przepraszam zrobiłem błąd i dlatego było cały czas 0 tam gdzie masz
>".number_format($[color=#ff0000]dziś[/color])."</td></tr>
Zmien na
>".number_format($[color=#ff0000]dzi[b]s[/b][/color])."</td></tr>
Literka mi sie pomyliła
Edytowane przez kefirek dnia 14.12.2008 17:25:00
|
|
|
|
kirbi |
Dodany dnia 14.12.2008 17:26:36
|
Przedszkolak
Postów: 29 Ostrzeżeń: 2
Data rejestracji: 30.07.2008 13:17
|
Wielkie dzięki, teraz sobie tylko przerobie na ładniejszy. Ale jeszcze raz dzięki, od rana się z tym użerałem. |
|
|
|
slawekneo |
Dodany dnia 15.12.2008 00:20:52
|
Bywalec
Postów: 915 Pomógł: 41
Data rejestracji: 12.03.2006 07:28
|
Ja tu sie przyczepie do skryptu by @kefirek :p a mianowicie do dwoch bledow.
Pierwszy to: uzycie funkcji dbcount ktore przy duzej ilosci userow w bazie bedzie ja spowalniac (jak wiadomo tego typu panele laduja na strony glowne wiec im mniej tego typu zapytan tym lepiej).
Drugi to: nieprawidlowe zliczanie zarejestrowanych userow poprzez brak wyszczegolnienia roku. Juz tlumacze o co kaman. Twoj skrypt dziala dobrze tylko i wylacznie przez pierwszy rok istnienia strony, jezeli strona istnieje juz np. 4 lata to Twoje zapytania pobieraja liczbe rejestracji np. w dniu dzisiejszym z wszystkich 4 lat, a nie z aktualnego roku.
Oto maksymalnie zoptymalizowany kod rejestracji userow (testowany na stronie dzialajacej juz pare lat i o pokaznej liczbie userow):
//start stat
$result = dbquery("SELECT user_joined, user_name, user_id FROM ".$db_prefix."users ORDER BY user_joined DESC ");
$d=0; $w=0; $t=0; $pt=0; $r=0; $n=0;
$dzis=showdate("%j", time());
$wczoraj=($dzis-1);
$tydzien=showdate("%W", time());
$pop_tydzien=($tydzien-1);
$rok=showdate("%y", time());
while ($data = dbarray($result)) {
$n++;
$czas1=showdate("%j", $data['user_joined']);
$czas2=showdate("%W", $data['user_joined']);
$czas3=showdate("%y", $data['user_joined']);
if ($czas1.$czas3==$dzis.$rok) $d++;
if ($czas1.$czas3==$wczoraj.$rok) $w++;
if ($czas2.$czas3==$tydzien.$rok) $t++;
if ($czas2.$czas3==$pop_tydzien.$rok) $pt++;
if ($czas3==$rok) $r++;
if($n == 1) {
$nname = $data['user_name'];
$nid = $data['user_id'];
}
}
openside('Ludzie');
echo"<center>Zarejestrowanych:<b> $n</b></center><hr>
Dzisiaj: <b>$d</b><br>\n
Wczoraj: <b>$w</b><br>\n
W tym tygodniu: <b>$t</b><br>
W poprzednim tygodniu: <b>$pt</b><br>
W tym roku: <b>$r</b><hr>\n
<center>Najnowszy: <a href='".BASEDIR."profile.php?lookup=$nid' class='side'><b>$nname</b></a></b>";
closeside();
Kliknij i zaczekaj na załadowanie kodu ...
Pozdro!!
Edytowane przez Pieka dnia 15.12.2008 00:28:16
|
|
|