Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] formularz select w pętli while, formularz select w każdym rekordzie z bazy danych
evangelion
post 9.05.2015, 18:23:51
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 9.05.2015

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


Witam.
Piszę aplikację do zarządzania zleceniami i w pewnym momencie stanąłem w martwym punkcie.
Założenie było takie, że aplikacja pobiera wprowadzone wcześniej rekordy z bazy danych i wyświetla je w poszczególnych polach tabeli. Każdy wiersz oprócz danych miał mieć także formularz select. Użyłem do tego tej samej pętli która wyświetla rekordy , żeby mieć selecta w każdym wierszu. Problem polega na tym, iż działa tylko select pierwszego wiersza, a chciałbym , żeby każdy select działał niezależnie w każdym wierszu powiedzmy , że początkowo miałby zmieniać kolory tła w wierszu dla poszczególnego statusu zlecenia.
  1. while($wynik = mysql_fetch_assoc($zapytanie)){
  2. echo '<tr id="row"><td>'.$wynik['zlecenie'].'</td><td>'.$wynik['imie'].'</td><td>'.$wynik['nazwisko'].'</td><td>'.$wynik['telefon'].'</td><td>'
  3. .'<select>
  4. <option value="-">status</option>
  5. <option value="1">przyjeto</option>
  6. <option value="2">realizacja</option>
  7. <option value="3">zrealizowano</option>
  8. <option value="4">zapłacono</option>
  9. </select>
  10. </td></tr>';
  11. }


Będę wdzięczny za podpowiedź.
Go to the top of the page
+Quote Post
patwoj98
post 10.05.2015, 12:51:31
Post #2





Grupa: Zarejestrowani
Postów: 218
Pomógł: 16
Dołączył: 6.06.2014
Skąd: Warszawa

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


Bardzo rzuca się w oczy używanie przestarzałych metod MYSQL_* . Poczytaj o MYSQLI.


  1. while($wynik = mysql_fetch_assoc($zapytanie)){
  2. echo '<tr id="row"><td>'.$wynik['zlecenie'].'</td><td>'.$wynik['imie'].'</td><td>'.$wynik['nazwisko'].'</td><td>'.$wynik['telefon'].'</td><td>'
  3. .'<form action="" method="POST"><select>
  4. <option value="-">status</option>
  5. <option value="1">przyjeto</option>
  6. <option value="2">realizacja</option>
  7. <option value="3">zrealizowano</option>
  8. <option value="4">zapłacono</option>
  9. </select></form>
  10. </td></tr>';
  11. }


Spróbuj tak jak powyżej, powinno działać.
Go to the top of the page
+Quote Post
evangelion
post 10.05.2015, 23:35:27
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 9.05.2015

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


Dzięki poczytam o mysqli. Co do skryptu działa, lecz tak jak się obawiałem w tym układzie każdy formularz zmienia kolor wszystkim wierszom tabeli.
  1. $kolor = $_POST['kolory'];
  2.  
  3. while($wynik = mysql_fetch_assoc($zapytanie)){
  4. echo '<tr style="background-color:'.$kolor.'"><td>'.$wynik['zlecenie'].'</td><td>'.$wynik['imie'].'</td><td>'.$wynik['nazwisko'].'</td><td>'.$wynik['telefon'].'</td><td>'
  5. .'<form method="POST"><select name="kolory">
  6. <option value="-">status</option>
  7. <option value="red">przyjeto</option>
  8. <option value="green">realizacja</option>
  9. <option value="blue">zrealizowano</option>
  10. <option value="orange">zapłacono</option>
  11. </select>
  12. <input type="submit" value="zatwierdź">
  13. </form>
  14. </td></tr>';
  15. }

teraz zastanawiam się jak zrobić żeby powiedzmy select w wierszu 3 zmienił kolor tylko dla wiersza trzeciego tu jest główny problem.
Go to the top of the page
+Quote Post
nospor
post 11.05.2015, 07:44:24
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To przekazuj w formie rowniez ID wiersza dla ktorego ma byc zmiana i po klopocie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
patwoj98
post 11.05.2015, 19:57:08
Post #5





Grupa: Zarejestrowani
Postów: 218
Pomógł: 16
Dołączył: 6.06.2014
Skąd: Warszawa

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


A jak ma nie zmieniać? Przecież zmienną definiujesz przed pętlą, a potem wywołujesz tę samą zmienną w każdym obiegu. Poza tym, wartość w zmiennej $_POST['kolory'] będzie zawsze taka sama, nawet jeśli będzie w pętli. Tak jak pisał nospor, podaj ID, albo jak chcesz to zrób tak:

  1. $kolor = $_POST['kolory'];
  2. $i=0; //tak programistycznie ;)
  3. $td = '<td>'.$wynik['zlecenie'].'</td><td>'.$wynik['imie'].'</td><td>'.$wynik['nazwisko'].'</td><td>'.$wynik['telefon'].'</td><td>'
  4. .'<form method="POST"><select name="kolory">
  5. <option value="-">status</option>
  6. <option value="red">przyjeto</option>
  7. <option value="green">realizacja</option>
  8. <option value="blue">zrealizowano</option>
  9. <option value="orange">zapłacono</option>
  10. </select>
  11. <input type="submit" value="zatwierdź">
  12. </form>
  13. </td></tr>';
  14.  
  15. while($wynik = mysql_fetch_assoc($zapytanie)){
  16. if($i=="Tu numer wiersza w którym ma być ten kolor"){
  17. echo '<tr style="background-color:'.$kolor.'">'.$td;
  18. }
  19. else{
  20. echo '<tr style="background-color:'.$otherColor.'">'.$td;
  21. }
  22. $i++;
  23. }


Też powinno śmigać, ale z palca więc literówki mogą byćsmile.gif

Ten post edytował patwoj98 11.05.2015, 19:58:48
Go to the top of the page
+Quote Post
evangelion
post 12.05.2015, 09:51:47
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 9.05.2015

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


Trochę śmigało i trochę nie, ale nie wiem czy mnie dobrze zrozumieliście. To jeszcze raz. Założenie aplikacja wyświetla wiersze z danymi: numer zlecenia, imię, nazwisko, tytuł, opis itd. Każde zlecenia wyświetla się w nowym wierszu => każdy wiersz ma forma select => wybranie statusu zlecenia powoduje zmianę koloru tylko w tym wierszu w którym został użyty select. Czyli mam 10 zleceń wprowadzonych do bazy, wybieram pierwsze zmieniam status na przyjęto podświetla się na zielono, wybieram drugie zmieniam status w trakcie realizacji świeci się na czerwono wybieram trzecie zmieniam status zrealizowano świeci się na niebiesko itd. przyporządkowanie id czy też numeru zlecenia który też jest unikalny i umieszczenie go w pętli while powoduje powielenie jednego tylko numeru. działało dla wszystkich select wybierz tylko jedne wiersz. Myślałem być może o czymś takim każdy formularz select ma własne id i każde zlecenia ma własne id. Zmiana statusu zmienia kolor w wierszu w którym użyto formularza select wtedy i tylko wtedy , gdy id wiersza jest identyczne jak id forma select.
ps. To bardzo miłe , że mój post uzyskał odpowiedzi, szczerze nawet nie liczyłem. graduated.gif
Go to the top of the page
+Quote Post
nospor
post 12.05.2015, 12:50:54
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to wlasnie ci napisalem: przekazuj w formie ID wiersza/zlecenia czy co ty tam masz. Po wyslaniu forma, zmieniasz status tego rekordu na podstawie ID. A potem wyswietlajac na podstawie statusu kolorujesz


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
patwoj98
post 12.05.2015, 17:37:30
Post #8





Grupa: Zarejestrowani
Postów: 218
Pomógł: 16
Dołączył: 6.06.2014
Skąd: Warszawa

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


Czy Ty chcesz, aby ono się zmieniało jeżeli ktoś wybierze coś w select czy po przeładowaniu ?
Go to the top of the page
+Quote Post
evangelion
post 13.05.2015, 15:46:32
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 9.05.2015

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


Teraz to już po przeładowaniu. Podpowiedzi pewnie dobre ale nie na mój poziom. Jestem na etapie gdzie formularz przesyła również id zlecenia. Problem mam z pozostałymi zdaniami "Po wyslaniu forma, zmieniasz status tego rekordu na podstawie ID. A potem wyswietlajac na podstawie statusu kolorujesz"
Nie wiem czy jakieś warunki, czy pętla czy zapytanie sql z where. Czarna dziura.
Go to the top of the page
+Quote Post
patwoj98
post 13.05.2015, 15:55:05
Post #10





Grupa: Zarejestrowani
Postów: 218
Pomógł: 16
Dołączył: 6.06.2014
Skąd: Warszawa

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


Nie lepiej Ci w takim razie oddać zlecenia dla freelancera? Nie wiesz co robić, a podpowiedzi już są konkretne. Albo daj freelancerowi, albo napisz po prostu krok po kroku co ma się dziać.
Go to the top of the page
+Quote Post
salfunglandyare
post 13.05.2015, 15:59:39
Post #11





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

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


A takie coś?
  1. echo '<tr style="background-color:'.$wynik['status'].'"><td>'.$wynik['zlecenie'].'</td><td>'.$wynik['imie'].'</td><td>'.$wynik['nazwisko'].'</td><td>'.$wynik['telefon'].'</td><td>'
Go to the top of the page
+Quote Post
evangelion
post 14.05.2015, 17:07:02
Post #12





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 9.05.2015

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


Oddać? To nie jest zlecenie komercyjne, ani nawet zlecenie. Piszę to sam dla nauki języka php. Początki są trudne, tak jak ze wszystkim. Natomiast będę siedział przy tym dopóki nie zadziała chodź by nie wiem ile czasu miałoby mi to zająć.
Mimo wszystko dziękuje za podpowiedzi.

Uparty jak osioł thumbsupsmileyanim.gif . Jeszcze nie przekazuje statusu zlecenia do bazy co w późniejszym czasie pewnie będzie konieczne tak jak pobieranie kolorów z tabeli. Na razie mam tyle
  1. <?php
  2.  
  3. //Łączenie się z bazą danych i tabelą
  4. $conect = mysql_connect('host','baza','hasło') or die ('<h2><Padł serwer</h2>');
  5.  
  6. mysql_query("SET NAMES utf8");
  7. mysql_query("SET CHARACTER SET utf8");
  8. mysql_query("SET collation_connection = utf8_polish_ci");
  9.  
  10. $db = mysql_select_db('moja baza') or die ('Padła baza');
  11.  
  12. $zapytanie = mysql_query('select * from Klient');
  13.  
  14.  
  15. //--Blok nadawania numerow zlecen
  16.  
  17. //nadawanie numeru zlecenia
  18. $data = date('Ym');
  19.  
  20. //zwieksza wartosc o 20
  21. $liczba = "20";
  22.  
  23. //laczy date z liczba
  24. $nr_zlecenia = $data.$liczba;
  25.  
  26. //sprawdza ilosc wierszy w bazie
  27. $ilosc_wierszy = mysql_num_rows($zapytanie);
  28.  
  29. //sumuje numer zlecenia zwieksza o ilosc wierszy w bazie i zwieksza o 1
  30. $zlecenie_id = $nr_zlecenia + $ilosc_wierszy + 1;
  31.  
  32. //-------------------------------
  33.  
  34. $kolor = $_POST['kolory'];
  35. $id = $_POST['id'];
  36.  
  37. while($wynik = mysql_fetch_assoc($zapytanie)){
  38. echo '<tr style="background-color:'.$kolor.'"><td>'.$wynik['zlecenie'].'</td><td>'.$wynik['imie'].'</td><td>'.$wynik['nazwisko'].'</td><td>'.$wynik['telefon'].'</td><td>'
  39. .'<form method="POST"><select name="kolory">
  40. <option value="-">status</option>
  41. <option value="red">przyjeto</option>
  42. <option value="green">realizacja</option>
  43. <option value="blue">zrealizowano</option>
  44. <option value="orange">zapłacono</option>
  45. </select>
  46. <input type="hidden" name="id" value="'.$wynik['id'].'">
  47. <input type="submit" value="zatwierdź">
  48. </form>
  49. </td></tr>';
  50. }
  51.  
  52.  
  53. echo $id;
  54.  
  55. //-----------------------------------
  56.  
  57. //Obsługa formularza
  58.  
  59. $imie = $_POST['imie'];
  60. $nazwisko = $_POST['nazwisko'];
  61. $telefon = $_POST['telefon'];
  62.  
  63. //Walidacja formularza
  64. $imie_s = strlen($imie);
  65. $nazwisko_s = strlen($nazwisko);
  66. $telefon_s = strlen($telefon);
  67.  
  68. if ($imie_s > 0 && $nazwisko_s > 0 && $telefon_s > 0){
  69. mysql_query("insert into `Klient`(`id`,`zlecenie`, `imie`, `nazwisko`, `telefon`) values ('','$zlecenie_id','$imie','$nazwisko','$telefon')");
  70. }
  71. else{
  72. echo "<h3 class=\"alert\">Wprowadź dane</h3>";
  73. }
  74.  
  75.  
  76. mysql_close($conect);
  77. ?>


Krok po kroku: zmieniam status zlecenia w wierszu trzecim i zmienia się kolor w wierszu trzecim i tak juz zostaje póki nie zmienie mu statusu na jakiś inny. zmieniam ststus z wierszu 10 analogicznie - pewnie tak jak działają niektóre programy do zarządzania zleceniami.
wchodzę sobie za dwa dni do aplikacji i patrzę ach te dwa mam na żółto czyli są do zrealizowania, te cztery na zielono czyli przyjęto do realizacji, następne osiem żółte czyli w tarskcie realizacji. itd.

To co napisałem przesyła w tej chwili numer id w zależności w jakim wierszu użyje forma - czyli zmieniam coś w wierszu z id 10 wyrzuca mi 10. Tak logicznie gdyby każdemu tr przyporządkować id = ID z bazy danych i na tej podstawie wykonać zmianę koloru tylko w tym wierszu w którym dane id jest zgodne z id wiersza w którym forma użyłem.
To tak nad tym myślę.
Go to the top of the page
+Quote Post
salfunglandyare
post 14.05.2015, 22:38:34
Post #13





Grupa: Zarejestrowani
Postów: 150
Pomógł: 31
Dołączył: 10.01.2007
Skąd: Bydgoszcz/Inowrocław

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


Jeśli chcesz zmienić status po przeładowaniu, to raczej zapisuj go do bazy, na jakiejś podstawie musisz to robić. Jeśli chcesz bezpośrednio, musisz posiłkować się js. Nie wiem, czy korzystasz z jQuery, na wszelki wypadek kod w czystym JS:
  1. var colorChanger = {
  2. init : function(){
  3. var tr = document.getElementsByTagName('TR');
  4. for(var x=0; x<tr.length; x++){
  5. var myTR = tr[x];
  6. var select = myTR.getElementsByTagName('select');
  7. for(var i=0; i<select.length;i++){
  8. var mySELECT = select[i];
  9. if(mySELECT.getAttribute('name') == 'kolory'){
  10. mySELECT.onchange = function(e){
  11. var tr = this.parentNode.parentNode.parentNode;
  12. tr.style.backgroundColor = this.value;
  13. }
  14. }
  15. }
  16. }
  17. }
  18. };
  19. colorChanger.init();


//Edit: jsfiddle: https://jsfiddle.net/uargqf5n/

Ten post edytował salfunglandyare 14.05.2015, 22:39:19
Go to the top of the page
+Quote Post
evangelion
post 31.05.2015, 14:34:23
Post #14





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 9.05.2015

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


"No to wlasnie ci napisalem: przekazuj w formie ID wiersza/zlecenia czy co ty tam masz. Po wyslaniu forma, zmieniasz status tego rekordu na podstawie ID. A potem wyswietlajac na podstawie statusu kolorujesz"

Zrobione temat do zamknięcia.
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.08.2025 - 13:07