Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]obsługa błędów w formularzu
Forum PHP.pl > Forum > Przedszkole
ghastblood
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.
sajegib
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';
ghastblood
  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ę." }
sajegib
zamień isset na empty
ghastblood
Możesz powiedzieć mi coś więcej na temat nadawania tych class?
sajegib
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
ghastblood
Dzięki trochę przekombinowałem i myślałem o zmianie id inputa przez js
gitbejbe
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
b4rt3kk
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.
CuteOne
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
gitbejbe
@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 ; )
Martin-ZG
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.
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.