Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Formularze - zapamiętywanie danych
slawo
post
Post #1





Grupa: Zarejestrowani
Postów: 184
Pomógł: 0
Dołączył: 11.01.2010
Skąd: Nowa Dęba

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


Witam,
mam pewien formularz. Gdy wszystko zostanie uzupełnione dodaje się rekord do bazy. Jednak gdy nie wypełnimy jednej rzeczy to zwraca komunikat, że coś nie zostało wypełnione i pojawia się button 'popraw' (wstecz). Po jego kliknięciu chciałbym żeby zostawały wpisane wcześniej dane żeby nie wpisywać wszystkiego od nowa.
Go to the top of the page
+Quote Post
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Powinieneś to rozwiązać w ten sposób, by skrypt nie przechodził dalej, ale do skutku monitował o poprawne wypełnienie całego forma.

Drugie rozwiązanie to zapisanie sobie wartości pól w sesji i wtedy możesz je przywrócić w każdej chwili.
Go to the top of the page
+Quote Post
Bangeusz
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.04.2010
Skąd: Lubań

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


Cytat(blooregard @ 2.04.2010, 20:49:07 ) *
Powinieneś to rozwiązać w ten sposób, by skrypt nie przechodził dalej, ale do skutku monitował o poprawne wypełnienie całego forma.

Czyli dla jasności kolega mówi o funkcji exit;. Chodzi o to, że jak masz sprawdzanie, czy wszelkie wymagane pola zostały wpisane, to po tym dajesz exit;, by Ci nie dodawał rekordu z lukami, których użytkownik nie wypełnił.

Ten post edytował Bangeusz 14.04.2010, 21:44:15
Go to the top of the page
+Quote Post
P4vl0
post
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 2
Dołączył: 13.04.2010

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


Zapewne przekazujesz te dane jakąś metodą, więc możesz jako wartość pól wstawić te dane, np.
Kod
<input class="text" type="text" name="imie" value="<?php echo $_POST['imie'];?>" />


Ten post edytował P4vl0 15.04.2010, 06:57:34
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Bangeusz @ 14.04.2010, 22:43:20 ) *
Czyli dla jasności kolega mówi o funkcji exit;. Chodzi o to, że jak masz sprawdzanie, czy wszelkie wymagane pola zostały wpisane, to po tym dajesz exit;, by Ci nie dodawał rekordu z lukami, których użytkownik nie wypełnił.

Mylisz się. Chodzi o taki algorytm:
Kod
if (wypelniono_formularz && wypelniono_go_poprawnie) {
    zapisz_dane_do_bazy();
    
    przekieruj_na_strone_z_potwierdzeniem();
}
else {
    wyswietl_formularz_ze_wstawionymi_danymi(); // jeśli nie wypełnino formularza wstaw dane domyślne
}

Stosowanie exit (które sugerujesz) jest nieeleganckie i typowo amatorskie.
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(Bangeusz @ 14.04.2010, 22:43:20 ) *
Czyli dla jasności kolega mówi o funkcji exit;. Chodzi o to, że jak masz sprawdzanie, czy wszelkie wymagane pola zostały wpisane, to po tym dajesz exit;, by Ci nie dodawał rekordu z lukami, których użytkownik nie wypełnił.
@Bangeusz Po pierwsze exit() to nie funkcja tylko element składni języka. Po drugie exit() zatrzymuje wykonywanie skryptu, zatem wszystko co ma "nastąpić" po exit() nie nastąpi.
Zamiast exit() możemy użyć zmiennej typu boolean, która będzie przyjmować wartość false, jeśli tylko któreś z pól formularza będzie puste. Przykład
  1. <?php
  2. if(!empty($_POST)) {
  3. if(empty($_POST['firstname'])) {
  4. $invalidForm = true;
  5. $error['EMPTY_FIRSTNAME'] = true;
  6. }
  7. if(empty($_POST['lastname'])) {
  8. $invalidForm = true;
  9. $error['EMPTY_LASTNAME'] = true;
  10. }
  11. if(!isset($invalidForm)) {
  12. // wszystko jest w porządku i możemy
  13. // zapisać dane do bazy danych
  14. // później możemy wykonać przekierowanie
  15. echo 'It\'s OK!';
  16. }
  17. }
  18. ?>
  19. <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
  20. <input type="hidden" name="action" value="save" />
  21. <dl>
  22. <dt>First name:</dt>
  23. <dd>
  24. <input type="text" name="firstname" value="<?php echo isset($_POST['firstname']) ? $_POST['firstname'] : ''; ?>" /><?php if(isset($error['EMPTY_FIRSTNAME'])) echo ' Uzupełnij pole'; ?>
  25. </dd>
  26. <dt>Last name:</dt>
  27. <dd>
  28. <input type="text" name="lastname" value="<?php echo isset($_POST['lastname']) ? $_POST['lastname'] : ''; ?>" /><?php if(isset($error['EMPTY_FIRSTNAME'])) echo ' Uzupełnij pole'; ?>
  29. </dd>
  30. <dt></dt>
  31. <dd><input type="submit" value="Zapisz" /></dd>
  32. </dl>
  33. </form>

EDIT:
Oczywiście sposobów rozwiązania takiego typu problemów jest więcej.

Ten post edytował mortus 15.04.2010, 08:00:13
Go to the top of the page
+Quote Post
futura
post
Post #7





Grupa: Zarejestrowani
Postów: 39
Pomógł: 4
Dołączył: 4.01.2010

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


Stwórz sobie tablice np.
Kod
$errors = array();
. Po wysłaniu formularza metodą POST sprawdzasz warunki np:

Kod
if($_POST['imie'] == '') {$errors = "Nie pdałeś imienia!";} elseif($_POST['nazwisko'] == '') {$errors = "Nie pdałeś nazwiska!";}


I tak dalej sprawdzasz. Jak już skończysz sprawdzasz czy tablica zawiera jakieś dane np.

Kod
if(sizeof($errors) > 0)
{
   foreach ($errors as $blad)
    {
         echo "- ".$blad."<br />";
    }
}
else
{INPUT do bazy}

Jeżeli chodzi o zapamiętanie danych z formularza to najlepiej zrobić tak:

Kod
                  <td><label>Nazwisko:</label></td>
                  <td><input type="text" name="nazwisko" value="<? echo $_POST['nazwisko'];?>" /></td>


Ten post edytował futura 15.04.2010, 08:44:55
Go to the top of the page
+Quote Post
thek
post
Post #8





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A jeszcze lepiej utworzyć $errors jako tablicę i wrzucać do niej wszystkie błędy, które potem wyświetlamy. Jeśli nie ma ani jednego wpisu -> count($errors) == 0; <- to robimy insert/update do bazy. Jesli coś jest to w bazie nic nie robimy, ale wyświetlamy formularz z komunikatami błedów w tejże tablicy. Sam nieraz na forum to podawałem ale jak widać nigdy nikt szukajki nie żywa, a sam temat jest maglowany średnio raz na tydzień, ale nikomu nie chce się szukać jak widać. Bo po co, skoro prościej napisać nowy temat?
Powód edycji: [thek]: Nawet mimo tego znajdą się osoby wyskakujace z pomysłami w stylu exit(), które jak widać programowały chyba tylko na kartce papieru kilka lat temu lub robią to od bardzo niedawna opierając o wątpliwej jakości materiały.
Go to the top of the page
+Quote Post
futura
post
Post #9





Grupa: Zarejestrowani
Postów: 39
Pomógł: 4
Dołączył: 4.01.2010

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


Cytat
A jeszcze lepiej utworzyć $errors jako tablicę i wrzucać do niej wszystkie błędy, które potem wyświetlamy. Jeśli nie ma ani jednego wpisu -> count($errors) == 0; <- to robimy insert/update do bazy. Jesli coś jest to w bazie nic nie robimy, ale wyświetlamy formularz z komunikatami błedów w tejże tablicy.


Takie przykładowe rozwiązanie podałem wyżej (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Pilsener
post
Post #10





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Czyli tak powstał tutorial dla początkujących:
- nie używajmy die ani exit, lecz obsługi błędów w najprostszej postaci sprawdzając przed każdym etapem czy tablica błędów jest pusta, radzę też zainteresować się modelem MVC i wyjątkami, popatrzeć jak radzą sobie z obsługą błędów i formularzy popularne frameworki
- wszystkie żądania kierujemy do jednego pliku (najlepiej /index.php) a potrzebne do wygenerowania treści fragmenty kodu includujemy, czyli dostarczamy odpowiedni kod do danych/parametrów (z formularza, adresu, cfg), a nie wysyłamy danych do pliku z kodem (IMG:style_emoticons/default/smile.gif)
- ograniczajmy przekierowania, bo obniżają wydajność, wykryjemy bez problemu czy user kliknął "wstecz" czy nie, pamiętajmy, że odpowiednio ustawiając nagłówki http możemy zmusić przeglądarkę by zapamiętała wypełnienie pól formularza (dobre dla leniwych i początkujących)

I najważniejsze - twórzmy aplikację logicznie :
1. Odbieramy parametry z POST, GET, cfg
2. Przygotowujemy odpowiednie zmienne
3. Składamy z nich odpowiednią stronę łącząc je z kodem HTML
4. Wysyłamy stronę do przeglądarki

Bo potem wstyd, żeby po 15 latach rozwoju PHP ludzie echują i exitują jak najęci, co wymodzi to zaraz drukuje na ekranie, potem weź to przerabiaj :/
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: 24.08.2025 - 11:28