Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] przekazywanie danych tylko z jednego selecta
3miel
post
Post #1





Grupa: Zarejestrowani
Postów: 203
Pomógł: 0
Dołączył: 10.06.2004
Skąd: Gliwice

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


Witam,

mam tabele w swoim panelu administracjnym, ktora wyswietlam normalnie przez zapytanie MySQL i wszystko jest ok. Ale teraz zrobilem tak ze do kazdego rekordu przy wyświetlaniu jest select, przez ktory chce zmieniac np kolor( czarny, czerwony, niebieski, zielony itp. itd.)... i chce zeby to sie zapisalo w bazie.

I problem polega na tym, że jak zmianie jeden (dopisana akcja ze automatycznie sie wysyla formularz) to przekazuja się dane z wszystkich slectów (name="kolor[]" value="id_wersa").

Jak to zrobić, żeby przesyłały się dane tylko zjednego selecta?

Próbowałem tworzyć tyle formularzy ile jest wersow, ale nie dziala, tzn nie dziala zagniezdzanie formularzy bo mam jeden ogolny formularz dla calej tabeli (checkboxy zeby usunac wiecej rekordow...) i poprostu ten glowny nie dziala.

Macie jakies pomysły?


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Civil
post
Post #2





Grupa: Zarejestrowani
Postów: 86
Pomógł: 1
Dołączył: 19.09.2006
Skąd: Wrocław

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


Na gorąco: chyba nie da się zrobić tak, że wysyła się tylko część formularza, te dane i tak pójdą - ale można zrobić tak, że nie zostaną wzięte pod uwagę. Ostatnio robiłem coś podobnego i rozwiązałem to tak, że po prostu pobieram z bazy aktualne wartości i sprawdzam - jeżeli wysłana wartość selectu jest taka sama jak w bazie - to nie ma UPDATE, jeżeli jest różna to jest udpate. W tym celu ponazywałem sobie selecty w zależności od id rekody typu name="select_$r[id]" i pozniej pobrałem wartości ze wszystkich rekordów i porównywałem

  1. <?php
  2. $nowa_wartosc=${"select_$aktualna[id]"};
  3. if($aktualna[wartosc]!=$nowa_wartosc)
  4. {
  5. UPDATE
  6.  
  7. }
  8. else
  9. {
  10. NIE MA UPDATU
  11.  
  12. }
  13. ?>


Nie wiem, czy o takie rozwiązanie Ci chodzi.
Go to the top of the page
+Quote Post
3miel
post
Post #3





Grupa: Zarejestrowani
Postów: 203
Pomógł: 0
Dołączył: 10.06.2004
Skąd: Gliwice

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


Hmm rozumiem o co ci chodzi, ale to chyba nie jest zbyt optymalnie. Narazie mam zrobione tak, że zmieniają sie wszystkie wersy, a jesli sa takie same to poprostu zapisuje się ta sama wartosc i nic się nie zmiania.

Tylko pytanie co jest bardziej zoptymalizowane? Twoja wersja czy moja? Bo kazde SELECT pozniej IF to tez troche zajmuje pamieci...

Dlateog szukam calkiem innego rozwiązania...


--------------------
Go to the top of the page
+Quote Post
Civil
post
Post #4





Grupa: Zarejestrowani
Postów: 86
Pomógł: 1
Dołączył: 19.09.2006
Skąd: Wrocław

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


Hmm jest jeszcze jeden sposób, po prostu przekazujesz do przetwarzania formularza IDeki rekordów który wyświetlasz.

Każde przeładowanie pętli robi

$ideki.="$costam[id]|";

I później taki ciąg przy przetwarzaniu explodujesz, wyciągasz id i pobierasz tylko te ID, które były w tabelce i tylko z nimi porównujesz. Bo wiadomo, że coś czego nie było w danej tabelce się nie zmieniło.
Go to the top of the page
+Quote Post
loonger
post
Post #5





Grupa: Zarejestrowani
Postów: 104
Pomógł: 0
Dołączył: 19.06.2006
Skąd: Wrocław

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


możesz dać dla każdego wiersza tabeli dać inputa hidden z bieżącą wartością i później sprawdzać czy wartość selecta jest taka sama, jeśli nie updejtować ją.
Go to the top of the page
+Quote Post
Civil
post
Post #6





Grupa: Zarejestrowani
Postów: 86
Pomógł: 1
Dołączył: 19.09.2006
Skąd: Wrocław

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


Cytat(loonger @ 12.08.2007, 23:41:25 ) *
możesz dać dla każdego wiersza tabeli dać inputa hidden z bieżącą wartością i później sprawdzać czy wartość selecta jest taka sama, jeśli nie updejtować ją.


To bez sensu, bieżąca wartość będzie przecież w select.
Go to the top of the page
+Quote Post
loonger
post
Post #7





Grupa: Zarejestrowani
Postów: 104
Pomógł: 0
Dołączył: 19.06.2006
Skąd: Wrocław

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


pisząc 'bieżąca' miałem na myśli 'aktualnie ustawiona w bazie'.
Go to the top of the page
+Quote Post
3miel
post
Post #8





Grupa: Zarejestrowani
Postów: 203
Pomógł: 0
Dołączył: 10.06.2004
Skąd: Gliwice

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


No tak z tym to juz bym sobie poradzil, ale chodzi mi konkretnie o przekazanie tylko jednej wartosci, albo przkazanie wszystkich z zaznaczeniem od razu tej zmienionej, żeby nie bylo tyle zapytan do MySQL i porownan, bo to zle wpływa na czas generowania strony i obciaza serwer.


--------------------
Go to the top of the page
+Quote Post
loonger
post
Post #9





Grupa: Zarejestrowani
Postów: 104
Pomógł: 0
Dołączył: 19.06.2006
Skąd: Wrocław

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


robiąc to w zaproponowany przeze mnie sposób unikasz zbędnych zapytań. robiąc formularz sprawdzasz wszystkie wartości bo ustawiasz selecty na odpowiednich wartościach. także oprócz tego dodajesz inputa hidden np o nazwie wartosc_poczatkowa[id_wiersza_w_tabeli]. po wysłaniu formularza sprawdzasz w pętli dla każdego wiersza czy wartość selecta jest taka sama jak wartość hiddena, jeśli nie to znaczy że została zmieniona czyli trzeba ją updejtować.
Go to the top of the page
+Quote Post
3miel
post
Post #10





Grupa: Zarejestrowani
Postów: 203
Pomógł: 0
Dołączył: 10.06.2004
Skąd: Gliwice

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


no racja bardzo dobry pomysł @loonger. dziekuje


--------------------
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 Aktualny czas: 21.08.2025 - 03:26