Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][MySQL][PHP]Problem z wysyłaniem danych w formularzu (checkbox
inespew
post 23.11.2010, 07:54:42
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 18.11.2010

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


Witam

Mam formularz w którym jest kilka pól do wyboru, są to specjalności. Użyłem do tego checkboxa. Opcje te są generowane dynamicznie z tabeli mysql ze specjalnościami. Wszystko ładnie się wyświetla. Załóżmy że jest 6 pozycji. Użytkownik zaznaczy 1,4 i 6. Chcę aby w tabeli zapisało się to jako string oddzielony ", "
No i się zapisuje tylko zamiast stringa "1, , ,4, ,6" dostaję "1,4,6, , ,". Potrzebuję tego ponieważ później była by możliwość wyedytowania na takim samym formularzu w którym byłyby juz wcześniej zapisane wybory. Niżej daje kawałki kodu:

Kawałek formularza:
  1. <td width="30%" height="50">
  2. <div align="left">
  3. <?php
  4. $spectrener='';
  5. foreach ($spec as $spec_id => $specjalnosc)
  6. {
  7. ?>
  8. <input type="checkbox" name="spec[]" value="<?php echo $specjalnosc;?>"><?php
  9. echo $specjalnosc;?><br>
  10. <?php
  11. }
  12. ?>
  13.  
  14. </td>


Kawałek skryptu tranzakcji do bazy:
  1. $zapilspecjalnosci=mysql_query("SELECT * FROM specjalnosc");
  2. $iloscspecjalnosci=mysql_num_rows($zapilspecjalnosci);
  3. //tworzenie stringa ze specjalnosciami zaznaczonymi w formularzu
  4. $spectrener="";
  5. for($i=0;$i<$iloscspecjalnosci;$i++)
  6. {
  7. $spectrener=$spectrener.$_POST['spec'][($i-1)].", ";
  8. }


Z góry dziękuję za pomoc
Pozdrawiam
Go to the top of the page
+Quote Post
phpion
post 23.11.2010, 07:58:22
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Sprawdź, czy dany element tablicy $_POST['spec'] istnieje np. poprzez isset. Aktualnie dodajesz wszystkie elementy do ciągu nawet jeśli nie istnieją.

Całość możesz również zrobić szybciej, bez konieczności pisania pętli:
  1. $spectrener = isset($_POST['spec']) && is_array($_POST['spec']) ? implode(',', $_POST['spec']) : '';


Poza tym poczytaj o normalizacji struktury baz danych, bo Twoje rozwiązanie narusza tą zasadę. Konieczne jest dodanie nowej tabeli, w której powiążesz rekord wyjściowy (np. użytkownika) z rekordem specjalności.

Ten post edytował phpion 23.11.2010, 08:02:07
Go to the top of the page
+Quote Post
inespew
post 23.11.2010, 08:19:53
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 18.11.2010

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


Mniej wiecej wiem o co ci chodzi, ale nie dokonca. Oto kawałek mojej bazy danych:

Tabela specjalnosci

spec_id specjalnosc
1 programowanie
2 spawanie
3 oprogramowanie
4 sprzęt
5 jazda rowerem
6 sieci

I chciałbym aby jak ktos zaznaczy np: opcje 2 i 3 w tabeli trener było zapisanie jak niżej

I kawałek tabeli trener:

tr_imie ...... tr_spec
Jan ....... ,programowanie, spawanie, , , , ,

A jeśli chodzi o normalizacje troche czytałem. Mógłbyś mi napisać jak konkretnie miałaby wyglądać dodatkowa tabela?

Pozdrawiam

Ten post edytował inespew 23.11.2010, 08:20:56
Go to the top of the page
+Quote Post
nospor
post 23.11.2010, 08:30:33
Post #4





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




A tak trochę pytanie z innej beczki: a dużo docelowo będziesz miał tych specjalności?


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

"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
inespew
post 23.11.2010, 08:32:42
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 18.11.2010

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


Nie więcej niż 100, ale nie będą dodawane na raz tylko co jakiś czas
Go to the top of the page
+Quote Post
phpion
post 23.11.2010, 08:36:26
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(inespew @ 23.11.2010, 08:19:53 ) *
A jeśli chodzi o normalizacje troche czytałem. Mógłbyś mi napisać jak konkretnie miałaby wyglądać dodatkowa tabela?

trener_specjalizacja: [id_trenera, id_specjalizacji]

Obie kolumny w tabeli tworzą klucz główny, a każda z nich jest kluczem obcym do odpowiedniej tabeli.
Go to the top of the page
+Quote Post
inespew
post 23.11.2010, 08:40:39
Post #7





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 18.11.2010

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


No juz chyba wiem o co chodzi jeśli trener ma id 1 i specjalnosci o id 2,3 i np 5 to by było tak:

id_trenera id_specjalnosci
1 2
1 3
1 5

tak?
Go to the top of the page
+Quote Post
phpion
post 23.11.2010, 08:57:38
Post #8





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Dokładnie tak. Pamiętaj tylko, że aktualizując specjalności danego trenera musisz najpierw usunąć istniejące, żeby nie naruszyć ograniczenia klucza głównego. Dla Twojego przykładu więc wyświetlając ponownie formularz i zapisując dane musisz zrobić (trener ma id=1):
  1. -- usuniecie aktualnych wpisow
  2. DELETE FROM trener_specjalizacja WHERE id_trenera = 1;
  3.  
  4. -- wstawienie aktualnych wpisow
  5. INSERT INTO trener_specjalizacja (id_trenera, id_specjalizacji) VALUES (1, 2), (1, 3), (1,5);

Jako INSERT podałem tzw. multi insert, który jest zdecydowanie szybszy od pojedynczych INSERTów. Możesz oczywiście dodawać rekordy pojedynczo w pętli, ale będzie to wolniejsze.
Go to the top of the page
+Quote Post
inespew
post 24.11.2010, 09:31:20
Post #9





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 18.11.2010

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


Ok dodałem tabele o której była mowa wcześniej.

Zmieniłem trochę formularz:
  1. <?php
  2. foreach ($spec as $spec_id => $specjalnosc)
  3. {
  4. ?>
  5. <input type="checkbox" name="<?php echo 'spec'.$spec_id?>" value="<?php echo $specjalnosc;?>"><?php
  6. echo $specjalnosc;?><br>
  7. <?php
  8. }
  9. ?>


I dalej nie wiem jak to zapisać w bazie :/ Do pliku transakcji dostaję coś takiego:

w przypadku gdy zaznaczę no np 1, 2, 5 opcję "...&spec1=programowanie&spec2=spawanie&spec5=oprogramowanie..."
gdy np 3, 5, 7 opcję "...spec3=sieci&spec5=oprogramowanie&spec7=jazda+rowerem..."

i nie wiem jak to zapisać w tej tabeli. Jak zrobić zapytanie sql

POMOCY!!!
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: 6.07.2025 - 07:23