![]() |
![]() ![]() |
![]() |
![]()
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. |
|
|
![]()
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. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 14.04.2010 Skąd: Lubań Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
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 |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
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. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
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
EDIT: Oczywiście sposobów rozwiązania takiego typu problemów jest więcej. Ten post edytował mortus 15.04.2010, 08:00:13 |
|
|
![]()
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 |
|
|
![]()
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.
|
|
|
![]()
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) |
|
|
![]()
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 :/ |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 11:28 |