Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zmienna zmiennej _POST
Forum PHP.pl > Forum > Przedszkole
maclast
Cześć,

Jestem początkującym użytkownikiem, więc za wszelkie niedociągnięcia z góry przepraszam.


Chciałbym zrobić dość dynamiczną obsługę wielu formularzy (mam kilkanaście, które z grubsza robią podobne rzeczy: zapis/odczyt do/z MySQL).

Wymyśliłem sobie taką konstrukcję:
-tablica z nazwami pól formularza
-zmienna zmiennej zwracająca pożądaną zmienną $_POST[]

Poniżej przedstawiam listing kodu i to co wyświetliło.
Jeśli jest jakieś wytłumaczenie dlaczego to mi nie działa to prosiłbym o komentarz.




Poszukałem na forum informacji i znalazłem to: http://forum.php.pl/index.php?showtopic=88094
Jednak nazwy pól formularza są używane też w innych miejscach skryptu, dlatego zależy mi na tablicy nazw pól.


LISTING:
  1. $t_nazw=array('pns1','pnp1','aaa3');
  2. for($aa=0; $aa < 3; $aa++) {echo $t_nazw[$aa].' -good<BR>'; }
  3.  
  4. for($a=0; $a < 3; $a++){
  5. $hgw="_POST['".$t_nazw[$a]."']";
  6. echo '<BR>zmienna: a '.$a.' | $hgw: '.$hgw.' | $$hgw: '.$$hgw.' |-end<BR>';
  7. }
  8. echo '<BR>wprowadzono dane do formularza pns1: '.$_POST['pns1'];
  9. echo '<BR>wprowadzono dane do formularza pnp1: '.$_POST['pnp1'];


Wydruk:
Cytat
pns1 -good
pnp1 -good
aaa3 -good

zmienna: a 0 | $hgw: _POST['pns1'] | $$hgw: |-end

zmienna: a 1 | $hgw: _POST['pnp1'] | $$hgw: |-end

zmienna: a 2 | $hgw: _POST['aaa3'] | $$hgw: |-end

wprowadzono dane do formularza pns1: 1500312-1206
wprowadzono dane do formularza pnp1: 1500312-1106




Pozdrawiam
Luneth
Kod
foreach($_POST as $zmienna)
{
    $tablica_zmiennych[] = $zmienna;
}

Coś takiego?
maclast
Jeśli dobrze zrozumiałem to ten kod przypisze mi do $tablica_zmiennych tylko te zmienne $_POST które mają wartość taką jak $zmienna.


Raczej nie o to mi chodzi.


Po kolei:

mam tablicę nazw pól, które są w formularzu:
  1. $tablica_nazw=array('pole1','pole2','pole3');


skrypt generuje mi formularz. np taki:
  1. <FORM ACTION="mainpg.php?baid=6" METHOD=POST>
  2. <TR>
  3. <TD>opis pola1</TD><TD><INPUT TYPE=TEXT NAME="pole1"></TD><TD>podpowiedz dla pola1</TD>
  4. <TR><TD>opis pola2</TD><TD><INPUT TYPE=TEXT NAME="pole2"></TD><TD>podpowiedz dla pola2</TD>
  5. <TR><TD>opis pola3</TD><TD><INPUT TYPE=TEXT NAME="pole3"></TD><TD>podpowiedz dla pola3</TD>
  6. </FORM>


i dalej chciałbym, żeby skrypt automatycznie mi wczytał z POST wszystkie dane (dla każdego pola) tyle, że w jakiejś pętli coby przy dużej ilości pól się nie męczyć (no i przy dużej ilości różnych formularzy).

wykombinowałem sobie żeby to zrobić zmienną zmiennych.
czyli tak jak napisałem w pierwszym poście.... tyle że nie działa.

i nie wiem czy to ja popełniam jakiś błąd.. czy akurat do tego typu zmiennych nie da się w ten sposób odwołać sad.gif


_olo_1984
Ale co nie działa konkretnie ?
  1. //...
  2. for($a=0; $a < 3; $a++){
  3. $hgw="_POST['".$t_nazw[$a]."']";
  4. $$hgw = 'Jakas wartosc '.$a; // przypisujemy tej zmiennej jakąś wartość
  5. echo '<BR>zmienna: a '.$a.' | $hgw: '.$hgw.' | $$hgw: '.$$hgw.' |-end<BR>';
  6. }
  7. //...


pozatym czy ja mam wrażenie, że chcesz tablice $_POST przepisać do innej tablicy ? Pozdr.
everth
To co robisz jest moim zdaniem bez sensu - ale jeśli chcesz mieć wyeksportować dane z tablicy bezpośrednio do zmiennych to extract().

Jeśli robisz to na tabeli POST bez filtrowania, to jest to niemal tak samo niebezpieczne jak włączone REGISTER_GLOBALS. Wybór należy do ciebie.
maclast
@_olo: nie działa konkretnie wyświetlenie zmiennej z POST;

czyli jak mam w tablicy jedną z wartości 'pns1', która to jest nazwą dla pola formularza... to jak wyciągam zawartość z POST nic mi nie zwraca.


dla uściślenia jeszcze raz uproszczony listing:
  1. $nazwa_pola_formularza='pns1';
  2.  
  3. $nazwa_zmiennej_post="_POST['".$nazwa_pola_formularza."']";
  4.  
  5. echo $$nazwa_zmiennej_post;


$$nazwa_pola_formularza - czyli zmienna ze zmiennej o zawartości "_POST['".$nazwa_pola_formularza."']" nie wyświetla mi nic.
za to wyświetlenie $nazwa_zmiennej_post jest ok, czyli: _POST['pns1']


EDIT:
masz trochę racji co do moich zamiarów... chcę zrobić tablicę podobną do POST, tyle że z automatu każda zmienna będzie już sprawdzona.
a że mam kilka formularzy to nie chce mi się w każdym wpisywać takich samych linijek kodu.
wolę zrobić tablicę nazw zmiennych... potem wyciągnąć z posta interesujące mnie dane (czyli konkretne post['nazwa zmiennej']) sprawdzić je... i zapisać do tablicy która będzie używana w obróbce danych.
taka tablica nazw pól formularza by mi wiele kodowania zaoszczędziła...


@everth:
jak już zaznaczyłem.. jestem początkującym, więc wiele rzeczy na początku będę robił bez sensu.

sens tego (w moim chorym umyśle) jest mniej więcej taki:
- mam tablicę nazw pól formularza - dzięki temu mogę automatycznie zrobić formularz
- potem mając dalej tą tablicę i tabele SQL o podobnych nazwach kolumn mogę łatwo dodawać nowe rekordy/wyświetlać wszystko.

chciałem zrobić w "pewnym sensie" automat do robienia formularzy i ich obsługi...
gdzie w kolejnych skryptach (czyli kolejnych formularzach) bym musiał zmienić tylko tablicę zawierającą nazwy pól.

ot takie dziwne myśli mam.

PS. oczywiście przeczytałem wątek o zabezpieczaniu skryptów (isset, real_escape_string, itp/itd) nie jest to zatem tu poruszane.


















EDIT:
OK... jestem idiotą...
  1. $t_nazw=array('pns1','pnp1','aaa3');
  2. for($aa=0; $aa < 3; $aa++) {echo $t_nazw[$aa].' -good<BR>'; }
  3.  
  4. for($a=0; $a < 3; $a++){
  5. $hgw=$_POST[$t_nazw[$a]];
  6. echo "<BR>zmienna: a ".$a." | \$chwdp: ".$hgw." |-end<BR>";
  7. }


Cytat
pns1 -good
pnp1 -good
aaa3 -good

zmienna: a 0 | $hgw: 1500131-0006 |-end

zmienna: a 1 | $hgw: 1500312-1808 |-end

zmienna: a 2 | $hgw: |-end



czyli zmiana linijki na: $hgw=$_POST[$t_nazw[$a]]; przyniosła zamierzony cel.

dziękuję za zainteresowanie smile.gif

mimo wszystko zmienna zmiennej dla "_POST['costam']" nie działa.... bo pewnie nie musi
_olo_1984
  1. $nazwa_pola_formularza='pns1';
  2.  
  3. $nazwa_zmiennej_post="_POST['".$nazwa_pola_formularza."']";
  4.  
  5. $$nazwa_zmiennej_post = 'cos';
  6.  
  7. echo $$nazwa_zmiennej_post;


przecież napisałem wcześniej
maclast
@_olo:

dopisałeś linijkę:
  1. $$hgw = 'Jakas wartosc '.$a; // przypisujemy tej zmiennej jakąś wartość


czyli podstawienie pod zmienną $_POST['costam'] jakiejś wartości... a nie to było moim celem.

tak czy siak, dzięki za pomoc smile.gif
everth
Ponieważ twoje podejście jest dla mnie obce (albo jestem za mało rozgarnięty by je zrozumieć winksmiley.jpg) - to w zamian proponuję trochę uwag ogólnych. Masz tablicę z której automatycznie generujesz formularz. Gut - nie musisz numerować NAME, wystarczy coś takiego
  1. <!-- stworzy w POST tablicę nazwaFormularza zawierające klucz nazwaPola -->
  2. <input name='nazwaFormularza[nazwaPola]' />
  3. <!-- automatycznie wynumeruje pola -->
  4. <input name='nazwaFormularza[]' />

PHP automatycznie przekształci ci to na tablicę. Co do walidacji formularzy to w PHP masz o tym cały dział. Polecam funkcję filter_var_array().
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.