Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML][MySQL]Dodawanie daty w SQL
Forum PHP.pl > Forum > Przedszkole
RoysoN
Witam! Jakiś czas temu bawiłem się z wpisywaniem dat w pliku txt, lecz są one zawodne więc postanowiłem się przenieść na SQLa.
  1. <form action="index.php" method="post">
  2. <input type="text" name="tytul" value="TYTUŁ">
  3. <input type="text" name="tresc" value="TREŚĆ">
  4. <input type="text" name="data" value="<?php date(Y-m-d); ?>">
  5. </form>
  6.  
  7. <?php
  8. $tytul = $_POST['tytul'];
  9. $tresc = $_POST['tresc'];
  10. $data = $_POST['data'];
  11.  
  12. if ($tytul and $tresc and $data) {
  13. $connection = @mysql_connect('localhost', 'root', '')
  14. or die('Brak połączenia z serwerem MySQL');
  15. $db = @mysql_select_db('webserv', $connection)
  16. or die('Nie mogę połączyć się z bazą danych');
  17.  
  18. $ins = @mysql_query("INSERT INTO aktualnosci SET tytul='$tytul', tresc='$tresc', data='$data'");
  19.  
  20. if($ins) echo "Rekord został dodany poprawnie";
  21. else echo "Błąd nie udało się dodać nowego rekordu";
  22.  
  23. mysql_close($connection);
  24. }
  25. ?>
  26.  
  27.  

Tu z kolei też mam problemy. Rekord w ogóle się nie dodaje. Nie wywala przy tym żadnego komunikatu;/
Adis92
  1. <form action="index.php" method="post">
  2. <input type="text" name="tytul" value="TYTUŁ">
  3. <input type="text" name="tresc" value="TREŚĆ">
  4. </form>

  1. <?php
  2. /* Data */
  3. function data_pl(){
  4.  
  5. $dzien = date("d");
  6. $miesiac = date("m");
  7. $rok = date("Y");
  8. switch ($miesiac) {
  9. case '01': $miesiac = 'stycznia'; break;
  10. case '02': $miesiac = 'lutego'; break;
  11. case '03': $miesiac = 'marca'; break;
  12. case '04': $miesiac = 'kwietnia'; break;
  13. case '05': $miesiac = 'maja'; break;
  14. case '06': $miesiac = 'czerwca'; break;
  15. case '07': $miesiac = 'lipca'; break;
  16. case '08': $miesiac = 'sierpnia'; break;
  17. case '09': $miesiac = 'września'; break;
  18. case '10': $miesiac = 'października'; break;
  19. case '11': $miesiac = 'listopada'; break;
  20. case '12': $miesiac = 'grudnia'; break;
  21. default: $miesiac = 'niezidentyfikowany'; break;
  22. }
  23. return "$dzien $miesiac $rok";
  24. }
  25. /* End Data */
  26.  
  27. $data = data_pl();
  28. $tytul = $_POST['tytul'];
  29. $tresc = $_POST['tresc'];
  30.  
  31. if ($tytul and $tresc and $data) {
  32. $connection = @mysql_connect('localhost', 'root', '')
  33. or die('Brak połączenia z serwerem MySQL');
  34. $db = @mysql_select_db('webserv', $connection)
  35. or die('Nie mogę połączyć się z bazą danych');
  36.  
  37. $ins = @mysql_query("INSERT INTO aktualnosci SET tytul='$tytul', tresc='$tresc', data='$data'");
  38.  
  39. if($ins) echo "Rekord został dodany poprawnie";
  40. else echo "Błąd nie udało się dodać nowego rekordu";
  41.  
  42. mysql_close($connection);
  43. }
  44. ?>

dodaje Ci polską datę np 12 maja 2010.
croc
Adis92 - widzę dużo z bazami nie miałeś do czynienia smile.gif Nie znasz w ogóle idei przechowywania danych widzę. Jak można zapisywać datę w formacie "12 grudnia 2010"?questionmark.gifquestionmark.gif
Adis92
Kod
`date` varchar(50) COLLATE utf8_unicode_ci NOT NULL,

I nie ma problemu. Ps wiem że datę dodaje się d-m-r np 07:07:2010 ale tak jak tutuaj jest też można. Bo jeżeli ktoś chce mieć polską datę to po co za każdym razem ją filtrować skoro można wyciągnąć ją z bazy już zmienioną.

RoysoN - Tutaj masz plik który powinien poprawnie dodawać rekord:
  1. <?php
  2. /* Data */
  3. function data_pl(){
  4.  
  5. $dzien = date("d");
  6. $miesiac = date("m");
  7. $rok = date("Y");
  8. switch ($miesiac) {
  9. case '01': $miesiac = 'stycznia'; break;
  10. case '02': $miesiac = 'lutego'; break;
  11. case '03': $miesiac = 'marca'; break;
  12. case '04': $miesiac = 'kwietnia'; break;
  13. case '05': $miesiac = 'maja'; break;
  14. case '06': $miesiac = 'czerwca'; break;
  15. case '07': $miesiac = 'lipca'; break;
  16. case '08': $miesiac = 'sierpnia'; break;
  17. case '09': $miesiac = 'września'; break;
  18. case '10': $miesiac = 'października'; break;
  19. case '11': $miesiac = 'listopada'; break;
  20. case '12': $miesiac = 'grudnia'; break;
  21. default: $miesiac = 'niezidentyfikowany'; break;
  22. }
  23. return "$dzien $miesiac $rok";
  24. }
  25. /* End Data */
  26.  
  27. $title = $_POST['tytul'];
  28. $text = $_POST['tresc'];
  29. $date = data_pl();
  30.  
  31.  
  32. if($title and $text) {
  33.  
  34. include("includes/db.php");
  35.  
  36. $connection = mysql_connect($host, $user, $password)
  37. or die("<h5>Brak połączenia z serverem MySQL</h5>");
  38. $db = mysql_select_db($baza, $connection)
  39. or die("<h5>Brak połączenia z bazą danych</h5>");
  40.  
  41. $query = mysql_query("INSERT INTO news SET tytul='$title', tresc='$text', data='$date'") or die("MySQL ERROR: ".mysql_error());
  42.  
  43. if($query) echo "<h5>Nowość dodano poprawnie<h5>";
  44.  
  45. else echo "<h5>Błąd! Nie udało dodać się nowości.";
  46.  
  47. } else echo "<h5>Uzupełnij wszystkie pola</h5>";
  48.  
  49. ?>


db.php
  1.  
  2. <?php
  3.  
  4. $user= 'root';
  5. $password= '';
  6. $baza= 'webserv';
  7. $host= 'localhost';
  8.  
  9. ?>
croc
A pole date w MySQL to myślisz, że zostało stworzone tobie na złość? winksmiley.jpg OK powiem wprost - nie doradzaj w kwestiach, o których nie masz pojęcia. Nie mówię tego złośliwie, ale jeszcze chłopak to podchwyci. Datę zapisuje się w formacie RRRR-MM-DD i jest to jedyny sensowny zapis, bo jest SORTOWALNY. Poza tym miesięcy jest tylko 12, więc nie musisz zapisywać pełnej nazwy. Takie formatowanie odbywa się przy ODCZYCIE, a nie przy ZAPISIE.
frytek92
Date najlepiej zapisywać w czasie unix-owym (Link : http://pl.wikipedia.org/wiki/Czas_uniksowy) żeby przekowertować z normalnego czasu do unixowego, ale jeżeli zaczynasz to wystarczy ze zapiszesz date w jakimś normalnym formacie np : 2009-12-12 i dodasz do bazy

Adis92 <- rozwiązanie które podajesz jest bezsensu potem żeby zmienić format daty troche będzie trzeba sie namęczyć a przy moim rozwiązaniu wystarczy użyć strtotime a potem wydobyć poprzez date

Pozdrawiam
croc
Tak, UNIX-owy czas to też dobry wybór, choć uważam że lepiej korzystać z pola date.

P.S. Widzę, że za gadanie głupot też dają punkty "pomógł" haha.gif
frytek92
No niestety za gadanie głupot daja punkty winksmiley.jpg ale UNIX-owa data to najlepsze rozwiazanie poniewaz raz kownertujemy i mozemy sobie ustalać format daty, bez koniecznosci użycia funkcji strtotime przez co skrypt bedzie szybszy.
croc
Pamiętaj jednak o funkcjach MySQL do formatowania daty. Oraz o tym, że pole date również przechowuje tak naprawdę datę w formacie liczbowym.
Ulysess
czy najlepszym typem pola do przetrzymywanie w formie UNIX jest INT(10) questionmark.gif
frytek92
Wg.mnie tak bo potem możesz potem ładnie date wydobyć i za pomocą funkcji date ustalić format i wyświetlić ale wg mnie INT(11) byłby bardziej wskazane, a jak użyjesz formy DATE to z tego co wiem jedyny format to Y-M-D (2009-12-13)

Pozdrawiam
croc
A ja dalej utrzymuję, że to pole date jest do przechowywania daty winksmiley.jpg Owszem, w warstwie PHP może łatwiej obrobić czas UNIX-owy, ale co z tego, że zyskamy mikrosekundę? Na dacie w polu MySQL można wykonywać wiele elastycznych działań, np. posortować dane wg miesiąca lub np. wyświetlić sumę grupując po roku osobno itd. Po co kombinować z tym, co zostało wymyślone przez mądrych ludzi? frytek -> ty chyba podchodzisz do bazy tak jak ja kiedyś, tj pobrać dane i jak najszybciej spadać smile.gif A potem dane obrobić w PHP. Jednak często lepiej jest kazać bazie trochę pobawić się z danymi, bo ona jest porządnie zoptymalizowana pod tym kątem.
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.