Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Jak wpisywać ip do bazy danych
jahonen
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 21.04.2014

Ostrzeżenie: (0%)
-----


  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 (IMG:style_emoticons/default/wink.gif)

Ten post edytował jahonen 14.05.2014, 12:44:06
Go to the top of the page
+Quote Post
kartin
post
Post #2





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował kartin 14.05.2014, 13:30:32
Go to the top of the page
+Quote Post
mar1aczi
post
Post #3





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


IP w bazie danych: klik
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 05:21