Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Błędy przy zapisie do bazy danych
mentoos
post
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 5.09.2009

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


Kiedy chcę zapisać datę oraz adres IP do bazy danych, zamiast poprawnej daty pojawiają mi się same zera: 0000-00-00 00:00:00, przy adresie IP korzystając ze zmiennej $_SERVER['REMOTE_ADDR'] w bazie pojawia się tylko 0.
Wszystko działa na localhost, korzystam z pakietu XAMPP.
Data jest typu TIMESTAMP, Adres IP jest zapisywany w formie INT UNSIGNED za pomocą funkcji inet_pton().

Co może być przyczyną tych błędów?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
lord2105
post
Post #2





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


jak generujesz zmienna, która ma być zapisana w pole daty?
Go to the top of the page
+Quote Post
mentoos
post
Post #3





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 5.09.2009

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


W taki sposób:

Kod
date('d/m/Y  G:i:s');


Adres IP w taki:
Kod
inet_pton($_SERVER['REMOTE_ADDR']);


Wszystko testuję na localhost. Powiem jeszcze, że nie jest pokazywany też adres IP.

Kod
echo $_SERVER['REMOTE_ADDR'];


Nie pokazuje adresu IP, tylko taki ciąg znaków: "::1". Sprawdzałem w phpinfo(), jest to samo.

Ten post edytował mentoos 11.12.2010, 14:20:11
Go to the top of the page
+Quote Post
lord2105
post
Post #4





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


i co dziwisz sie, ze nie zapisuje daty jak TIMESTAMP używa "-", a ty masz "/"? a do tego nie w tej kolejnosci

  1. date('Y-m-d H:i:s');


Poprosze jeszcze zrzut tabeli mysql

Czy funkcja inet_pton, jest Tobie tak bardzo potrzebna?

Ten post edytował lord2105 11.12.2010, 14:22:38
Go to the top of the page
+Quote Post
mentoos
post
Post #5





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 5.09.2009

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


  1. -- phpMyAdmin SQL Dump
  2. -- version 3.2.4
  3. -- <a href="http://www.phpmyadmin.net" target="_blank">http://www.phpmyadmin.net</a>
  4. --
  5. -- Host: localhost
  6. -- Czas wygenerowania: 11 Gru 2010, 14:27
  7. -- Wersja serwera: 5.1.41
  8. -- Wersja PHP: 5.3.1
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11.  
  12.  
  13. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  14. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  15. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  16. /*!40101 SET NAMES utf8 */;
  17.  
  18. --
  19. -- Baza danych: `various`
  20. --
  21.  
  22. -- --------------------------------------------------------
  23.  
  24. --
  25. -- Struktura tabeli dla `comments`
  26. --
  27.  
  28. CREATE TABLE IF NOT EXISTS `comments` (
  29. `id` int(11) NOT NULL AUTO_INCREMENT,
  30. `name` varchar(32) NOT NULL,
  31. `email` varchar(32) NOT NULL,
  32. `content` varchar(255) NOT NULL,
  33. `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  34. `ip_address` int(10) UNSIGNED NOT NULL,
  35. PRIMARY KEY (`id`)
  36. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  37.  
  38. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  39. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  40. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
  41.  


Znasz lepszy sposób na przechowywanie adresu IP w bazie danych? Korzystanie z VARCHAR czy CHAR jest mało efektywne.
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




ip2long
Go to the top of the page
+Quote Post
mentoos
post
Post #7





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 5.09.2009

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


Dzięki. Mimo to, nadal adres nie jest zapisywany w formie INT tylko 0, to samo z datą.

Przy typie danych CHAR, wszystko jest ok, tylko że zapisywanie daty w tym formacie to najgorsze wyjście. Co polecacie zamiast TIMESTAMP?

Czy dobrym wyjściem będzie zapisywanie czasu w formie UNIX'a za pomocą time*() i późniejsze formatowanie?

Ten post edytował mentoos 11.12.2010, 14:48:13
Go to the top of the page
+Quote Post
lord2105
post
Post #8





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


DATATIME

Pokaz, jak teraz generujesz date?

Ten post edytował lord2105 11.12.2010, 16:06:10
Go to the top of the page
+Quote Post
mentoos
post
Post #9





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 5.09.2009

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


Obecnie taka forma:

  1. $time = time(); // W formie INT UNSIGNED data jest zapisywana w bazie
  2. date('M j, Y h:i:s A', $time); // Data jest zapisywana w postaci INT, tutaj ją wyświetlam na tekstową formę


Ten post edytował mentoos 11.12.2010, 16:42:39
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Mimo to, nadal adres nie jest zapisywany w formie INT tylko 0, to samo z datą.

Dziwne, jakoś używam od paru lat tego formatu i wszystko działa.

Lepiej pokaż kod, bo opis nic nie mówi.

Cytat
Czy dobrym wyjściem będzie zapisywanie czasu w formie UNIX'a za pomocą time*() i późniejsze formatowanie?

W żadnym wypadku. Tracisz możliwość korzystania z funkcji operowania na datach w zapytaniach. O przesunięciach stref czasowych nie wspomnę.
Go to the top of the page
+Quote Post
mentoos
post
Post #11





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 5.09.2009

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


Kod z metody do wysyłania komentarza, Oczywiście całą klasę komentarzy dopiero zaczynam pisać.

  1. public function post_comment($name, $email, $content)
  2. {
  3. $stmt = $this->db->prepare('INSERT INTO comments (name,email,content,date,ip_address)
  4. VALUES (:name,:email,:content,:date,:ip_address) ');
  5. $stmt->bindValue(':name', strip_tags($name));
  6. $stmt->bindValue(':email', strip_tags($email));
  7. $stmt->bindValue(':content', strip_tags($content));
  8. $stmt->bindValue(':date', time());
  9. $stmt->bindValue(':ip_address', ip2long($_SERVER['REMOTE_ADDR']));
  10. $stmt->execute();
  11. $stmt->closeCursor();
  12. }


Ten post edytował mentoos 11.12.2010, 17:29:03
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: 23.08.2025 - 13:05