necro
13.06.2008, 16:15:08
Witam.
Mam pewien problem z systemem ocen (plus i minus), nie wiem dokładnie jak to zrobić.
Chciał bym zrobić taki system ocen jak na www.maxmix.pl/movie-10543.html
Ale nie wiem w ogóle jak to jest zrobione, może ktoś mi pomóc? lub gdzie znajdę jakieś wskazówki?
Pozdrawiam
.radex
13.06.2008, 16:45:26
Człowieku, bez przesady....
Po prostu za kliknięciem dodajesz do bazy ilość kliknięć PLUS bądź MINUS a następnie z tych wartości obliczasz sobie w dowolny sposób wartość...
Trochę więcej samodzielności i konkretnych pytań.
necro
13.06.2008, 16:50:09
Zrobiłem to już, ale nie wiem jak zrobić aby nie przeładowywało strony i jak obliczyć średnią w skali 10
Pozdrawiam
.radex
13.06.2008, 16:52:56
użyj AJAX-a
"średnią w skali 10" - z matematyki uciekałeś?
necro
13.06.2008, 16:53:58
Musisz obrażać?
Nie nie uciekłem, tylko nie wiem jak to w php zrobić.
.radex
13.06.2008, 16:58:16
Dobra, dobra, wyluzuj.
Powiedz jakim sposobem chcesz to napisać (bo mi dwa przyszły na myśl) to powiem jak to zaimplementować.
necro
13.06.2008, 17:07:49
Nie wiem jakim sposobem ale na razie zrobiłem tak:
w Tabeli filmiki dodałem rekordy plus(int11) i minus(int11).
Głosy dodaje tak:
Kod
if($_COOKIE[$_GET[id]]){
echo "<center> Nie możesz dodać więcej głosów na ten dowcip! </center>";
}else{
if(!isset($_COOKIE[$_GET['id']])){
setcookie( $_GET['id'], $_GET['id'], time()*3600*12);
}else{
setcookie( $_GET['id'], "voted", time()*3600*12);
}
$sql = "SELECT * FROM filmiki WHERE id = '$_GET['id']'";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
if($_GET['glos'] == "plus"){
$plus = $row['plus']+1;
$sql = "UPDATE filmiki SET plus='$plus' WHERE id='$_GET['id']'";
$res = mysql_query($sql);
echo "<center> Twój głos został dodany! </center>";
}
if($_GET['glos'] == "minus"){
$minus = $row['minus']+1;
$sql = "UPDATE filmiki SET minus='$minus' WHERE id='$_GET['id']'";
$res = mysql_query($sql);
echo "<center> Twój głos został dodany! </center>";
}
}
Pozdrawiam
marcio
13.06.2008, 17:43:02
Hmm... ale z tego co widze to ty zwiekszasz lub zmiejszasz zmienna z bazy i na nowo ja zapiusjesz najlatwiej bedzie zrobic tak robisz <select> z option on 1-10 dodajesz do bazy za pomoca insert into nie update aby zrobic srednia liczysz wszystkie oceny od danego filmu dzielisz perzez wszystkie oceny i zaokroglasz za pomoca round() albo ceil() zalezy jak chcesz zaokroglac bo tak jak ty to robisz to chyba nie mozna obliczyc sredniej tak jak chcesz w sumie moze sam napisze system ocen do art'ow w cms
necro
13.06.2008, 17:45:02
Wolał bym zrobić tak jak jest teraz, nie da jakoś rady?
Pozdrawiam
Dzięki za info o zaookrągleniu liczby
PS. Chciałem tylko plus i minus no i żeby obliczało średnią
marcio
13.06.2008, 17:51:17
Nie wiem jak moglbys obliczac srednia przy twoim systemie nie przychodzi mi nic do glowy chyba ze bedziesz robis roznice pozytywnych i negatywnych ocen i to wsio ale cos nie teges.....
necro
13.06.2008, 17:52:18
Wiesz, nie znam najlepiej PHP, szukałem wszędzie ale co znalazłem to tylko gwiazdkowe systemy ocen a ja takich nie chce.
Pozdrawiam
simple programmer
13.06.2008, 17:54:18
Do obliczania średniej służy w Mysql funkcja AVG.
Kod
SELECT AVG(ocena) FROM oceny as srednia
.radex
13.06.2008, 17:54:22
Gwiazdkowe systemy oceny opierają się na praktycznie tej samej zasadzie.
marcio
13.06.2008, 18:04:59
Sorki za OT ale chcialem zapytac tez sobie zrobie system ocen tak jak mu to opisalem tylko mam pytanko bo wysylanie cookie nie jest zabardzo bezpieczne zapisywac w bazie i sprawdzic czy dany user juz dodal czy samo cookie wystarcz??
@simple programmer i jak to potem wyswietlic sorki za takie pytanko ale sql az tak dobrze nie znam 
Kicok
13.06.2008, 19:10:00
Po pierwsze to zwiększać ilość plusów/minusów w bazie danych możesz przy pomocy jednego zapytania, np:
UPDATE tabela SET kolumna = kolumna + 1 WHERE warunek = 'cośtam'
Do wyświetlenia oceny potrzebujesz z bazy: ilość ocen ( plusy i minusy ) oraz ilość plusów.
A potem już matematyka: ile procent wszystkich głosów to plusy i zamiana na skalę 1-10 ( 0% = 1; 100% = 10 )
Możesz to zrobić w PHP, lub już na poziomie zapytania SELECT
marcio
13.06.2008, 20:19:39
@necro bede dobry masz napisalem sobie taki system ocen dla moich art'ow nie mozna oceniac 2 razy nie wysylac cookie bo mozna oszukiwac o jest srednia ocen
<?php
$oceny = mysql_query('select ocena from oceny where aid = '.(int
)$_GET['id'].'', $db);
if($wszystkie == 0) $ilosc_ocen = '<b style="color:#FF0000">Nie ma ocen</b>';
else $ilosc_ocen = 'Lacznie ocen: '.$wszystkie;
$srednia = round($lacznie/$wszystkie, 1
);
<table width="100%">
<form action="'.$_SERVER['PHP_SELF'].'?strona='.$strona.'&action=pokaz&id='.$_GET['id'].'&autor='.$_GET['autor'].'" method="post">
<tr><td align="center" bgcolor="#eeeeee" height="18"><b style="color: #000000">Oceny</b></td></tr>');
echo('<tr><td align="center">Podaj swoja ocene <select name="ocena">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
<input type="submit" name="ocen" value="Ocen" style="background-color:#ECECEC; color:#000000; border: 1px solid blue;"></td>
</tr>
</form>');
else echo('<tr><td align="center">Oceniles na: <b style="color: #000000">'.$jaka['ocena'].'</b></td></tr>');
echo('<tr><td align="center">'.$ilosc_ocen.'</td></tr> <tr><td align="center">Srednia ocen: '.$srednia.'</td></tr>
</table>');
if(isset($_POST['ocen'])) {
$id = (int)$_GET['id'];
$ocena = $_POST['ocena'];
$data = date('j/n/Y H:i:s');
if(mysql_query("insert into oceny(aid,ocena,dodal,data) values('$id', '$ocena', '$dodal', '$data')", $db)) echo('<script>alert("Ocena zostala dodana")</script>');
}
?>
Czy ktos moze mi powiedziec czy ten kod jest optymalny jesli nie jest to prosze o pokazania jak go zooptymalizowac
.radex
13.06.2008, 20:29:28
Cytat
Sorki za OT ale chcialem zapytac tez sobie zrobie system ocen tak jak mu to opisalem tylko mam pytanko bo wysylanie cookie nie jest zabardzo bezpieczne zapisywac w bazie i sprawdzic czy dany user juz dodal czy samo cookie wystarcz??
baza + ciacha
baza = pewność, że nie oszukuje
ciacha = ograniczenie zapytań do bazy.
marcio
13.06.2008, 20:34:34
Cytat
baza + ciacha
baza = pewność, że nie oszukuje
ciacha = ograniczenie zapytań do bazy.
WLasnie zrobilem sprawdzanie na bazie mam pewnosci ze ktos nie oszuka a tak jak mi powiedzieli w innym temacie o 1 zapytanie wiecej baza nie zdechnie
.radex
13.06.2008, 21:40:41
No tak, ale przecież chodzi o to, żeby nie zagłosowali drugi raz. Walisz ciacho i nie musisz za każdą odsłoną dawać tego jednego zapytania. A jak ciacha nie będzie, to dopiero wtedy się musisz upewnić.
Przy większej aplikacji (więcej takich "akcji") możesz na tym zaoszczędzić 2-3 zapytania na odsłonę. Przy dużej ilości userów jakaś różnica będzie (nieduża, ale zawsze).
marcio
13.06.2008, 21:59:39
Cytat
No tak, ale przecież chodzi o to, żeby nie zagłosowali drugi raz
No to tez ni zaglosuje 2 razy

Cytat
Walisz ciacho i nie musisz za każdą odsłoną dawać tego jednego zapytania. A jak ciacha nie będzie, to dopiero wtedy się musisz upewnić.
To to0 ja tez wiem ale koledzy upewnili mnie ze nie robi to roznicy przy 2-3k user'ow

A tak pozwole zapytac a w IPB czyli na tym forum jak sie zabezpiecza sondy?
Ciacha czy baza??
.radex
14.06.2008, 09:05:22
Moim zdaniem warto oszczędzać wszędzie, gdzie nie wiąże się to z dużą ilością kodu do napisania. Nie jestem w stanie potwierdzić tego żadnymi testami, ale wydaje mi się że przy dużym skrypcie i dużej ilości userów różnica dzięki takim pierdołkom będzie.
Ciacha + baza. Mówiłem przecież.
marcio
14.06.2008, 10:57:51
Po co ciahca + baza albo jedno albo drugie a nie 10 rzeczy chcesz potestowac:
http://www.marcio.szu.pl/czyt_art.php?stro...p;autor=uw_testLogin: uw_test
Haslo: uw_test
.radex
14.06.2008, 11:57:09
Ehhh... Już to wytłumaczyłem.
Baza po to, żeby mieć PRAWDZIWĄ pewność, że już głosowałeś
A ciacha po to, żeby ograniczyć zapytania do bazy i zrobić to po stronie klienta.
Rozumiesz?
Ciacha po jakimś czasie wygasają. Można je też ręcznie usunąć. Po to dodawanie tych danych do bazy. A jeśli ciastko jest (np. zaglosowal=tak), to dopóki nie będzie próbował zagłosować, nie ma sensu pakować zapytania do bazy.
marcio
14.06.2008, 12:14:22
Nie rozumiem twojej toerii moglbys to pokazac na moim kodzie??
Chodzi ci o to ze gdy wysyla pierwszy glos wysylam ciacho gdy ciacha nie ma bo wygaslo albo ktos usunolem przed wyswietleniem forma sprawdzam czy jest ciacho jesli go nie to robie zapytanie czy dana osoba juz dodala odpowiez w sumie teoria dobra jak mi sie bedzie chcialo to moze zmienie

ale dzieki
.radex
14.06.2008, 13:59:25
O to właśnie chodzi
marcio
14.06.2008, 16:27:08
W sumie to to jest ok moze zrobie cos takiego tylko jak ktos oceni 50 art'ow to bedzie mial 50 cookie a w cookie bede musial wysylac id art'a moze to zmienie w sumie to jest 5 min roboty :0
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.