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%)
-----


W tych miejscach
  1. <?php $row_z[0]=29;
  2.  
  3. oraz w linii 19 mamy pole
  4. print("<input type=checkbox name=\"opcja_$row_z[0]\" >");
  5.  
  6. które po zatwierdzeniu formularza jest traktowane przez interpreter PHP jako
  7. ${"opcja_$row_z[0]"} czyli $opcja_29


Muszę nadmienić ze ogólnie mamy tu zmienną o nazwie nieokreślonej,
stąd niemożność pobrania jej z $GET bo nie znamy nazwy klucza ani jego pozycji
gdyż z innej czesci skryptu są dodawane inne parametry.

$row_z[0]=29; przyjęto tu dla uproszczenia jako wartość chwilową żeby nie gmatwać.
Go to the top of the page
+Quote Post
markuz
post
Post #3





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


Cytat(wpm834 @ 1.04.2014, 23:33:50 ) *
W tych miejscach
  1. <?php $row_z[0]=29;
  2.  
  3. oraz w linii 19 mamy pole
  4. print("<input type=checkbox name=\"opcja_$row_z[0]\" >");
  5.  
  6. które po zatwierdzeniu formularza jest traktowane przez interpreter PHP jako
  7. ${"opcja_$row_z[0]"} czyli $opcja_29


Muszę nadmienić ze ogólnie mamy tu zmienną o nazwie nieokreślonej,
stąd niemożność pobrania jej z $GET bo nie znamy nazwy klucza ani jego pozycji
gdyż z innej czesci skryptu są dodawane inne parametry.

$row_z[0]=29; przyjęto tu dla uproszczenia jako wartość chwilową żeby nie gmatwać.


Zdaję sobie sprawę z tego, że to zmienna nie określona aczkolwiek nadal nie widzę abyś w którymś miejscu tworzył zmienną $opcja_XXX (którą to chcesz wyświetlić w lini 12. Jak chcesz wyświetlić zawartość $_GET['opcja_XXX'] to wyświetl $temp bo do niej przypisujesz wartość GET.

Do $row_z[0] przypisujesz 29 - nie ma to nic wspólnego ze zmienną $opcja_29.
Od kiedy to PHP sam konwertuje tablicę $_GET na zmienne? Skoro masz pole o nazwie opcja_29 nie oznacza to, że PHP stworzy zmienną $opcja_29 po wysłaniu GET.

Chyba, że czegoś nie zauważyłem (IMG:style_emoticons/default/wink.gif)

PS.
A skoro nie wiesz jakie dane będą przesyłane do GET to czemu stworzysz sesji która będzie przechowywała ID opcji? Wtedy będziesz wiedział jakie parametry GET wyświetlić.

Ten post edytował markuz 2.04.2014, 10:25:11
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: 15.10.2025 - 00:01