Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Jak wpisywać ip do bazy danych
Forum PHP.pl > Forum > Przedszkole
jahonen
  1. if(isset($_GET['ref']))
  2. {
  3. if(intval($_GET['ref']) !==0)
  4. {
  5. $ip = $_SERVER['REMOTE_ADDR'];
  6. db_connect();
  7.  
  8. $selip = mysql_query("SELECT ip1, ip2, ip3 FROM users WHERE ref = '$_GET[ref]'");
  9. $fetched = mysql_fetch_array($selip);
  10. if($fetched["ip1"] = 0){
  11.  
  12. $query1 = mysql_query("UPDATE users SET zdolnosc=zdolnosc+1 WHERE ref = '$_GET[ref]'");
  13. $query2 = mysql_query("INSERT INTO users (ip1) VALUES ($ip) WHERE ref = '$_GET[ref]'");
  14. }
  15. elseif($fetched["ip2"] = 0 && $fetched["ip1"] != $ip)
  16. {
  17. $query1 = mysql_query("UPDATE users SET zdolnosc=zdolnosc+1 WHERE ref = '$_GET[ref]'");
  18. $query2 = mysql_query("INSERT INTO users (ip2) VALUES ($ip) WHERE ref = '$_GET[ref]'");
  19. }
  20. elseif($fetched["ip3"] = 0 && $fetched["ip2"] != $ip && $fetched["ip1"] != $ip)
  21. {
  22. $query1 = mysql_query("UPDATE users SET zdolnosc=zdolnosc+1 WHERE ref = '$_GET[ref]'");
  23. $query2 = mysql_query("INSERT INTO users (ip3) VALUES ($ip) WHERE ref = '$_GET[ref]'");
  24. }
  25. }
  26. }


Napisaem taki kod. Nie mam jak go sprawdzić ponieważ działam na localhost. $_GET["ref"] to tylko cyfry Moje pytania:
Czy kod jest bezpieczny?
Czy ip zosatnie zapisane w bazie danych?
Ip zapisywać varchar'em czy int'em, a może czymś innym?
Czy kod jest poprawnie napisany?

W kodzie chodzi mi o to by inkrementować pole zdolność, kiedy wszystkie warunki zostaną spełnione, czyli ludzie o 3 innych adresach ip wejdą w podany link.
Domyślna wartość pól ip1, ip2, ip3 w bazie wynosi 0.

Z góry dzięki wink.gif
kartin
To, że działasz na lokalnym komputerze nie wyklucza możliwości przetestowania. Zamiast $_SERVER['REMOTE_ADDR'] możesz ręcznie wpisać w kodzie adres IP uruchomić skrypt, później zmienić i znów uruchomić, albo podawać IP jako parametr w URL i później używać np. $_GET['ref'].

  1. if ($fetched["ip1"] = 0) {
  2. //...
  3. }
Wartości porównuje się przez ==, = to przypisane.

Sprawdź co się stanie jeśli poda się nieistniejący kod i zapytanie:
  1. SELECT ip1, ip2, ip3 FROM users WHERE ref =
nie zwróci żadnych wierszy.

  1. $selip = mysql_query("SELECT ip1, ip2, ip3 FROM users WHERE ref = '$_GET[ref]'");
Skoro $_GET['ref'] jest liczbą a nie ciągiem znaków, to nie ujmuje się jej w apostrofy lub cudzysłów.

  1. $_GET[ref]
jest niepoprawne.

Sprawdź składnię polecenia INSERT. Wyrzuć INSERT i zapisywanie IP wrzuć do UPDATE.

Skoro IP jest liczbą to lepiej ją przechowywać jako liczbę - ip2long() - nie jako ciąg znaków. Ewentualne wyszukiwanie w bazie po liczbie jest szybsze niż po ciągu znaków. Jeśli koniecznie ma być jako ciąg znaków to użyj pola CHAR a nie VARCHAR.
mar1aczi
IP w bazie danych: klik
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.