Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]obsługa błędów w formularzu
ghastblood
post 23.06.2013, 19:55:58
Post #1





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


Mam takie pytanie na temat sprawdzania formularzu oraz przechowywania danych o błędach tzn

  1. if(!isset($error)){
  2. dodanie rekordu do mysql
  3. }


zrobiłem sobie dwa proste warunki

  1. if(!isset($_POST['nazwisko'])){
  2. $error= "Wypełnij pole Nazwisko";
  3. }
  4.  
  5. if(!isset($_POST['imie'])){
  6. $error= "Wypełnij pole Imię";
  7. }


i w szablonie dodałem warunek
  1. if(isset($error)){
  2. echo $error;
  3. }


i problem polega na tym że widzi mi tylko błąd związany z !isset($_POST['imie']) a Nazwisko mi pomija

wgl fajnie było by jak tworzył by mi to tablice z błędami to wtedy foreachem mógł bym wyświetlić całą listę błędów.

mam jeszcze jedno pytanie jak zrobić żeby inputy z błędami zmieniały kolor na czerwony
if jest błąd w polu imię to input o nazwie imie robi się czerwony.
Go to the top of the page
+Quote Post
sajegib
post 23.06.2013, 20:00:19
Post #2





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


Cytat
mam jeszcze jedno pytanie jak zrobić żeby inputy z błędami zmieniały kolor na czerwony


możesz np. wyświetlać inputy przez PHP i nadawać im odpowiednie klasy

sprawdź czy na pewno nazwisko jest puste
  1. print_r($_POST);



EDIT:

Przecież nadpisujesz warunkiem z imię zmienną $error, przez co ona trzyma tylko drugi błąd ( ten z imieniem )

zrób tablicę

  1. $error = array();
  2.  
  3. a później operator [] czyli:
  4.  
  5. $error[] = 'foo foo foo';
  6. $error[] = 'bar bar bar';


Ten post edytował sajegib 23.06.2013, 20:02:37
Go to the top of the page
+Quote Post
ghastblood
post 23.06.2013, 20:19:10
Post #3





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


  1. $error = array();
  2. // Obsługa błędów
  3. if(!isset($_POST['nazwisko_zawodnik']) && !isset($_POST['imie_zawodnik']))
  4. {
  5. $error[] = "Podaj Imię oraz Nazwisko zawodnika.";
  6. }
  7.  
  8. if(!isset($_POST['konkurencja']))
  9. {
  10. $error[] = "Wybierz przynajmniej jedną konkurencję.";
  11. }



print_r($_POST);

  1. Array ( [nazwisko_zawodnik] => [imie_zawodnik] => [add_submit] => Dodaj )


var_dump($error);

  1. [0]=> string(41) "Wybierz przynajmniej jedną konkurencję." }
Go to the top of the page
+Quote Post
sajegib
post 23.06.2013, 20:23:16
Post #4





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


zamień isset na empty
Go to the top of the page
+Quote Post
ghastblood
post 23.06.2013, 20:31:00
Post #5





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


Możesz powiedzieć mi coś więcej na temat nadawania tych class?
Go to the top of the page
+Quote Post
sajegib
post 23.06.2013, 20:43:30
Post #6





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


ja bym zapisywał do tablicy error np. 1 w wypadku gdy wszystko OK i tekst błędu gdy coś poszło nie tak, a potem wyświetlił formularz w php np.

  1. foreach($error as $foo)
  2. {
  3. if($foo != 1)
  4. {
  5. echo '<input type="text" name="xxx" class="klasa_błędnego_inputa">';
  6. }
  7. else
  8. {
  9. echo '<input type="text" name="xxx">';
  10. }
  11. }


proste jak budowa czołgu T-55 smile.gif

oczywiście do dokumentu HTML musisz dołączyć arkusz CSS z definicją klasy i np. zrobić czerwoną ramkę wokół inputa, ale te podstawy to już pewnie znasz
Go to the top of the page
+Quote Post
ghastblood
post 23.06.2013, 21:02:28
Post #7





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


Dzięki trochę przekombinowałem i myślałem o zmianie id inputa przez js
Go to the top of the page
+Quote Post
gitbejbe
post 24.06.2013, 06:21:04
Post #8





Grupa: Zarejestrowani
Postów: 515
Pomógł: 63
Dołączył: 27.08.2012

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


kombinacje ;p

jeśli chcesz miec naprawde prosto to wystarczy, że dodasz jedenk znak do swojego skryptu. a jest nim poprostu kropka ;p już mówie w którym miejscu
  1. $error = '';
  2.  
  3. if(!isset($_POST['nazwisko'])){
  4. $error.= "Wypełnij pole Nazwisko"; //przed znakiem = stoi kropka.
  5. }
  6.  
  7. if(!isset($_POST['imie'])){
  8. $error.= "Wypełnij pole Imię"; //tutaj też
  9. }
  10.  
  11. if(empty($error))
  12. {
  13. //zapis do bazy
  14. }

sprawdź, spodoba Ci się ;p
Go to the top of the page
+Quote Post
b4rt3kk
post 24.06.2013, 06:31:40
Post #9





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(gitbejbe @ 24.06.2013, 07:21:04 ) *
kombinacje ;p

jeśli chcesz miec naprawde prosto to wystarczy, że dodasz jedenk znak do swojego skryptu. a jest nim poprostu kropka ;p już mówie w którym miejscu
  1. $error = '';
  2.  
  3. if(!isset($_POST['nazwisko'])){
  4. $error.= "Wypełnij pole Nazwisko"; //przed znakiem = stoi kropka.
  5. }
  6.  
  7. if(!isset($_POST['imie'])){
  8. $error.= "Wypełnij pole Imię"; //tutaj też
  9. }
  10.  
  11. if(empty($error))
  12. {
  13. //zapis do bazy
  14. }

sprawdź, spodoba Ci się ;p


Tyle, że i tak całe te ify są błędne, bo nieważne czy się coś wpisze w pola nazwisko i imie. I tak w momencie wysłania formularza utworzy się tablica $_POST z kluczami nazwisko i imie. Także przejdzie wszystko.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
CuteOne
post 24.06.2013, 06:57:40
Post #10





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Po co się męczyć, kombinować i dla każdego formularza tworzyć wszystko na nowo...

1. Ściągnij sobie Zend Framework (1 lub 2)
2. W klasie obsługi formularza (dla zend 1.12):
  1. class My_Form extends Zend_Form
  2. {
  3.  
  4. public function init() {
  5.  
  6. $imie = new Zend_Form_Element_Text('imie');
  7. $imie->setLabel('Imie:')
  8. ->setRequired();
  9. $imie->addValidators(array(
  10. new Zend_Validate_NotEmpty(),
  11. new Zend_Validate_StringLength(array('min'=>3, 'max'=>20))
  12. ));
  13.  
  14. $this->addElement($imie);
  15. }
  16. }

Tadam, element formularza z walidacją gotowy

Ten post edytował CuteOne 24.06.2013, 06:58:32
Go to the top of the page
+Quote Post
gitbejbe
post 24.06.2013, 09:24:20
Post #11





Grupa: Zarejestrowani
Postów: 515
Pomógł: 63
Dołączył: 27.08.2012

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


@b4rt3kk

no to już jest inna sprawa... ja chciałem tylko pokazać jak najprościej jest sprawdzić zmienną $error
chłopak sam wyciągnie wnioski z walidacji po swoich błędach ; )
Go to the top of the page
+Quote Post
Martin-ZG
post 24.06.2013, 14:33:50
Post #12





Grupa: Zarejestrowani
Postów: 28
Pomógł: 3
Dołączył: 23.07.2009

Ostrzeżenie: (10%)
X----


Cytat(CuteOne @ 24.06.2013, 07:57:40 ) *
Po co się męczyć, kombinować i dla każdego formularza tworzyć wszystko na nowo...

1. Ściągnij sobie Zend Framework (1 lub 2)
2. W klasie obsługi formularza (dla zend 1.12):
  1. class My_Form extends Zend_Form
  2. {
  3.  
  4. public function init() {
  5.  
  6. $imie = new Zend_Form_Element_Text('imie');
  7. $imie->setLabel('Imie:')
  8. ->setRequired();
  9. $imie->addValidators(array(
  10. new Zend_Validate_NotEmpty(),
  11. new Zend_Validate_StringLength(array('min'=>3, 'max'=>20))
  12. ));
  13.  
  14. $this->addElement($imie);
  15. }
  16. }

Tadam, element formularza z walidacją gotowy


Po to żeby się czegoś nauczyć i zrobić samodzielnie. Po to żeby nie ładować całego frameworka z biblotekami do strony z 1 formularzem.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 09:04