Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Formularz ze spora iloscia przekazywanych danych i mozliwoscia ich poprawy
Forum PHP.pl > Forum > Przedszkole
tuks
Witam
Chce zrobic formularz zgloszeniowy do kursu, oprocz danych interesanta beda z nim wysylane dodatkowo odpowiedzi w roznych formach (radiobuttony,checkboxy, obszar tekstowy). Po wprowadzeniu danych i zatwierdzeniu formularza ma wyswietlic sie strona z wpisanymi danymi, jesl uzytkownik zrobil blad powinien miec mozliwosc poprawy. Nastepnie gotowy formularz powinien byc wyslany na adres osoby ktora przyjkuje zgloszenie a kopia na adres interesanta. Z ostatnia opcja jestem sobie w stanie poradzic ale prosze o jakies przykladowe rozwiazania tego problemu, jakis koncept. Myslalem o uzyciu tablic zamiast wielu roznych zmiennych, i chcialbym aby caly skrypt znajdowal sie w jednym pliku(chyba ze ze wzgledu na wydajnosc lepiej napisac skrypt w kilku plikach).

Nie zamieszczam kodu formularza bo sam nie wiem do konca jak on ma wygladac, poza tym chodzi tylko o kilka pomyslow jak napisac taki skrypt, chce sprobowac swoich sil i naoewno sie przy tym czegos naucze smile.gif nie bede wiecznie bazowal na gotowcach.

Pozdrawiam
flv
Instrukcja warunkowa + dane z POST'a, tak dokładniej to w czym problem?
tyranka
jak nie chcesz bazowac na gotowcach, to pierw sprobuj napisac, pozniej inni ci powiedza gdzie popelniles blad, poprawisz i sie nauczysz tongue.gif
tuks
Zatrzymalem sie w tym miejscu

  1. <?php
  2.  
  3. if(!$_POST['send'])
  4. {
  5. echo '<form name="test" method="post" action="test.php">
  6. <input type="text" name="imie" />
  7. <input type="submit" name="send" value="Send" />
  8. </form>';
  9.  }
  10.  
  11.  else
  12.  {
  13. echo "Twoje imie to $_POST[imie]";
  14.  }
  15.  
  16.  
  17. ?>


Po wyswietleniu tego imienia che miec dwa przyciski jeden "Popraw" a drugi "Potwierdz", po wcisnieciu Popraw powinien ponownie wyswietlic sie formularz z wypiosanymi danymi. Jak ma wyglada instrukcja warunkowa w takim wypadku ?
qwaq
przycisk powrotu:
  1. <a href="java script: history.go(-1)">tutaj przycisk</a>


po wciśnięciu w polach formularza są poprzednio wpisane wartości
tuks
Dzieki, to dziala smile.gif

Chcialbym jednak wiedziec jak mozna to zrobic w php, jedyne co mi przychodzi teraz na mysl, to ponowne wyswietlenie formularza i wypelnienie go danymi ze zmiennych. dry.gif
strife
No tak by wypadało zrobić tongue.gif

  1. <input type="text" name="dupa" value="<?php echo $_POST['dupa'] ?>" />


winksmiley.jpg
qwaq
robisz coś takiego:
<form> przekierowuje do tego samego pliku
czyli np action=index.php

index.php
  1. <?
  2. //na początku
  3. $text=$_POST['text'];
  4. //tutaj skrypt obsługujący dane z poprawnie wypełnionego formularza
  5. if (poprawne dane){
  6. .......
  7. ....
  8. ......
  9. }
  10. if(błędny wpis)
  11. {
  12.  echo("komunikat");
  13. }
  14.  
  15.  
  16.  
  17. if(którekolwiek pole puste lub błędne)
  18. {?>
  19. <input type="text" name="T1" size="20" value="<?if (isset($text)) {echo($tekst)}?>">
  20. <?
  21. }
  22. ?>



można tak zmodyfikować skrypt aby naprzykład jeżeli urzytkownik kliknie "DALEJ" to później wyświetlają mu sie inputy tylko te gdzie dane były błędne

---
Poprawiam BB Code.
---
~strife
tuks
qwaq, moglbys jeszcze raz wyjasnic zasade dzialania na przykladzie tego formularza z imieniem? nie do konca rozumiem jak to ma wygladac
grzegorzr
index.php <-- skrypt z akcja

chodziło o to aby jedna akcja
1) wyświetliła fromularz
2) dokonała walidacji
3) przesłała dane dalej

  1. <?php
  2. function wyswietl_formularz()
  3. {
  4. include_once 'szablon_formularza';
  5. }
  6. /*
  7.  * zalozenie ze nazwy zmiennych to waliduj_[czym powinno byc]_[nazwazmiennej]
  8.  * np. waliduj_string_nazwazmiennej
  9.  */
  10. function pobierz_dane_z_post()
  11. {
  12. $aPost = array();
  13. foreach($_POST as $k=>$v)
  14. {
  15. if( preg_match('/^waliduj/',$v) )
  16. {
  17. $aPost[$k] = $v;
  18. }
  19. }
  20. return $aPost;
  21. }
  22. function waliduj_formularz($aArray)
  23. {
  24. foreach( $aArray as $k=>$v)
  25. {
  26. //np. waliduj_string_imie
  27. if( preg_match('/_string_/', $v) )
  28. {
  29. //brutalnosc postepowania tylko dla przykladu
  30. if ( !is_string($v) ) die('nie jest stringiem zmienna: '.$k);
  31. }
  32. //np. waliduj_integer_sztuk
  33. if( preg_match('/_integer_/',$v))
  34. {
  35.  //brutalnosc postepowania tylko dla przykladu
  36. if ( !is_int($v) ) die('nie jest liczbą całkowitą zmienna: '.$k);
  37. }
  38. //itd.
  39. }
  40. }
  41. function wyslij()
  42. {
  43. //jaks funkcja zapisujaca dane
  44. }
  45. ?>

w HTML masz:
  1. <!-- w fomularzu mamy -->
  2. <form action="[sciezka_do_index.php]">
  3. ...
  4. <input name="waliduj" type="hidden" value="1">
  5. ...

nasz plik z akcja:
  1. <?php
  2. /**
  3.  * index.php
  4.  */
  5. if( !is_set($_POST['waliduj']) )
  6. {
  7. wyswietl_formularz();
  8. }
  9. elseif( is_set($_POST['waliduj']) && $_POST['waliduj'] == 1 )
  10. {
  11. $aPost = array();
  12. $aPost = pobierz_dane_z_post();
  13. waliduj_formularz($aPost);
  14. wyslij();
  15. }
  16. ?>

p.s. za preg_match nie ręcze, chodziło o koncepcję rolleyes.gif
p.p.s. w OOP to by jeszcze fajniej wyglądało i działało biggrin.gif , powyższe funkcje bardzo ładnie i sprawnie można przenieśc jako metody do klas:
  1. <?php
  2. /**
  3. * index.php
  4. */
  5. //laduje klase obslugujaca formularz
  6. $oFormularz = new templateForm('dane');
  7. //walidacja - gdy blad wyswietla ponownie formularz z poprzednio wpisanymi danymi
  8. $oFormularz->validate();
  9. //jesli tu jestesmy to walidacja udala sie i zapisujemy dane
  10. $oFormularz->saveData();
  11. ?>
tuks
Dumalem troch sam i wyszlo mi cos takiego, prawie dziala jak nalezy, prawie bo <?php echo $_POST[imie]?> jest wyswietlane jako zwykly tekst w polu a powinna byc chyba zmienna dry.gif

  1. <?php
  2. $fel=$_POST['zle'];
  3.  
  4. if (isset($_POST['dobrze']))
  5.  {
  6. echo 'wysylam';
  7.  }
  8. else
  9.  {
  10.  
  11. if(!$_POST['send'])
  12.  {
  13.  echo '<form name="test" method="post" action="test.php">
  14.  <input type="text" name="imie" value="<?php echo $_POST[imie]?>"/>
  15.  <input type="submit" name="send" value="Send" />
  16.  </form>';
  17.  }
  18.  
  19. else
  20.  {
  21. echo "Twoje imie to $_POST[imie]";
  22. echo '<form name="confirm" method="post" action="test.php">
  23. <input type="submit" name="dobrze" value="confirm" />
  24. <input type="submit" name="zle" value="change" />
  25. </form>';
  26.  }
  27.  }
  28. ?>


przyjrze sie jeszcze twojej propozycji grzegorzr smile.gif
zborecque
Spisz mi listę pól wraz z ich typem (radio, check, text) i daj mi 2 godziny smile.gif
tuks
zborecque, dzieki za zainteresowanie ale chce to zrobic sam snitch.gif przynajmniej sie czegos naucze i bede mogl pomagac innym winksmiley.jpg btw. sam jeszcze nie wiem ile tych pol bede mial
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.