Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dynamiczna zmiana nazwy zmiennej
Forum PHP.pl > Forum > PHP
rafiksq
jak zrobic zeby za kazdym razem po wcisnieciu przycisku submit w formularzu zwiekszyc nazwe zmiennej sesji o 1, np:
  1. <?php
  2. $_SESSION['imie1']
  3. $_SESSION['imie2']
  4. $_SESSION['imie3']
  5. ?>


?
PawelC
Zainteresuj się takim znacznikiem w php ++, a po co chcesz zwięszkać sesje o 1??
rafiksq
to ja wiem, o to chodzi ze jednego formualrza chce dodac np kilka imion i zeby kazde zapisywalo sie w sesji wiec chcialbym zrobic cos takiego zeby tworzylo sie dynamicznie:
pierwsze imie zapisywane w sesji $_SESSION['imie1'] = $_POST['imie1'];
drugie imie: $_SESSION['imie2'] = $_POST['imie2'];
trzecie imie: $_SESSION['imie3'] = $_POST['imie3'];
n-te imie: $_SESSION['imien'] = $_POST['imien'];
franki01
Hmm... Takie cos lepiej zrobic na tablicach, zeby to wygladalo tak:

Kod
$_SESSION['imie'][0] = 'imie1';
$_SESSION['imie'][1] = 'imie2';
$_SESSION['imie'][2] = 'imie3';
$_SESSION['imie'][3] = 'imie4';


I jak chcesz dodac nowe imie to robisz tak:

  1. <?php
  2. $_SESSION['imie'][] = $_POST['imie1'];
  3. $_SESSION['imie'][] = $_POST['imie2'];
  4. $_SESSION['imie'][] = $_POST['imie3'];
  5. $_SESSION['imie'][] = $_POST['imie4'];
  6. ?>


Numer klucza generuje sie automatycznie, wiec zadnego problemu nie ma smile.gif Jezeli chcesz zrobic Twoim sposobem, to trzeba albo, jak napisal @ExPlOiT stworzyc jakas zmienna, w ktorej bedzie trzymany numer ostatniego imienia, albo zrobic petle ktora bedzie sprawdzala kolejne wartosci od $_SESSION['imie1'] do $_SESSION['imien'] i jak wartosc bedzie pusta, to tam wsadzic kolejne imie.

Ale jednak ten sposob z tablicami jest najlepszy smile.gif
rafiksq
no tak ale ten twoj przyklad dla 4 imion a ja chce zeby to generowalo sie dynamicznie bo nie wiem ile imion bedzie dodawal ten kto bedzie wpisywal w ten formularz, jeden doda 4 drugi 50.
moj kod teraz wyglada tak i jest zrobiony dla 2 imion a chce zeby zmienne sie generowaly dynamicznie:

np:
$nr=$nr+1;
$_SESSION['imie'.$nr] = $_POST['imie'.$nr]; - wiadomo ,ze cos takiego nie dziala ale chodzi mi o cos podobnego

  1. <?
  2.  
  3. $imie='imie1';
  4. $nr='1';
  5.  
  6. if(isset($_POST['submit'])){
  7.  
  8. if(isset($_POST['imie1'])){
  9.  $_SESSION['imie1'] = $_POST['imie1'];
  10.  echo $_SESSION['imie'];
  11. }else{
  12.  $_SESSION['imie2'] = $_POST['imie2'];
  13. }
  14.  
  15. $nr=$_POST['nr']+1;
  16. $imie='imie'.$nr;
  17.  
  18.  
  19.  
  20. echo $_SESSION['imie1'];
  21. echo $_SESSION['imie2'];
  22.  
  23. }
  24. ?>
  25. <form method=POST>
  26. <input type=text name=<?=$imie?>>
  27. <input type=hidden name=nr value=<?=$nr?>>
  28. <input type=submit name=submit value=submit>
  29. </form>
phpion
~franki01 podał Ci odpowiedź!
  1. <?php
  2. foreach ($_POST['imie'] as $imie) {
  3. $_SESSION['imie'][] = $imie;
  4. }
  5. ?>

Tylko POSTem też musisz przesyłać tablicę czyli formularz robisz tak:
  1. <input type="text" name="imie[]" />

i po sprawie.
franki01
Przeciez to co napisalem bedzie dzialalo smile.gif

  1. <?
  2.  
  3. if(isset($_POST['submit'])){
  4. $_SESSION['imie'][] = $_POST['imie'];
  5. }
  6. ?>
  7. <form method="POST">
  8. <input type="text" name="imie">
  9. <input type="submit" name="submit" value="submit">
  10. </form>


I to wszystko. Jak chcesz wyswietlic to tak:

  1. <?php
  2. foreach($_SESSION['imie'] as $value) {
  3. echo $value.'<br />';
  4. }
  5. ?>



EDIT:
phpion.com byl szybszy i chyba dal lepsza odpowiedz smile.gif
rafiksq
czyli to ma wygladac tak:
  1. <?
  2.  
  3. $imie='imie1';
  4. $nr='1';
  5.  
  6. if(isset($_POST['submit'])){
  7.  
  8. foreach ($_POST['imie'] as $imie) {
  9. $_SESSION['imie'][] = $imie;
  10. }
  11.  
  12. $nr=$_POST['nr']+1;
  13. $imie='imie'.$nr;
  14.  
  15.  
  16.  
  17. echo $_SESSION['imie'][1];
  18. echo $_SESSION['imie'][2];
  19. echo $_SESSION['imie'][3];
  20.  
  21. }
  22. ?>
  23. <form method=POST>
  24. <input type=text name="imie[]">
  25. <input type=hidden name=nr value=<?=$nr?>>
  26. <input type=submit name=submit value=submit>
  27. </form>


questionmark.gif
franki01
Za jednym wyslaniem formularza dodajesz jedno czy kilka pol? Jezeli tylko jedno, to wtedy to co napisalem wyzej jest ok. I nie trzeba zadnych pol nr robic smile.gif
rafiksq
jeden POST ma doac jedno imie, ale niestety to nie dziala:
wywala:
Fatal error: [] operator not supported for strings in C:\Program Files\WebServ\httpd\rec_management\dod_kan\sesje.php on line 10
phpion
  1. <?php
  2.  
  3. // jesli $_SESSION['imie'] nie jest ustawione lub nie jest tablica...
  4. if (!isset($_SESSION['imie']) || !is_array($_SESSION['imie'])) {
  5. // ...przypisz jej pusta tablice
  6. $_SESSION['imie'] = array();
  7. }
  8.  
  9. // jesli przeslano formularz i pole 'imie' nie jest puste...
  10. if (isset($_POST['imie']) && !empty($_POST['imie'])) {
  11. // ...dopisz wartosc na koniec tablicy w sesji
  12. $_SESSION['imie'][] = $_POST['imie'];
  13. }
  14.  
  15. // poglad zawartosci tablicy sesji
  16. print_r($_SESSION['imie']);
  17. ?>
  18. <form method=POST>
  19. <input type=text name="imie">
  20. <input type=submit name=submit value=submit>
  21. </form>
rafiksq
teraz wywala:
Array ( [0] => fdffdg [1] => michal [2] => rala [3] => tomek )
phpion
Cytat(rafiksq @ 19.12.2007, 21:34:58 ) *
teraz wywala:
Array ( [0] => fdffdg [1] => michal [2] => rala [3] => tomek )

No to chyba dobrze, no nie?
rafiksq
Cytat(phpion.com @ 19.12.2007, 19:36:08 ) *
No to chyba dobrze, no nie?


no tak ale jak zrobic zeby wyswietlil same imiona a nie strukture tablicy
phpion
Cytat(rafiksq @ 19.12.2007, 21:40:51 ) *
no tak ale jak zrobic zeby wyswietlil same imiona a nie strukture tablicy

No bez jaj, z tym to sobie chyba poradzisz... podpowiedź: foreach po $_SESSION['imie'].
franki01
Ojej smile.gif Petle chyba jeszcze latwo napisac smile.gif

  1. <?php
  2. foreach($_SESSION['imie'] as $value) echo $value.'<br />';
  3. ?>
rafiksq
Cytat(franki01 @ 19.12.2007, 19:49:25 ) *
Ojej smile.gif Petle chyba jeszcze latwo napisac smile.gif

  1. <?php
  2. foreach($_SESSION['imie'] as $value) echo $value.'<br />';
  3. ?>


tak tak sorry za to juz sobie poradzilem smile.gif
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.