Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmienne dzięki pętli.
Forum PHP.pl > Forum > PHP
Rewil
Witam, mam pytanie odnośnie poprawności, kodu bo nie mam jak go za bardzo sprawdzić. Więc, chciał bym się dowiedzieć, jak te POSTY poprawnie napisać. Chodzi żeby, robiło automatycznie takie zmienne:
$link1 = $_POST['link1'];
$link2 = $_POST['link2'];
$link3 = $_POST['link3'];
$link4 = $_POST['link4'];
$link5 = $_POST['link5'];

  1. <?
  2.  
  3.  
  4. $x=1;
  5. while($x <= 5){
  6. ${imie.$x} = ${_POST[imie.$x.]};
  7. ${nazwisko.$x} = ${_POST[nazwisko.$x.]};
  8. ${imie_nazw.$x} = ${imie.$x}."_".${nazwisko.$x};
  9. ${obrazenia.$x} = ${_POST[obrazenia.$x.]};
  10. ${link.$x} = ${_POST[link.$x.]};
  11. $x++;
  12. }
  13. ?>


Później, w buttonie będzie coś takiego:
  1. <?
  2. $x=1;
  3. while($x <= 5){
  4. mysql_query("INSERT INTO choroby (time_id, imie_nazw, obrazenia, link, data, user_id) VALUES (LAST_INSERT_ID(), '${imie_nazw.$x}', '${obrazenia.$x}', '${link.$x}', '$data_pacjent', '$user_id')");
  5. $x++;
  6. }
  7. ?>
marcio
  1.  
  2. for($ = 0; $i <= 5; $i++) {
  3.  
  4.  
  5. $$imie.$x = $_POST['imie'.$i];
  6. $$nazwisko.$x = $_POST['nazwisko'.$i];
  7. $$imie_nazw.$x = $imie.$x."_".$nazwisko.$i;
  8. $$obrazenia.$x = $_POST['obrazenia'.$i];
  9. $$link.$x = $_POST['link'.$i.];
  10.    
  11. }
  12.  
  13.  


CHyba cos takiego powinno dzialac

Rewil
Niestety wywala, błąd dzięki Marcio, za odpowiedz. Z tego co udało, mi się dojść, to forma zapisu: ${imie.$x} Jest poprawna, ale krzaczy się przy ${_POST[nazwisko.$x.]};
mike
Kompletnym nieporozumieniem jest takie gimnastykowanie się.
Zmień formularz tak by do skryptu przychodziła tablica w postaci $_POST['link'][]
Rewil
Cytat(mike @ 29.09.2009, 11:58:04 ) *
Kompletnym nieporozumieniem jest takie gimnastykowanie się.
Zmień formularz tak by do skryptu przychodziła tablica w postaci $_POST['link'][]


To znaczy? Nie za bardzo, zrozumiałem.
mike
To znaczy, że Twój formularz wygląda podobnie do:
  1. <input type="text" name="link1" />
  2. <input type="text" name="link2" />
  3. <input type="text" name="link3" />

a ma wyglądać:
  1. <input type="text" name="link[]" />
  2. <input type="text" name="link[]" />
  3. <input type="text" name="link[]" />


P.S.
Dlaczego ten wątek nie jest na Przedszkolu?
Rewil
Nie, moge zrobić tak jak ty chcesz. Bo, mam za bardzo namieszane, w kodzie, zmianiając na takie coś jak, ty myślisz to bym musiał all od nowa robić ;x.

Potrzebuje, pętlą w php, tyle że poprawnie sformułowany post /oh.
mike
Masz błąd u podstaw i decydujesz się nie poprawiać go ale brnąć w bagno dalej.
Głupota.

Naturalną rzeczą jest poprawienie błędu popełnionego na etapie projektowania.
Rewil
Ostatnie, chyba pytanie i temat do zamknięcia. Jak, już zrobiłem tą twoją, metodą to znaczy iż, inputy przyjmują taką formę:
  1. <p id="duplicate">
  2. <label for="imie0"/>
  3. <input id="imie0" type="text" size="50" name="imie[]"/>
  4. <label for="nazwisko1"/>
  5. <input id="nazwisko1" type="text" size="50" name="nazwisko[]"/>
  6. <label for="obrazenia2"/>
  7. <input id="obrazenia2" type="text" size="50" name="obrazenia[]"/>
  8. <label for="link3"/>
  9. <input id="link3" type="text" size="50" name="link[]"/>
  10. </p>
  11. <p id="duplicate0">
  12. <label for="imie4"/>
  13. <input id="imie4" type="text" size="50" name="imie[]"/>
  14. <label for="nazwisko5"/>
  15. <input id="nazwisko5" type="text" size="50" name="nazwisko[]"/>
  16. <label for="obrazenia6"/>
  17. <input id="obrazenia6" type="text" size="50" name="obrazenia[]"/>
  18. <label for="link7"/>
  19. <input id="link7" type="text" size="50" name="link[]"/>


To metoda w php, _POST[imie0]; przestaje działać, bo ona(tak mi się, zdaje) wysyła po zawartości name inputow. Jak, wysyłać tym, samym sposobem, tyle żeby po id?
nospor
po pierwsze:
nie: $_POST[imie0]
a: $_POST['imie'][0]

po drugie:
zrob sobie print_r($_POST) a zobaczysz jak to idzie postem.

po trzecie: jak chcesz miec ID w imie, to zrob:
<input id="imie0" type="text" size="50" name="imie[2]"/>
gdzie 2 to dane ID
Dumdas
Po id się nie da bezpośrednio. Musiałbyś się bawić z js na zamienianie id w name, ale to po prostu nie ma sensu. Najlepiej będzie Ci mieć id i name takie samo dla 1 inputa.
Rewil
Hmm, jak się nie da bezpośrednio po id. To zmienia, kolej rzeczy:
  1. <p id='duplicate'><label for="imie"></label><input id="imie" type="text" name="imie" size="50">

Inputy są, generowane przez jQuery. Gdzie ich, forma wygląda właśnie w ten sposób, tamto poprzednie to było po wygenerowaniu strony.
nospor
jak sie nie da? Napisalem ci przeciez: imie[2]
Dumdas
Nospor, ale to nie będzie odwołanie się bezpośrednio do id, ale dalej do name. Nie można bezpośrednio do id się odwołać.
nospor
no tak. formularz wysyła to co jest w name a nie to co jest w id. skad ten pomysl by miał wysyłać po ID smile.gif
Rewil
No, nie wiem. Już, próbowałem jak mówisz, i cały czas id, zmienia natomiast name, zostaje w stylu xxx[].
http://samers.h14.pl/dodawanie_zapisujace.html <-- Może, to coś pomoże. W, tym chciałem zastosować, takie rozwiązanie.

//Nie odświeżyłem.

Chodzi o to, iż wysyłanie dlatego po id, bo mam cały skrypt ustawiony żeby, wysyłał imie1, imie2, imie3... Po wygenerowaniu strony, tylko id zmienia na taką, formę zapis, natomiast name już nie, co za tym idzie. Nie, dochodzi do bazy ;].
Dumdas
Nie no, połącz to, co ja napisałem z tym, co napisali inni.
Powinno Ci wyjść coś takiego:
<input id="id_inputa" name="name[id_inputa]" />
Tylko, ze to musisz ręcznie poustawiać i bd śmigać jeżeli o takie rozwiązanie Ci chodziło winksmiley.jpg.

@edit
Wytłumacz w takim razie to dokładniej:
Cytat
No, nie wiem. Już, próbowałem jak mówisz, i cały czas id, zmienia natomiast name, zostaje w stylu xxx[].
bo nie rozumiem.
Rewil
Powinno być, tak:
<input id="id_inputa" name="name[id_inputa]" />

Mam tak:
<input id="imie" type="text" name="imie[imie]" size="50">

Po wyświetleniu dalej jest tak:
<input id="imie" type="text" name="imie[]" size="50">

Wrzucać, to do pętli? I w klamry, dać "i" ? Tylko, nie wiem czy jQuery to przyjmie ;x
Dumdas
Dobra, dalej nie rozumiem, może ja napiszę jak to powinno być żeby osiągnąć jaki skutek.
<input id="idinputa" name="idinputa" /> - wartość zapisana w $_POST['idinputa'];
<input id="idinputa" name="name[idinputa]" /> - wartość zapisana w $_POST['name']['idinputa'];
<input id="idinputa" name="name[]" /> - wartość zapisana w $_POST['name'][index_liczbowy];
Teraz z tego skleć co chcesz ;P
Rewil
Działa, kocham cię. ;d
Dumdas
Acha, czyli wracamy do punktu wyjścia. Coś takiego ca się zrobić tylko przez włączenie na serwerze register_globals, co jest niebezpiecznie i szczerze odradzane.
Wyjście z pętlą jest chyba najlepsze.
Rewil
No, pętlą zrobiłem. Jest, elegancko teraz.
Jak by, ktoś potrzebował.

Tak, wygląda postać zapisu.
  1. <input id="imie" type="text" name="imie[]" size="50">


Robienie zmiennych.
  1. $x=0;
  2. while($x <= 150){
  3.  
  4. ${imie.$x} = $_POST['imie'][$x];
  5. $x++;
  6. }


Wysyłanie.
  1. $x=0;
  2. while($x <= 150){
  3. mysql_query("INSERT INTO choroby (imie) VALUES ('${imie.$x}')");
  4. }


Poprawiam ten kod.
  1. <input id="imie0" name="imie[]" type="text">
  2. <input id="imie1" name="imie[]" type="text">
  3. <input id="imie2" name="imie[]" type="text">
  4. <input id="imie3" name="imie[]" type="text">

Da się z poziomu php jakoś wyliczyć ile tych inputów się narobiło?
nospor
No przecież $_POST['imie'] to tablica. Nie umiesz policzyć elementow tablicy?
Pilsener
  1. $link1 = $_POST['link1'];
  2. $link2 = $_POST['link2'];


Ja dopowiem jeszcze, że jest taka funkcja jak:
http://pl.php.net/manual/pl/function.extract.php
Była powszechnie wykorzystywana przy problemach ze skryptami pod PHP4.
marcio
Cytat
Da się z poziomu php jakoś wyliczyć ile tych inputów się narobiło?

Przelicz post'a za pomoca sizeof()/count().

Po co 2 razy robisz petle while?
nasty
Kod
mysql_query("INSERT INTO choroby (imie) VALUES ('${imie.$x}')");
...to jest najlepsze ;-)
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.