Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: nazwa zmiennej jako zmienna
Forum PHP.pl > Forum > Przedszkole
Kossak
witam , mam maly problemik i nigdzie nie moglem znaleźć rozwiązania....

Generuje formularz w którym ilość elementów jest równa liczbie trafien z bazy mysql.
Formularz typu "checkbox" z nazwa która kryje sie pod zmienna $temp1.


$name=1;
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
{
foreach ($line as $col_value)
{
$temp = "'";
$temp1 =$temp.$name.$temp;
$_SESSION[$temp1]= $col_value;
echo "$col_value<input type='checkbox' name=$temp1>$temp1<br/>";
$name++;
}
}

I tu zaczynaja sie schody. Wysylał metoda POST.
jezeli wyświetlam zawartość $temp1 to wyskakuje : '1'
(jak wysylam metoda GET to pokazuje ze checkbox ma nazwe 1 czyli wszystko si)


Jednak jezeli na nastepnej stronce próbuje wydobyc $_POST[$temp1] to nawet jezeli jest zaznaczone pole to tak jakby go nie było... jezeli natomiast wyświetlam
np. $_POST['1'] to juz jest "on" i wszystko działa.

Tak samo mam z $_SESSION[$temp1] (tyle ze na odwrot). Jak podam wartośc np. $_SESSION['1'] to sie nic nie wyświetla. A jak $_SESSION[$temp1] to juz prawidlowo....

Czy ktos może mi wyjaśnić czemu tak sie dzieje ? I jak temu zaradzic ?
Kazda stronka zaczyna sie sesją i reszta zmiennych dziala normalnie.

Z góry dziekuję.
bigZbig
Popelniasz kilka bledow.
1. Zły tytul tematu bowiem nie porusza on problemu nazw zmiennych jako zmienne. Poczytaj sobie w manualu rozdział Zmienne zmienne

2. Jak uczy manual - "Nazw zmiennych dotyczą te same reguły, co innych rodzajów nazw w php. Poprawna nazwa zmiennej zaczyna się od litery lub znaku podkreślenia "_", po których może wystąpić dowolna ilość liter, cyfr lub znaków podkreślenia."
Ty w przypadku sesji uzywasz $temp jako indeksu tabliicy superglobalnej $_SESSION, a w przypadku pola input przypisujesz mu zmienna $temp nazwe. I tak w przypadku sesji twoja zmienna ma nazwe $_SESSION['1'] - co jest dozwolone a w przypadku pola input Twoja zmienna ma nazwe "1" co jest juz niedopuszczalne. (To ze odczytujesz ja z tablicy superglobalnej $_POST lub $_GET - to juz rzecz wtórna.)
  1. <?php
  2.  
  3. $index=1;
  4. while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
  5. {
  6. foreach ($line as $col_value)
  7. {
  8. $_SESSION[$index]= $col_value;
  9. echo $col_value.'<input type=\"checkbox\" name=\"nazwa['.$index.']\" />'.$index.'<br />';
  10. $index++;
  11. }
  12. }
  13.  
  14. ?>

Po wykonaniu formularza mozesz odczytac zmienne $_SESSION[$index] lub w zaleznosci jaka metoda przesylales zmienne $_POST['nazwa'][$index] lub $_GET['nazwa'][$index]

3. Specyfikacja xhtml mowi miedzy innymi ze wszystkie tagi musza byc zamkniete a wiec nie tylko <br /> (zwroc uwage na spacje przed ukosnikiem), ale takze <input />. Ponadto wartosci wszystkich atrybutow powinny byc otoczone cudzyslowami.
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.