Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]liczenie głosów
Forum PHP.pl > Forum > Przedszkole
Larges
Kod
$ile_jest_glosow = mysql_query("SELECT * from cms_ocena_newsow where id_newsa=$rekord[0] order by id");
$ile_glosow = mysql_num_rows($ile_jest_glosow);
while($rekord20 = mysql_fetch_array($ile_jest_glosow)) {
$wynik = ($rekord20[2] - $rekord20[3]);
}


Chcę zbudować skrypt liczący głosy.
mam tabelę:
id id_newsa plus minus login ip- klikając plusik wstawia się wartość "1" do kolumny plus, klikając minusik wstawia się wartość "1" do kolumny minus.
Czy możecie zapodać prosty skrypcik, który obliczy różnicę obu kolumn? Jak widzicie po moim kodzie, nie bardzo mi się to udaje...
Dziękuję za pomoc.
barabarara
SELECT plusy-minusy AS roznica FROM tabela

questionmark.gif
Inti
Witam

Jeśli już to ::

  1. <?php
  2. $ile_jest_glosow = mysql_query("SELECT id, id_newsa, sum(plus), sum(minus) from cms_ocena_newsow where id_newsa=$rekord[0] order by id");
  3. /* to powinno dać ci listę newsów od razu z dodanymi ilościami głosów za i przeci
    w */
  4. $ile_glosow = mysql_num_rows($ile_jest_glosow);
  5. while($rekord20 = mysql_fetch_array($ile_jest_glosow)) {
  6. $wynik = ($rekord20['plus'] - $rekord['minus']);
  7. /* Teraz pozostaje odejmowanie i koniec pracy - oczywiście $wynik przechowuje w pętli tylko wynik jednego newsa, by zawierał ws
    zystkie wrzuć wyniki do tabeli */
  8. }
  9. ?>


Ogólnie jednak ja bym tą tabele opatrzył tylko w jedno pole rodzaju glos, zamiast pol plus oraz minus i w zaleznosci od wyboru umieszczal w niej wartosc 1 lub -1. W ten sposob juz z poziomu zapytania w bazie otrzymywalbys pozadany wynik.

Pozdrawiam
Inti
Larges
Kod, który prezentuje poniżej liczy ilość wierszy, a tym samym ilość plusów. Chcę, aby każdy, kto oddał głos nie mógł głosować ponownie, jednak wykryłem błąd. Mianowicie jeśli ktoś po mnie zagłosuje, automatycznie mogę oddać ważny głos (ponownie!).

Jak można poprawić ten błąd? Dziękuję za pomoc.


Kod
$zapytanie_do = mysql_query("SELECT * from cms_ocena_newsow where id_newsa='$id_newsa_ocena' order by id");
$rekord3=mysql_num_rows($zapytanie_do);

$ocena = $rekord3;

while($zobacz_ip = mysql_fetch_array($zapytanie_do))
{
$ip = $zobacz_ip[5];
}
if ($REMOTE_ADDR == $ip) {
echo "<br><br><center><font style='tahoma' color='E50000' size='3'><img border='0' src='http://usport.pl/img/info.gif'> <b>Już oddałe¶ głos</b></font></center><br>";
echo "<center><font style='tahoma' color='000000'><a href='javascript:window.history.go(-1);'>Powrót</a></center></font></center>";
}
nithajasz
Poprawiony "bug":

  1. <?php
  2. $zapytanie_do = mysql_query("SELECT * from cms_ocena_newsow where id_newsa='$id_newsa_ocena' order by id");
  3. $rekord3=mysql_num_rows($zapytanie_do);
  4.  
  5. $ocena = $rekord3;
  6.  
  7. while($zobacz_ip = mysql_fetch_array($zapytanie_do))
  8. {
  9. $ip = $zobacz_ip[5];
  10.  
  11. if ($REMOTE_ADDR == $ip) {
  12. echo "<br><br><center><font style='tahoma' color='E50000' size='3'><img border='0' src='http://usport.pl/img/info.gif'> <b>Już oddałeś głos</b></font></center><br>";
  13. echo "<center><font style='tahoma' color='000000'><a href='javascript:window.history.go(-1);'> Powrót</a></center></font></center>";
  14. }
  15.  }
  16. ?>


Nie dziwne, że masz taki błąd skoro w pętli pobierasz ip i tylko nadpisujesz zmienną kolejnymi ip co w efekcie da Ci zapis ostatniego ip jakie zostanie pobrane z bazy.

IP i tak nie wiele Ci da, wystarczy użyć w tym przypadku proxy i mogę dalej głosować, zmienić ip przykładowo neostrada i dalej mogę głosować. Blokada masek raczej odpada więc ip się na niewiele tak naprawdę tu zdaje. Możesz ewentualnie dodać do tego sprawdzanie w cookies czy był oddany głos ale to wcale nie dużo trudniejsze do obejścia (usunąć cookie). Innym rozwiązaniem jest np. zapis id użytkowników, którzy głosowali gdzieś do pliku czy bazy i po tym sprawdzanie (o ile głosować mogą tylko zarejestrowani użytkownicy), co też jest banalnie proste do obejścia po przez założenie nowego konta... i tak można w kółko zawsze da się obejść w jakiś sposób blokadę powtórnego głosowania. Przynajmniej nic nie przychodzi mi do głowy w 100% skutecznego teraz...
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.