Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przenoszenie zmiennych tworzonych dynamicznie
Forum PHP.pl > Forum > Przedszkole
CoRlONE
Witam!
Mam taki problem i nie bardzo wiem jak go rozwiązać.
Tworzę sobie dynamicznie kilka wierszy
  1. <form name="form1" method="get" action="zn-edit.php" > 
  2. <? $res=zap("select * from zawarie where idzn=$_GET[idzn] ");
  3. while($r=mysql_fetch_array($res))
  4. {
  5. // 1-kolumna
  6. echo '<tr><td><input size="4" name=ida value='.$r[ida].'></td>';
  7.  
  8. // 2-kolumna
  9. echo '<td><a href=da-edit.php?ida='.$r[ida].'>'.ns($r[ida]).'</td>';
  10.  
  11. // 3-kolumna
  12. $rex=zap(" select idmu, idsa from awarie where ida='$r[ida]' ");
  13. echo '<td>'.pl($x[idmu]).'</td><td>';
  14.  
  15. //4-kolumna
  16. echo '<select onchange="this.document.forms.form1.submit();" name=idsa id=idsa>';
  17. $rep=zap("select * from status order by status");
  18. while($z=mysql_fetch_array($rep))
  19. echo '<option value='.$z[idsa].'>'.$z[status].'</option>';
  20. echo '</select></td></tr>';
  21.  
  22. }
  23. ?>
  24. </form>

i teraz dodatkowo w każdym wierszu w czwartej kolumnie mam listmenu i po zmienie tego list menu chciałbym aby php przesłał mi do tego samego formularza zmienioną wartość tego listmenu oraz odpowiadającą jej wartość kolumny 1 - IDA i jak to zrobić mam ja.

Pewnie te wartości name z 1 i 4 kolumny trzeba też tworzyć dynamicznie ale jak póżniej sprawdzić w którym wierszu zaszły zmiany no nie wiem nie wiem nie chcę tu za bardzo już komplikować.
Kas
Możesz napisac trochę jaśniej?

Nie wiem czy dobrze zorumiałem.
Ale to co chcesz osiągnać chyba trzeba zrobić na dwóch plikach php lub z użyciem java script.
Guest
Tak domyślam się może to być trochę zakręcone ale jeszcze raz.
Mam sobie taki formularzyk jest tworzony dynamicznie wszystko pbierane jest z bazy.


Każde z tych 3 przykładowych zgłoszeń ma swój id oraz status albo zrealizowane albo w trakcie realizacji.I teraz zmieniam w którymś zgłoszeniu status przełądowuje się formularz i chciałbym aby te zmiany zostały wprowadzone do bazy np mógłbym dać if(isset($_GET[tylko co tu wstawić]))
jak przekazac ida zgłoszenia oraz jego status idsa skoro wszystko było tworzone dynamicznie i do nazwy "name" tych pól formularza nie mogę się odwołać.

Można by zrobić tak
w tej lini
echo '<tr><td><input size="4" name=1,2,3,4..... value='.$r[ida].'></td>';

i w tej linii
echo '<select onchange="this.document.forms.form1.submit();" name=1,2,3,4... id=idsa>';
name tworzyć też dynamicznie i wtedy jeśli prześlemy forumalrz będziemy mieli te wszystkie zmienne i to by było już połowa sukcesu tylko jeszcze jak sprawdzić póżniej która wartości z pól 1,2,3,4,5,6..... była onchange.
strife
Nie rozumiem po co tutaj, dawać javascript... Daj normalne nazwy tych formularzy, czyli np. "form1", "form2", "form3" etc. Potem sprawdzasz czy te dane zostały wysłane np.
  1. <?php
  2.  
  3. if ( isset ( $_POST['form1'] ) && isset ( $_POST['form2'] ) )
  4. {
  5.  
  6. // ... jesli tak to dodajesz to do bazy.
  7.  
  8. }
  9. else{
  10.  
  11.  die('Wypelnij wszystkie pola');
  12. }
  13.  
  14. ?>


Rozumiem że problem by stanowiło który rekord ma się zedytować, możesz to rozwiązać przez metodę $_GET, przy edycji w pasku np. ?produkt=12, wtedy czytasz..
  1. <?php
  2.  
  3. echo 'edytujemy produkt numer ' . $_GET['produkt'];
  4.  
  5. ?>

Tak samo dodajesz do bazy czyli WHERE id = $_GET['produkt'] ...

Ewentualnie możesz umieścic pole HIDDEN w formularzu i na jego podstawie sprawdzać które to dokładnie zamówienie.

Pozdrawiam!
Kas
W takiej sytuacji nie ma co dawać java script - źle zrozumiałem pierwszy post.
Guest
No tak tylko że ja w pasku po przeładowaniu strony np z 3 zgłoszeniami (jak na rysunku) mam coś takiego
http://localhost/matrix/zn-edit.php?idzn=28&dr=0000-00-00&ida=1&status=1&ida=2&status=1&ida=3&status=1&idsz=1idfirmy=1&idop=8&mn=Serwis&hpd=&dz=&cr=

I teraż skąd ten biedny php ma wiedzieć czy to zgłoszenie z ida=1 czy z ida=2 czy z ida=3 miało przed chwilą zmieniony status.]

No i jak dam edytuję produkt nr $_GET['ida']; to które ida on mi weżmie pewnie ostatnie z listy

Nie wiem może jestem za cienki żeby to zrozumiec ale według mnie to tak nie zadziała.
strife
A zmienna $_GET['idzn'] nie informuje o tym które to jest zlecenie?
Guest
No właśnie nie bo idzn to jest id zlecenia a każde zlecenie może mieć kilka zgłoszeń awarii (ida) o których właśnie mowa.
strife
Cytat(Guest @ 2005-08-10 16:57:04)
No właśnie nie bo idzn to jest id zlecenia a każde zlecenie może mieć kilka zgłoszeń awarii (ida) o których właśnie mowa.

Acha, już po mału rozumiem, tylko jaka jest właśnie struktura bazy, bo z tego co zrozumiałem to:
Kod
idzn | ida1 | ida2 | ida3


Trochę tego nie rozumiem, trochę dziwnie pokazywane jest której awari dotyczy całość bo gdy mamy zmienne ida=1&status=1&ida=2&status=1&ida=3&status=1 to zmienna ida będzie równa 3, a status 1, jedno wyklucza drugie bo zmienna ida, jest nadpisywana znowu kawałek dalej to tak jakby pisać:
  1. <?php
  2.  
  3. $zmienna = 1;
  4. $zmienna = 2;
  5. $zmienna = 3;
  6.  
  7. ?>

I oczekiwać że dojdziemy do tego gdzie jest 1... blink.gif Proponuje dokładnie przeanalizować zmienne wychodzące $_GET bo myślę że ida to jest coś innego. Przykład:
  1. <?php
  2.  
  3. if ( $_GET['ida'] == '2')
  4. {
  5. die();
  6. }
  7.  
  8. ?>

niby w pasku jest ida=2 ale na końcu jest nadpisane ida=3 więc nie wiem o co biega, wyszło by na to samo pisząc tylko ida=3&status=1.

Może być też tak że niekoniecznie ilośc awari jest przekazywana przez pasek przeglądarki, równie dobrze na podstawie tego numer idzn jest automatycznie generowana ich ilośc bez wykorzystania metody $_GET.

Myślę że w tym przypadku jedynym dobrym rozwiązaniem jest przejrzenie nazw formularzy, nawet jeśli są generowane automatycznie, może jest jakaś zależność albo wgłębienia się w kod skryptu w miejscu gdzie te dane są wyświetlane.

Pozdrawiam!
Guest
Więc baza wygląda tak dla uproszczenia podam tylko te wartosci które moga interesowac

awarie
-------
ida
nazwa
status



zlecenia
---------
idzn



zawarie
---------
idzn
ida



status
--------
1-zrealizowane
2-w trakcie realizacji



i teraz tabelka zawarie moze wygladac nastepujaco jedno zlecenie (idzn) moze miec kilka awari (ida)

a więc np :

zawarie
--------
idzn ida
1 13
1 14
2 17
3 19
3 20

ida jest unkatowe tzn ze jedno zlecenie nie moze miec 2 takich samych awarii
ale jedno zlecenie może miec kilka różnych awarii np 3 ma -> 19,20

i teraz tak otwieram sobie zlecenie numer 1 które zawiera 13 i 14 zgłoszenie awarii
  1. <?php
  2.  
  3. $res=zap("select * from zawarie where idzn=$_GET[idzn] ");
  4. while($r=mysql_fetch_array($res))
  5.  
  6. {
  7. echo '<tr><td><input size=4 maxlength=4 name=ida value='.$r[ida].'</td>';
  8.  
  9. $rex=zap(" select status from awarie where ida='$r[ida]' ");
  10.  
  11.  
  12. echo '<select onchange="this.document.forms.form1.submit();" name=status >';
  13. $rep=zap("select * from status order by status");
  14. echo '<option value='.$x[idstatus].'>'.status($x[status]).'</option>'; //tutaj wpisuje sobie aktualny status awarii
  15.  
  16. while($z=mysql_fetch_array($rep))
  17. echo '<option value='.$z[idstatus].'>'.$z[status].'</option>'; /a tutaj dopisuje mozliwe statusy zeby sobiemozna bylo zmienic :)
  18. echo '</select></td></tr>';
  19.  
  20.  
  21.  
  22.  
  23. }
  24.  
  25.  
  26. ?>
no i wyswietliłem sobie zlecenie ze wszystkimi zgłoszeniami awari wraz z ich statusami i teraz właśnie chciałbym zmienić status takiej awarii submituje formę i mam to co napisałem wcześniej.
strife
Trochę to zakręcone, powiem tak, jeśli wyciągasz te awarie, to nie ma problemu z ich dodaniem, brakuje w tym kodzie name w inpucie, i z tego co zrozumiałem własnie to nie wiesz jaką nazwę dać bo to jest w pętli i każda inna była by nadpisywana.. mały przykład:
  1. <?php
  2.  
  3. echo '<form method="post" action="test.php">';
  4. while ( $i < 10 )
  5. {
  6.  
  7.   echo '<input name="kaczor[]" type="text"><br />' . "n";
  8.   $i++;
  9.   
  10. }
  11. echo '<input type="submit">';
  12. echo '</form>';
  13.  
  14. var_export( $_POST['kaczor'] );
  15.  
  16. ?>


Czyli musisz zrobić tam gdzie jest niewiadoma ilość name w tablicy tak jak ten "kaczor[]"...

Pozostaje później odpowiednio to odczytać z tablicy i UPDATE'ować..

Mam nadzieję że dobrze zrozumiałem.

Pozdrawiam!
corleone
No i właśnie o takie coś mi chodziło tylko pozostaje jeszcze jeden drobny problem skąd wiedzieć który z kaczorów 1,2,3,4,5..... czy 10 był zmieniony bo właśnie tego chcę updatować na stronie test.php questionmark.gifquestionmark.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.