Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapis IP do MySQL
Forum PHP.pl > Forum > Bazy danych > MySQL
Playboy
Witam, mam problem, gdyż nie potrafię sobie poradzić z zapisem adresu IP do bazy MySQL.

Więc tak, projekty robię na KRASNALu czyli cała baza itp. opiera sie na localhoscie ale to nie ma znaczenia.

Mój problem jest taki że (dodam ręcznie dajmy na to adres IP w formie xxx.xxx.xxx.xxx) to za nic w świecie nie mogę porównać tego adresu.Chciałem na początku sprawdzić czy adres osoby która jest aktualnie zarejestrowana znajduje się w bazie, jeśli tak to uniemożliwić jej głosowanie a jeśli nie to pozwolić jej głosować, po czym zapisać IP w bazie.

Próbowałem to robić na wszystkie sposoby, nawet i ręcznie wpisywałem adres ip do bazy i do tego skryptu który sprawdza i nici...
Korzystając z $_SERVER['REMOTE_ADDR'] też nie uzyskuje poprawnego działania.

  1. $ip = $_SERVER['REMOTE_ADDR'];
  2. if(mysql_query("SELECT ip FROM `adres` WHERE `ip`=".$ip.";"))
  3. {echo 'IP jest w bazie,nie możesz oddać głosu ';}
  4. else
  5. {echo 'IP nie ma w bazie możesz oddać głos';}


Jeśli to w czymś pomoże to pole ip jest typu varchar(15)

gothye
spróbuj tak :

  1. mysql_query("SELECT ip FROM `adres` WHERE `ip`='".$ip."'"


swoją droga pod względem wydajności ,polecam to rozwiązanie : strona
Crozin
Co z tego opisu jest niejasne? http://pl.php.net/mysql_query#refsect1-fun...ry-returnvalues
Playboy
Wszystko...

Zmieniłem zapytanie na
  1. $result = mysql_query("SELECT * FROM adres WHERE ip=(".$_SERVER['REMOTE_ADDR']).")";
  2. if (!$result) { echo 'nie';} else { echo 'jest';}


Z tym że nadal występuje problem z poprawnym odczytem z bazy... możecie nakierować w czym jest błąd?
zdemotywowany
  1. $result = mysql_query("SELECT * FROM adres WHERE ip=(".$_SERVER['REMOTE_ADDR']).")";
  2. if ( mysql_num_rows == 0 )
  3. echo 'ok';
  4. else
  5. echo 'zle';
Playboy
Dalej to samo :/ może opiszę dokładniej.

Więc:
Cały serwer stoi u mnie na komputerze, program KRASNAL. Wchodzę z domowego kompa wpisując loclhost lub 127.0.0.1 i teoretycznie jak i w praktyce $_SERVER['REMOTE_ADDR'] zwraca mi wartość 127.0.0.1 ale ten kod który jest podany ciągle zwraca mi wartość dla true czyli że ip znajduje się w bazie danych,bez względu na to czy ono tam jest czy go nie ma...
zdemotywowany
  1. $result = mysql_query("SELECT * FROM adres WHERE ip=(".$_SERVER['REMOTE_ADDR']."))";
  2. if ( mysql_num_rows == 0 )
  3. echo 'ok';
  4. else
  5. echo 'zle';


Może teraz, wcześniej był mały błąd i zapewne u wszystkich on był wink.gif

EDIT: A jak robisz przez phpmyadmin to też Ci zwraca, że jest gdy go nie ma?
Playboy
dalej nie działa, może błędny typ danych jest? ale wątpię wcześniej był podany sposób konwersji adresu ip do liczb i odwrotnie może by z tego skorzystać... skoro tak normalnie się nie da...
zdemotywowany
Da się, nie panikuj. Wyświetl to zapytanie w phpmyadmin i daj tutaj wynik.
Playboy
nie wyświetle tego zapytania gdyż jest tam $_SERVER['REMOTE_ADDR'] - jeśli podmienię na ip "ręczne" - SELECT * FROM adres WHERE ip='127.0.0.1' wtedy zadziała może coś w tym $_SERVER['REMOTE_ADDR'] jest nie tak...
zdemotywowany
  1. $ip = $_SERVER['REMOTE_ADDR'];
  2. $result = mysql_query("SELECT * FROM adres WHERE ip='$ip'";
  3. if ( mysql_num_rows == 0 )
  4. echo 'ok';
  5. else
  6. echo 'zle';
mortus
Odstąpię nieco od problemu. Rozwiązanie, które chcesz zaimplementować do dobrych nie nie należy. Adres IP nie jest wiarygodną informacją (jeśli chodzi o identyfikacje użytkownika) przede wszystkim dlatego, że bardzo wiele osób ma wspólny adres IP. Do identyfikacji użytkownika, który nie jest zarejestrowany w Twoim serwisie musisz użyć większej ilości danych, jak np. informacje o przeglądarce, ciasteczka, itp. i do tego IP.
W powyższej wypowiedzi celowo użyłem podkreślenia. Jeśli bowiem sprawa dotyczy użytkownika zarejestrowanego (tak można wywnioskować z Twojego pierwszego opisu), to przecież nie ma problemu, bo jego unikalnym identyfikatorem jest odpowiedni numer w bazie danych. Wtedy wystarczy dodatkowa tabela, np.:
GŁOSY_UŻYTKOWNIKÓW:
DOTYCZY - kolumna zawierające identyfikator ankiety, której dotyczy głos
ID_UŻYTKOWNIKA - identyfikator użytkownika, który oddał głos (tej kolumny używamy do sprawdzenia, czy użytkownik juz głosował)
OCENA - kolumna opcjonalna, w której określamy wartość głosu użytkownika

W przypadku, gdy mówimy o użytkowniku niezarejestrowanym, niestety trzeba się "nagimnastykować". Odpowiednie tematy były na tym forum omawiane i wystarczy dobrze poszukać.

PS:
Krasnal chyba nie jest już rozwijany i z tego co się orientuję nie ma najnowszych wersji czy to PHP, czy MySQL, dlatego proponuję rozważyć możliwość zainstalowania czegoś bardziej "współczesnego". Aplikacji jest sporo i wystarczy poszukać.
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.