Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Dynamiczne określania nazwy zmiennych w skrypcie zawierającym formularz w nowej wersji PHP
wpm834
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 20.10.2012

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


Sprawa dotyczy późnego i dynamicznego określania nazwy zmiennych w skrypcie zawierającym formularz w nowych wersjach PHP

Zmienna ma nazwę postaci: opcja_$row_z[0] gdzie $row_z[0] jest generowana gdzieś w innym miejscu.
Tu dla uproszcznia przyjęto $row_z[0]=29;

Skrypt ten dobrze działa w WAMP5 (Apache1.3, PHP 5.04) ,
natomiast w XAMPP 1.8 (Apache2.4, PHP 5.47) nie rozpoznaje
zinterpretowanej nazwy zmiennej opcja_29 uzyskanej
z elementu checkbox formularza

wyswietlając na ekranie:

Array ( [opcja_29] => on )
opcja_29 :
Notice: Undefined variable: opcja_29 in C:\xampp-portable\htdocs\4-00.php on line 12

A oto kod "4-00.php"
  1. <HTML><HEAD><TITLE>Formularz</TITLE>
  2. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
  3. </HEAD><BODY> <?php $row_z[0]=29;
  4. $tmp = "opcja_$row_z[0]";
  5.  
  6. if(isset($_GET[$tmp]))
  7. { $temp = $_GET[$tmp];}else{ $temp = ""; }
  8. print_r($_GET);
  9.  
  10. if ($temp) {
  11. echo"<br> opcja_$row_z[0]"; echo" : ";
  12. echo ${"opcja_$row_z[0]"};
  13. print '<br><A HREF="4-00.php">Powrót do formularza</A>';
  14. } else {
  15. echo "<br> Nie ma wpisanych danych, wywietlamy formularz <br>";
  16.  
  17. print '<FORM ACTION="4-00.php" METHOD=GET>';
  18. // print '<INPUT TYPE="text" NAME="opcja_29">';
  19. print("<input type=checkbox name=\"opcja_$row_z[0]\" >");
  20. print '<INPUT TYPE="submit" VALUE="Wyslij">';
  21. print '</FORM>';
  22. }
  23.  
  24. ?></BODY></HTML>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wpm834
post
Post #2





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 20.10.2012

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


(1) Co do zmiennych globalnych, to były TAKŻE one wyłączone w INI (register_globals=off )
w WAMPIE gdzie skrypt pięknie hulał tylko była nieco mniejsza wersja PHP5.04.

(2)Jesli chodzi o $ temp to rzeczywiscie mogę wyświetlić echo $temp z tym że $temp nie jest już nazwą unikalną.
Sprawa jest taka ze checkboxów mogę miec dowolną ilość , tyle ile wyrzuci mi wynik z bazy danych,
poszczególne checkboxy nazywane są jako opcja_XX gdzie XX jest nieznane w momencie pisania skryptu.

(3) Muszę przyznać że zrobiłem kiedyś wersję całkowicie tablicową, to jest zamiast zmiennych łańcuchowych typu
opcja_$var dawałem $opcja[var] [ind] , no i oczywiście zastowałem tablice sesyjne i wsjo DZIAŁAŁO.

Myślałem ze zapomocą stringów też się da, ale nowy PHP (powyżej 5.4.4) to blokuje,
gdyż poprzednio interpreter widział przetworzone pole input jako zmienną.

Ten post edytował wpm834 2.04.2014, 11:01:52
Go to the top of the page
+Quote Post
trueblue
post
Post #3





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

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


Cytat(wpm834 @ 2.04.2014, 11:59:39 ) *
(3) Muszę przyznać że zrobiłem kiedyś wersję całkowicie tablicową, to jest zamiast zmiennych łańcuchowych typu
opcja_$var dawałem $opcja[var] [ind] , no i oczywiście zastowałem tablice sesyjne i wsjo DZIAŁAŁO.

To co stoi na przeszkodzie teraz?
A jeśli musisz zostać przy nazewnictwie "opcja_XX", to przy odbieraniu danych przeleć w pętli tablicę $_GET:
  1. foreach($_GET as $name=>$value)

i badaj $name pod kątem początkowego stringu "opcja_", jeśli taką ma nazwę, to wytnij resztę, rzutuj na int i będziesz mieć id opcji.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 18.10.2025 - 11:22