• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ferelne głosowanie i nadpisywanie głosów na podstawie IP.

VPS Starter Arubacloud
+1 głos
288 wizyt
pytanie zadane 10 lipca 2015 w SQL, bazy danych przez No Lime Gaduła (4,540 p.)

Witam. Znowuż mam problem z moim systemem głosowania. Wszystko dodaje poprawnie czyli daje do kolumny IP poprawne IP użytownika, jego ocenę, datę itd. Natomiast mam w pliku ajax.php czyli tam gdzie mam całą logikę dodawania, jeszcze warunek, że gdy znajdzie już takie ip to zamieni po prostu głosy. Niestety to nie działa i dodaje cały czas nowe głosy : http://imageshack.com/a/img908/9414/3wS3fL.png

Dołączam kod pliku php

<?php
require_once 'connect.php';


   if(isset($_POST['act'])){
    	//search if the user(ip) has already gave a note
    	$ip = $_SERVER["REMOTE_ADDR"];
    	$therate = $_POST['rate'];
    	$thepost = $_POST['post_id'];
        echo $thepost;

    	$query = mysqli_query($link, "SELECT * FROM rate where ip= '$ip'  "); 
    	while($data = mysql_fetch_assoc($query)){
    		$rate_db[] = $data;
    	}

    	if(count($rate_db) == 0 ){
    		mysqli_query($link,"INSERT INTO rate SET id_post = '$thepost', ip = '$ip', rate = '$therate'");
    	}else{
    		mysqli_query($link,"UPDATE rate SET rate= '$therate' WHERE ip = '$ip'");
    	}
    } 
?>

Bardzo proszę o pomoc i wyrozumiałość :)

2 odpowiedzi

0 głosów
odpowiedź 10 lipca 2015 przez Comandeer Guru (599,730 p.)
wybrane 11 lipca 2015 przez No Lime
 
Najlepsza

Zapytanie REPLACE z automatu obsłużyłoby obydwa przypadki. Natomiast co do liczenia rekordów jest COUNT w SQL. No i wszędzie masz mysqli i nagle fetchujesz przy pomocy mysql - nic dziwnego, że nie działa

komentarz 11 lipca 2015 przez No Lime Gaduła (4,540 p.)

Próbowałem zmienić coś Twoją metodą natomiast później odkryłem, że ŻADNA wartość z liczenia nie jest wyciągana zaś w PhpMyAdmin to zapytanie jak najbardziej zwraca wartość.

Wiem to, bo próbowałem po prostu wyświetlić to w indexie

$query3 = mysqli_query($link, "SELECT count(rate) AS Count FROM rate where ip='tu_jest_moje_ip' AND id_post='4'"); 
        while($data = mysqli_fetch_assoc($query3)){
            $rate_db[] = $data;
        }

echo $rate_db['Count'];

Dodam, że to wszystko jest już na nazwa.pl.

 

EDIT: mysqli_error również nie zwraca żadnych błędów.

komentarz 11 lipca 2015 przez No Lime Gaduła (4,540 p.)
Dobra, wiem w czym leżał błąd. Po prostu nie mogłem wyświetlić zawartości tablicy poza petlą while. Teraz już normalnie odczytuje wartości a ten warunek if wsadziłem również w pętlę. Dziękuje jeszcze raz za pomoc.
0 głosów
odpowiedź 10 lipca 2015 przez vapvap Początkujący (350 p.)

Na peweno REMOTE_ADDR ?

Nie lepiej HTTP_X_FORWARDED ?

 

$ipAddress = $_SERVER['REMOTE_ADDR'];
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
    $ipAddress = array_pop(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']));
}

 

komentarz 11 lipca 2015 przez No Lime Gaduła (4,540 p.)
podmieniłem to i również działa. Zaufam na słowo, że lepiej używac tej metody ; )
komentarz 11 lipca 2015 przez Comandeer Guru (599,730 p.)
Mam nadzieję, że to filtrujesz, bo w tym nagłówku serwer może posłać wszystko. No i warto sprawdzić czy na pewno jest ustawiony zamiast standardowego IP
komentarz 11 lipca 2015 przez No Lime Gaduła (4,540 p.)
Jeżeli mam być szczery to nie wiem jak to zabezpieczyć. Nakierujesz mnie na jakąś funkcję?
komentarz 11 lipca 2015 przez Comandeer Guru (599,730 p.)
mysqli_real_escape_string, ale i tak w wolnym czasie poczytaj o prepared statements ;) BTW widzę, że kod sprawdza czy ten nagłówek istnieje zanim go użyje, więc można się martwić już tylkoo bazę ;)

Podobne pytania

0 głosów
1 odpowiedź 221 wizyt
pytanie zadane 11 października 2017 w Rozwój zawodowy, nauka, praca przez Kitsugaya Nowicjusz (200 p.)
0 głosów
2 odpowiedzi 703 wizyt
pytanie zadane 16 października 2017 w PHP przez NogaProgramowania Nowicjusz (160 p.)
+2 głosów
3 odpowiedzi 343 wizyt
pytanie zadane 18 czerwca 2015 w HTML i CSS przez DawidxD Użytkownik (810 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...