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
vonski
post
Post #2





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

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


Cytat
Zgadza się , ale obecnie w PHP nie stosuje się zmiennych globalnych
i tutaj w moim skrypcie także nie występują - bo nie są do niczego potrzebne.


Zmienne globalne okazjonalnie się stosuje (e.g. Wordpress), a koledze bardziej chodziło o to, że prawdopodobnie na poprzednim serwerze było włączone register_globals i dlatego to działało. Raczej nie ma to związku, że teraz Ci nie działa na "nowym PHP".
Po odebraniu formularza dodaj to:

  1. parse_str($_SERVER['QUERY_STRING']);


to powinno zaimitować w pewnym sensie register_globals tylko dla tego konkretnego skryptu. Z tym że z tą funkcją trzeba raczej ostrożnie, to raz, a dwa, że jeśli musisz się uciekać do tego typu zabiegów, to raczej bym przemyślał logikę tego skryptu, może da się inaczej.
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 - 21:31