Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przenoszenie zmiennych tworzonych dynamicznie
-CoRlONE-
post 10.08.2005, 12:43:06
Post #1





Goście







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ć.
Go to the top of the page
+Quote Post
Kas
post 10.08.2005, 12:56:07
Post #2





Grupa: Zarejestrowani
Postów: 425
Pomógł: 0
Dołączył: 28.05.2005
Skąd: Warszawa

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


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.


--------------------
nospor, jestem z Wami.
Alpha IT
Go to the top of the page
+Quote Post
-Guest-
post 10.08.2005, 13:39:44
Post #3





Goście







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.
Go to the top of the page
+Quote Post
strife
post 10.08.2005, 14:51:19
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


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!


--------------------
Go to the top of the page
+Quote Post
Kas
post 10.08.2005, 15:34:57
Post #5





Grupa: Zarejestrowani
Postów: 425
Pomógł: 0
Dołączył: 28.05.2005
Skąd: Warszawa

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


W takiej sytuacji nie ma co dawać java script - źle zrozumiałem pierwszy post.


--------------------
nospor, jestem z Wami.
Alpha IT
Go to the top of the page
+Quote Post
-Guest-
post 10.08.2005, 15:38:18
Post #6





Goście







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.
Go to the top of the page
+Quote Post
strife
post 10.08.2005, 15:53:44
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


A zmienna $_GET['idzn'] nie informuje o tym które to jest zlecenie?


--------------------
Go to the top of the page
+Quote Post
-Guest-
post 10.08.2005, 15:57:04
Post #8





Goście







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.
Go to the top of the page
+Quote Post
strife
post 10.08.2005, 16:28:28
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


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!


--------------------
Go to the top of the page
+Quote Post
-Guest-
post 10.08.2005, 17:04:20
Post #10





Goście







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.
Go to the top of the page
+Quote Post
strife
post 12.08.2005, 13:52:07
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


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!


--------------------
Go to the top of the page
+Quote Post
corleone
post 12.08.2005, 16:03:42
Post #12





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 20.02.2005
Skąd: Watykan

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


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


--------------------
Never be afraid to try something new. Remember, amateurs built the ark; professionals built the Titanic.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.06.2025 - 03:16