Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]autmatyzacja generowania formularzy
Forum PHP.pl > Forum > Przedszkole
jolam
Bardzo prosiłabym o pomoc w poniższej sprawie.
Postanowiłam zautomatyzować tworzenie formularzy, żeby nie wpisywać kilka razy input, type, text i innych powtarzających się słów. Użyłam programu EXCEL i plików CSV. Po prostu podzieliłam całe pole input na kolumny, podobnie label. I zamiast wpisywać ileś razy to samo po prostu zaznaczam komórkę i przeciągam w dół. Oczywiście zdefiniowałam input id jako zawartość komórki label for. Po tym wczytuję plik i wyświetlam. I to działa, nie ma błędów z identyfikatorami i jestem bardzo zadowolona z efektu. Ale gorzej jeśli chce mieć w formularzu pole textarea albo opcje: chceckbox i radio. Wtedy wpisywanie do EXCEL trochę się rozjeżdża i nie jest już dla mnie takie wygodne. Chciałam WAS zapytać czy lepiej robić to dalej przy pomocy EXCEL czy zrezygnować z niego i przejść zupełnie do PHP? Trochę obawiam się, że w PHP będzie jeszcze więcej pisania, bo będę musiała sprawdzać czy teraz wyświetlany element formularza to input, czy textarea, czy coś innego. W ogóle bardzo zależałoby mi na tym abym po wypełnieniu formularza miała tabelę z wartościami (to jest w $_POST) i nazwami tych pól formularza. Bo chciałabym aby po niepełnym jego wypełnieniu pokazywał się formularz, a przy niewypełnionych polach informacje, że trzeba je wypełnić. Czyli muszę mieć to połączenie nazwy i wartości. Ale nie mogę wykorzystać indeksów tekstowych z $_POST bo tam nie mogłam używać polskich znaków, a dziwnie tak bez nich wyświetlać napisy. A dwa może w przyszłości chciałabym mieć w tej tablicy poza nazwą i wartością również nazwę odmienioną przez rodzaje/przypadki. Abym mogła wyświetlać tego typu napisy: Nie podałaś Miejscowości z której pochodzisz.

Proszę o radę i pomoc jak mogłabym uzyskać taki efekt najsprawniej i najmniejszym nakładem pracy, tak aby jego modyfikacja nie była czasochłonna i trudna - jednym słowem jak mogłabym to dobrze zautomatyzować?




Jola Mikołowska
sadistic_son
Przeczytałem ten teks 2 razy i chyba nie do końca rozumiem niektórych rzeczy blinksmiley.gif

Ogólnie tworzenie dużej ilości pól formularza będzie prostsze w php bo załatwi to 1 pętla, lub ewentualnie jedna do danego typu pola.

I co rozumiesz przez:
Cytat(jolam @ 12.07.2009, 21:08:45 ) *
Ale nie mogę wykorzystać indeksów tekstowych z $_POST bo tam nie mogłam używać polskich znaków
Wartością dla $_POST może być dowolny ciąg znaków, z polskimi znakami równierz. Chyba, że chodzi Ci o nazwę zmiennej $_POST['ąęźżćś'] wywali oczywiście błąd, ale $_POST['nazwa']='ąćśćźżó' nie sprawi żadnego problemu.


Tworzenie dużej ilości input'ów można zrobić np. prostą pętlą for:
  1. <?php
  2. $j=20; //ilość chcianych input'ów (powtórzeń pętli)
  3. $name=0; //nazwa początkowa pierwszego pola (będzie większa o 1)
  4. for($i=0;$i<$j;$i++){
  5. echo '<input type="text" name="';
  6. echo $name++;
  7. echo '"><br />';
  8. }
  9. ?>
I gotowe. Dla $j podajesz ile pól ma się stworzyć. Jeśli chcesz aby nazwy inputów były nie tylko samą cyfrą to musi to wygłądać tak:
  1. <?php
  2. $j=20; //ilość chcianych input'ów (powtórzeń pętli)
  3. $name=0; //nazwa początkowa pierwszego pola (będzie większa o 1)
  4. $t='jakas_Twoja_nazwa_pola_';
  5. for($i=0;$i<$j;$i++){
  6. echo '<input type="text" name="';
  7. $name++;
  8. $name2=$t.$name;
  9. echo $name2;
  10. echo '"><br />';
  11. }
  12. ?>
Wtedy nazwa input będzie wyglądać tak: jakas_Twoja_nazwa_pola_1, jakas_Twoja_nazwa_pola_2 itd.
jolam
Idea jest prosta. W formularzu jest ileś pól input/text. Przykładowo: imię, nazwisko, adres e-mail, ulubiony kolor. I wpisywanie tych wszystkich powtarzających sie ciągów znaków w kodzie html/php uznałam za mało fajne. Chciałam sobie ułatwić życie na przyszłość.
Darti
Napisz sobie prosty importer z plików csv + prosta walidacja. nie ma sensu przeklepywać wszystkiego z excella.
Fifi209
Cytat(sadistic_son @ 12.07.2009, 20:54:24 ) *
I co rozumiesz przez:Wartością dla $_POST może być dowolny ciąg znaków, z polskimi znakami równierz. Chyba, że chodzi Ci o nazwę zmiennej $_POST['ąęźżćś'] wywali oczywiście błąd, ale $_POST['nazwa']='ąćśćźżó' nie sprawi żadnego problemu.


Skoro mówiła o indexach to nie o wartościach...

Cytat(jolam @ 13.07.2009, 10:12:29 ) *
Idea jest prosta. W formularzu jest ileś pól input/text. Przykładowo: imię, nazwisko, adres e-mail, ulubiony kolor. I wpisywanie tych wszystkich powtarzających sie ciągów znaków w kodzie html/php uznałam za mało fajne. Chciałam sobie ułatwić życie na przyszłość.


Napisz sobie klasę do generowania formularzy. winksmiley.jpg

Skoro wiesz, że masz np. 3 inputy typu text i znasz ich id/name

to robisz w php taki trick:

  1. <?php
  2. function input($array) {
  3. echo '<input type="'.$array['type'].'" name="'.$array['name'].'" id="'.$array['id'].'">';
  4. }
  5.  
  6. $inputy = array(
  7. array('type' => 'text', 'name' => 'imie', 'id' => 'imie'),
  8. array('type' => 'text', 'name' => 'nazwisko', 'id' => 'nazwisko')
  9. );
  10.  
  11. foreach ($inputy as $value) {
  12. input($value);
  13. }
  14. ?>


(nie wiem czy działa, pisane podczas posta ;d )
jolam
Darti Mógłbyś mi napisać co dokładnie masz na myśli? Co trzymać w pliku CSV a co nie? I jak to efektywnie potem przerabiać miałabym na formularz. Bo przecież są różne pola: textarea, input/radio, input/text. Bardzo Cię proszę napisz mi dokładniej jak to powinno według Ciebie funkcjonować?
Darti
Cytat(jolam @ 13.07.2009, 09:52:47 ) *
Darti Mógłbyś mi napisać co dokładnie masz na myśli? Co trzymać w pliku CSV a co nie? I jak to efektywnie potem przerabiać miałabym na formularz. Bo przecież są różne pola: textarea, input/radio, input/text. Bardzo Cię proszę napisz mi dokładniej jak to powinno według Ciebie funkcjonować?


Zakładam że masz wszystko w excellu i masz możliwość eksportu z niego do csv.
Jeśli tak, to nie ma sensu przeklepywać tego do formularzy w przeglądarce - w końcu nie od tego są komputery.
najprościej coś takiego:
  1. <?php
  2. $row = 1;
  3. $uchwyt = fopen ("test.csv","r");
  4. while (($data = fgetcsv($uchwyt, 1000, ",")) !== FALSE)  {
  5.    if($row == 1) { // w pierwszym wierszu są nazwy kolumn
  6.         for ($c=0; $c < $num; $c++){
  7.             $nazwa_kolumny[] = $data[$c];
  8.         }
  9.    } else {
  10.         for ($c=0; $c < $num; $c++){
  11.             $dane[][$nazwa_kolumny[$c]] = $data[$c];
  12.         }
  13.    }
  14.    row++;
  15. }
  16. fclose ($uchwyt);
  17.  
  18. foreach($dane as $key => $wiersz){ //$key w zasadzie i tak nieistotny
  19.    //operacje na bazie albo + ewentualna walidacja, tutaj wyswietlanie
  20.    echo $wiersz['kolumna1'].' '.$wiersz['kolumna2'].'<br>';
  21. }
  22. ?>
jolam
fifi209 Twoja odpowiedź najbardziej mi pomogła, o czymś takim myślałam. Z pliku CSV odczytuję nazwy pól i potem je umieszczam w tablicy. Mam jeszcze jedną trudność, Co zrobić aby przy takim definiowaniu tabeli odwołać się do któregoś jej elementu

$inputy = array(
array('type' => 'text', 'name' => 'imie', 'id' => funkcja($inputy[]['name']),
);.

Powyższy fragment oczywiści nie działa. Czy da się coś takiego zrobić? Aby odwołać się do elementu przed chwilą zdefiniowanego? Bardzo by mi to pomogło.

Darti coś podobnego napisałam smile.gif Ale teraz zmagam się z tym odwołaniem z postu wyżej. Dziękuję Ci.
Fifi209
Cytat(jolam @ 13.07.2009, 20:10:54 ) *
fifi209 Twoja odpowiedź najbardziej mi pomogła, o czymś takim myślałam. Z pliku CSV odczytuję nazwy pól i potem je umieszczam w tablicy. Mam jeszcze jedną trudność, Co zrobić aby przy takim definiowaniu tabeli odwołać się do któregoś jej elementu

$inputy = array(
array('type' => 'text', 'name' => 'imie', 'id' => funkcja($inputy[]['name']),
);.

Powyższy fragment oczywiści nie działa. Czy da się coś takiego zrobić? Aby odwołać się do elementu przed chwilą zdefiniowanego? Bardzo by mi to pomogło.

Darti coś podobnego napisałam smile.gif Ale teraz zmagam się z tym odwołaniem z postu wyżej. Dziękuję Ci.


Bo w [] musisz podać index czyli hmm, zamknąć to jakoś w klasie? biggrin.gif
Powiedz mi dokładniej co chcesz zrobić to postaram się pomóc / coś napisać / podpowiedzieć.
jolam
fifi209 mam:
$inputy = array(
array('type' => 'text', 'name' => 'Imię', 'id' => funkcja($inputy[]['name']),
);.
napisałam funkcję wycinającą polskie litery i chciałabym jej użyć na 'name' aby otrzymać 'id'. I nie wiem jak to zrobić sad.gif Pomożesz mi?
Jeśli będziesz tak miły, to powiedz mi również jak dokładnie działają referencje. Jeśli miałabym:
foreach( $tab as &$item)
{
$item=$item+2;
}
to będzie działać, ale jeśli miałabym:
$zm=4;
foreach( $tab as &$item)
{
$zm=$item+2; // to bez sensu, ale chodziło mi o przykład
}
to $zm nadal będzie równe 4. Jak mogłabym to zmienić?
Mam jeszcze taką sprawę. Dwie tablice $tab1 i $tab2 i chciałabym móc operować na wszystkich parach elementów (jeden z $tab1 i jeden z $tab2). Coś w rodzaju
foreach( $tab1 as $t)
{
$t=$t+$t2 // chodziło mi o element z drugiej tablicy
}
Jak to zrobić? Bardzo Cie proszę pomóż mi.
Fifi209
Cytat(jolam @ 13.07.2009, 21:43:58 ) *
fifi209 mam:
$inputy = array(
array('type' => 'text', 'name' => 'Imię', 'id' => funkcja($inputy[]['name']),
);.
napisałam funkcję wycinającą polskie litery i chciałabym jej użyć na 'name' aby otrzymać 'id'. I nie wiem jak to zrobić sad.gif Pomożesz mi?

Raczej się tak nie da... ;p Ew. W klasie zapisać po kolei każdą zmienną, i na końcu tworzyć array ale to troszkę bez sensu lepsze będzie ctrl + c, ctrl + v ;p

Cytat(jolam @ 13.07.2009, 21:43:58 ) *
Jeśli będziesz tak miły, to powiedz mi również jak dokładnie działają referencje. Jeśli miałabym:
foreach( $tab as &$item)
{
$item=$item+2;
}
to będzie działać, ale jeśli miałabym:
$zm=4;
foreach( $tab as &$item)
{
$zm=$item+2; // to bez sensu, ale chodziło mi o przykład
}
to $zm nadal będzie równe 4. Jak mogłabym to zmienić?

np.

  1. <?php
  2. $zm=4;
  3. foreach( $tab as &$item)
  4. {
  5. global $zm;
  6. $zm=$item+2;
  7. }
  8. ?>


Cytat(jolam @ 13.07.2009, 21:43:58 ) *
Mam jeszcze taką sprawę. Dwie tablice $tab1 i $tab2 i chciałabym móc operować na wszystkich parach elementów (jeden z $tab1 i jeden z $tab2). Coś w rodzaju
foreach( $tab1 as $t)
{
$t=$t+$t2 // chodziło mi o element z drugiej tablicy
}
Jak to zrobić? Bardzo Cie proszę pomóż mi.


  1. <?php
  2. $tablica1 = array('a', 'b', 'c', 'd');
  3. $tablica2 = array('b', 'c', 'd', 'e');
  4.  
  5. foreach ($tablica1 as $key => $value) {
  6. echo $value . ' - '. $tablica2[$key].'<br/>';
  7. }
  8. ?>


Sprawdź co ten kod wyrzuci. (powinno działać, pod warunkiem że tablice mają te same długości i takie same klucze)
jolam
Raczej się tak nie da... ;p Ew. W klasie zapisać po kolei każdą zmienną, i na końcu tworzyć array ale to troszkę bez sensu lepsze będzie ctrl + c, ctrl + v ;p
Rozumiem. A jak mając tablice przykładową:
$t1 = array( array( 'a' => 'A'), array( 'b' => 'B'))
mogłabym stworzyć nową tablicę:
$t2 = array( array( 'a2' => funkcja($t1['a']), array( 'b2' => funkcja($t1['b']));
czyli, żeby nowa tablica zawierała tablice, której elementy postały w skutek użycia funkcji na elementach podtablic starej tablicy. I jak później mogłabym połączyć te tablice aby otrzymać:
$t3= array( array( 'a' => 'A', 'a2' => 'A2'),
array( 'b' => 'B', 'b2' => 'B2'));
gdzie te a2, b2 to indeksy z tablicy $t2 a A2, B2 to wartości. Wtedy rozwiązałabym swój problem, gdybym potrafiła to zrobić.

Wiem, że mogę używać global, ale czy da się inaczej, jakoś przez ta referencję? Chciałabym, żeby wartość zmiennej zmienionej w foreach lub funkcji nie była kasowana po jej opuszczeniu. Ale obawiam sie pomyłek zmiennych w czasie użycia global.
Fifi209
Naturalnie, można łączyć tablice więcej w manualu: http://pl.php.net/manual/pl/book.array.php ew. "ręcznie" (samemu coś napisać)
jolam
Nie potrafię tego zrobić:( Jest array merge, ale nie potrafię tego zrobić tak jak napisałam w poscie wyżej. Prosze pomóż mi, napisz po kolei jakich funkcji i jak mam użyć.Pozdrawiam
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.