Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQL] Sprawdzanie ip
Forum PHP.pl > Forum > PHP
MaffSound
Witam, mam pewien problem, z którym męcze się od 3 dni. Mianowicie mam taki kod:
  1. while($r = mysql_fetch_array($baza)){
  2. $id = $r['0'];
  3. $ip = $_SERVER['REMOTE_ADDR'];
  4. $zapytanie = mysql_query("SELECT * FROM iplike WHERE id = '$id'");
  5. $ip_m = mysql_fetch_array($zapytanie);
  6. if($ip_m['ip'] != $ip){
  7. if(isset($_POST['idf'.$r['0']])){
  8. mysql_query("INSERT INTO iplike (ID, IP) values ('$id', '$ip')");
  9. mysql_query("UPDATE poczekalnia SET plusy = plusy+1 WHERE id = '$id'");
  10. echo '<script>java script:location.reload()</script>';
  11. }
  12. } else {
  13. $blad = 'Twój głos został już oddany';
  14. }

Działa dobrze, ale tylko na jedną osobe. Co prawda dodaje kolejne rekordy do bazy o tym id postu. Jeżeli ja mam jakieś tamn ip np. 192.168.1.1 a druga osoba ma inne np. 192.144.0.2, to wtedy dla mnie są nie widoczne przyciski (tak jak powinno być), a dla innej osoby przyciski są widoczne i mogą spamić ile chcą. (do kodu nie załączyłem przycisków ponieważ nie widzę sensu).
Dokładniej chodzi o tą linijke:
  1. if($ip_m['ip'] != $ip){

Sprawdza ip tylko pierwszego rekordu, a ma sprawdzać wszystkie z podanym id. Niestety nie mam pojęcia jak to zrobić, a na innym forum też nie potrafili mi pomóc.
ZaXaZ
!= oznacza nie równe!! czyli dla przykładu...

jeśli (IP_0.0.0.0 nie jest równe IP_0.0.0.1)
{
wykonaj akcję ...
}

dwa... $r['0']; skoro int to po co robić string? $r[0]; ten skrypt na ogół nie poprawny więc chyba nie ma co tu pomóc, lepiej na nowo napisać ;|

poza tym polecam poczytać o PDO lub mysqli ponieważ w php 5.5 mysql_* są wycofywane. A to pewnie już nie długo, no chyba że masz własny server lub na l.h.
MaffSound
1. != oznacza nie równe!!
Wiem o tym... inaczej tak kod by nie wyglądał.

2. $r['0']; nie dotyczy problemu!

3. O wycofanie mysql będe się martwił jak to zrobią.

4. Zamiast $ip_m['ip'] tam powinienem napisać $ip_m['2']
Wazniak96
@ZaXaZ skoro korzysta z fetch_array to nie ma różnicy czy daje indexy numeryczne czy tekstowe. Tablica zawiera dwie wersje. A że nie trzyma się jakiś tam standardów to inna sprawa.

@MaffSound Dzieje się tak ponieważ sprawdzasz tylko dla jednego rekordu jakim jest twój. Przyjrzyj kod i sprawdź co pozmieniałem. Jak czegoś nie rozumiesz to pisz. smile.gif

  1. while($r = mysql_fetch_array($baza)){
  2. $id = $r['0'];
  3. $ip = $_SERVER['REMOTE_ADDR'];
  4. $zapytanie = mysql_query("SELECT count(*) AS ile FROM iplike WHERE id = '$id' AND ip = '$ip'");
  5. $ip_m = mysql_fetch_assoc($zapytanie);
  6. if($ip_m['ile'] == 0){
  7. if(isset($_POST['idf'.$r['0']])){
  8. mysql_query("INSERT INTO iplike (ID, IP) values ('$id', '$ip')");
  9. mysql_query("UPDATE poczekalnia SET plusy = plusy+1 WHERE id = '$id'");
  10. echo '<script>java script:location.reload()</script>';
  11. }
  12. } else {
  13. $blad = 'Twój głos został już oddany';
  14. }
MaffSound
Dziękuje ślicznie, w końcu jakiś myślący człowiek smile.gif
nie rozumiem trochę count(*) ale sobie gdzieś doczytam wink.gif
Dzięki ! smile.gif
Wazniak96
count(*) - liczy wszystkie rekordy
AS ile - nadaj nazwę ile.

PS: Niektóre osoby po prostu piszą zanim dokładnie zrozumieją problem. Ale cóż.. każdy ma prawo się mylić i każdy kiedyś zaczynał wink.gif
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.