Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][MySQL][PHP]kłopotliwe pole daty - formularz wysyłający datę do bazy danych
-czarnaowca-
post
Post #1





Goście







Witam,
Robię prosty panel admina jednak mam przy nim jako osoba początkująca sporo wątpliwości.
Otóż mam formularz z kalendarzem w którym można wybrać datę (potrzebne gdy dodaję newsa i chcę go oznaczyć datą) :

  1.  
  2. <ul >
  3. <li id="li_1" >
  4. <label class="description" for="element_1" name="el1">data </label>
  5. <span>
  6. <input id="element_1_1" name="element_1_1" class="element text" size="2" maxlength="2" value="" type="text"> /
  7. <label for="element_1_1">MM</label>
  8. </span>
  9. <span>
  10. <input id="element_1_2" name="element_1_2" class="element text" size="2" maxlength="2" value="" type="text"> /
  11. <label for="element_1_2">DD</label>
  12. </span>
  13. <span>
  14. <input id="element_1_3" name="element_1_3" class="element text" size="4" maxlength="4" value="" type="text">
  15. <label for="element_1_3">YYYY</label>
  16. </span>
  17.  
  18. <span id="calendar_1">
  19. <img id="cal_img_1" class="datepicker" src="calendar.gif" alt="Pick a date.">
  20. </span>
  21. <script type="text/javascript">
  22. Calendar.setup({
  23. inputField : "element_1_3",
  24. baseField : "element_1",
  25. displayArea : "calendar_1",
  26. button : "cal_img_1",
  27. ifFormat : "%B %e, %Y",
  28. onSelect : selectDate
  29. });
  30. </script>


W taki sposób mniej więcej definiuję to co wysyłam do bazy danych - z nagłówkiem i treścią jest ok, ale co zrobić z datą która ma yyyy dd i mm w oddzielnych polach oznaczonych różnym name:

  1. $data = $_POST['tu jest problem'];
  2. $naglowek = $_POST['element_3'];
  3. $tresc = $_POST['element_1_1'];

czy da się to jakoś zgrupować? jak można to rozwiązać nie zmieniając możliwie wygodnej formy kalendarza?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
-Gość-
post
Post #2





Goście







Kod
if (isset($_POST["submit"])){    tu instrukcja wysyłająca}

to zdaje się że działa (IMG:style_emoticons/default/smile.gif)
Tyle że chciałabym jeszcze dodać coś takiego co zabezpieczy przed kolejnym dodaniem identycznego rekordu po odświerzeniu strony - czy można dodać coś takiego? jak?
Go to the top of the page
+Quote Post
r4xz
post
Post #3





Grupa: Zarejestrowani
Postów: 673
Pomógł: 106
Dołączył: 31.12.2008

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


Cytat(Gość @ 11.02.2012, 21:45:59 ) *
Tyle że chciałabym jeszcze dodać coś takiego co zabezpieczy przed kolejnym dodaniem identycznego rekordu po odświerzeniu strony - czy można dodać coś takiego? jak?

tworzy osobny input (type=hidden), generujesz w nim losowy ciąg. po prawidłowym wysłaniu formularza zapisujesz ten kod do sesji.
przy następnym wywołaniu (odświeżeniu strony) sprawdzenia czy formularz został wysłany oraz czy ten 'hash' nie został już wykorzystany.
Go to the top of the page
+Quote Post
--mortus--
post
Post #4





Goście







Cytat(r4xz @ 12.02.2012, 11:11:21 ) *
tworzy osobny input (type=hidden), generujesz w nim losowy ciąg. po prawidłowym wysłaniu formularza zapisujesz ten kod do sesji.
przy następnym wywołaniu (odświeżeniu strony) sprawdzenia czy formularz został wysłany oraz czy ten 'hash' nie został już wykorzystany.

No tak. Chyba najprostsza metoda, a do głowy mi nie wpadła. Pozwolę sobie jednak nieco sprostować, bo owszem trzeba wygenerować losowy ciąg znaków, ale do tablicy sesji zapisujemy ten ciąg wcześniej, a dokładnie w momencie, w którym tworzymy formularz wraz z dodatkowym ukrytym polem na nasz hash. Po zatwierdzeniu/wysłaniu formularza będzie już za późno. Trzeba natomiast po zatwierdzeniu formularza i prawidłowym dodaniu rekordu do bazy danych ten hash z tablicy sesji usunąć, a sprawdzenie, czy hash został już wykorzystany będzie polegać na sprawdzeniu, czy odpowiednia zmienna w ogóle istnieje w tablicy sesji. Kod:
[PHP] index.php - pobierz, plaintext
  1. <?php
  2. // przed wysłaniem formularza
  3. $hash = uniqid(); // tutaj generujemy nasz losowy ciąg znaków, dla przykładu posłużyłem się funkcją uniqid()
  4. $_SESSION['hash'] = $hash;
  5. ?>
  6. <form action="akcja.php" method="post">
  7. <input type="hidden" name="hash" value="<?php echo $hash; ?>" />
  8. <!-- inne pola formularza i przycisk submit -->
  9. </form>
[PHP] index.php - pobierz, plaintext

[PHP] akcja.php - pobierz, plaintext
  1. <?php
  2. // sprawdzamy, czy formularz został wysłany
  3. // możemy do tego użyć choćby pola ukrytego, czy też przycisku submit
  4. // lub też sprawdzić REQUEST_METHOD
  5. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  6. // teraz sprawdzamy, czy hash "był już wykorzystany"
  7. if(isset($_SESSION['hash'])) {
  8. // nie był, zatem dodajemy rekord do bazy danych i usuwamy hash z tablicy sesji
  9. unset($_SESSION['hash']);
  10. // przekierowanie
  11. } else {
  12. // hash był już wykorzystany, można zatem wyświetlić odpowiedni komunikat błędu
  13. // przekierowanie
  14. }
  15. }
[PHP] akcja.php - pobierz, plaintext
Go to the top of the page
+Quote Post

Posty w temacie
- czarnaowca   [HTML][MySQL][PHP]kłopotliwe pole daty - formularz wysyłający datę do bazy danych   4.02.2012, 19:58:41
- - mortus   Możesz albo przesłać sobie wszystkie trzy części d...   4.02.2012, 20:13:07
- - Gość   korzystałam z generatora formularzy online - link ...   4.02.2012, 20:22:18
- - Gość   [PHP] pobierz, plaintext $rok = $_POST['eleme...   4.02.2012, 20:39:59
- - mortus   Pierwsze trzy linijki są dobrze, natomiast czwarta...   4.02.2012, 20:45:37
- - Gość   poprawiłam wg twojej instrukcji, w prawdzie notice...   4.02.2012, 20:59:17
- - Evinek   Nigdy nie wyciszaj żadnych funkcji. [PHP] pobierz,...   4.02.2012, 21:08:45
- - mortus   Zamień linijkę 2 na:[PHP] pobierz, plaintext $ins ...   4.02.2012, 21:09:39
- - Gość   dobra, dzięki wam dodaje się rekord, mało tego naw...   4.02.2012, 21:27:57
- - Gość   przepraszam, błąd wprost banalny z tym co pisałam ...   4.02.2012, 21:31:01
- - czarnaowca   witam, Wszystko działa, tylko teraz jeszcze dopra...   9.02.2012, 23:57:52
- - -mortus-   No cóż, podczas bezpośredniego uruchomienia skrypt...   10.02.2012, 11:47:57
- - czarnaowca   No więc notice się nie wyświetla i z tym jest ok, ...   11.02.2012, 21:34:09
- - Gość   może inaczej, jak sprawdzić czy kliknięto "su...   11.02.2012, 21:38:37
- - Gość   Kodif (isset($_POST["submit...   11.02.2012, 21:45:59
|- - r4xz   Cytat(Gość @ 11.02.2012, 21:45:59 ) T...   12.02.2012, 11:11:21
|- - -mortus-   Cytat(r4xz @ 12.02.2012, 11:11:21 ) t...   12.02.2012, 16:54:21
- - -mortus-   Nie ma przed "tym" skutecznego zabezpiec...   12.02.2012, 10:50:32


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: 26.12.2025 - 10:17