Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Problem z wysyłaniem danych w formularzu (checkbox
Forum PHP.pl > Forum > Przedszkole
inespew
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
phpion
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.
inespew
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
nospor
A tak trochę pytanie z innej beczki: a dużo docelowo będziesz miał tych specjalności?
inespew
Nie więcej niż 100, ale nie będą dodawane na raz tylko co jakiś czas
phpion
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.
inespew
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?
phpion
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.
inespew
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!!!
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.