Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP - checkbox, mysql
Forum PHP.pl > Forum > PHP
Omin
Witam wink.gif
Potrzebuje waszej pomocy. Chodzi o to, że chciałbym wyświetlić dane z bazy (dane zaznaczone w checkbox).

  1. <input type="checkbox" name="specjalizacje[]" value="Fitness"> Fitness<br>
  2. <input type="checkbox" name="specjalizacje[]" value="Trening ogólnorozwojowy"> Trening ogólnorozwojowy


Mam te 2 pola i chciałbym zrobić tak, że zaznaczając 2 wyszukało by mi z bazy danych pola, które w nazwie mają Fitness i Trening ogólnorozwojowy.
Pozdrawiam
Tomplus
Od biedy można stworzyć takie zapytanie.

SELECT * FROM `tabela_treningu`WHERE specjalizacje IN ('".$specjalizacje[0]."', '".$specjalizacje[1]."');
Omin
Chcę stworzyć wyszukiwarkę po specjalizacjach danych osób i u mnie to wygląda ta:

w bazie danych mam 3 tabele:
-Osoby (ID, imie,nazwisko,lokalizacja)
-Specjalizacje (ID_specjalizacji,nazwa)
-TabelaŁącząca(ID,ID_specjalizacji)

TabelaŁącząca łączy tabele Osoby oraz Specjalizacje.
Chciałbym by użytkownik, który zaznacza pole typu checkbox (np. Fitness, trening ogólnorozwojowy) i klikając przycisk "Szukaj" wyszukiwał osób które w bazie danych mają w nazwie Specjalizacji właśnie te nazwy.

Moje pytanie dotyczy zapytania. Robiąc zapytanie takie:
  1. SELECT * FROM Osoby INNER JOIN Tabelalaczaca ON Osoby.ID=Tabelalaczaca.ID INNER JOIN Specjalizacje ON Tabelalaczaca.ID_specjalizacji=Specjalizacje.ID_specjalizacji WHERE nazwa IN ('Fitness','Trening ogólnorozwojowy' )

Pokazuje mi 2 rekordy (ta sama osoba lecz z różną nazwą speclajizacji - bo 1 osoba może mieć ich kilka)
Pytanie brzmi w jaki sposób zrobić tak by rekordy się nie duplikowały lecz by pokazało np. jeden rekord który ma dwie wartości z pól checkbox?

Pozdrawiam wink.gif
Tomplus
to zamiast IN użyj po prostu AND

(nazwaLIKE '".$specjalizacje[0]."' AND nazwa LIKE '".$specjalizacje[1]."')

trueblue
Użyj GROUP BY na id osoby.
AND tu nic nie pomoże - nie wybierze żadnego rekordu.
Omin
Group by pomogło wink.gif
Napotkałem kolejny problem... Jako że wyszukuje poprzez ustawienie lokalizacji oraz specjalizacji rekordy nie są pokazywane w przypadku zaznaczenia tylko lokalizacji.

  1. SELECT `name`,`info`,`lokalizacja`,`silownia`,`nazwa` FROM `persons` INNER JOIN laczenie_sp ON persons.ID=laczenie_sp.ID INNER JOIN specjalizacje ON laczenie_sp.ID_specjalizacji=specjalizacje.ID_specjalizacji WHERE `lokalizacja` = '$lokalizacja' OR `nazwa` IN ('$specjalizacje[0]','$specjalizacje[1]') GROUP BY persons.ID


Macie jakieś pomysły? Zmieniając AND na OR w klauzuli WHERE dochodze tylko do tego, że pokazuje mi rekord spełniające jedno wymaganie LUB drugie.
Nie wiem... może jakieś podzapytanie

Pozdrawiam
trueblue
Buduj dynamicznie parametry dla klauzuli WHERE.
Nie tylko w tym przypadku rozwiąże to Twój problem, ale w przypadku kiedy dojdą nowe specjalizacje (będziesz wtedy dodawał je ręcznie w klauzuli WHERE?)
Omin
W jaki sposób mam budować te dynamiczne parametry?
Jakbyś mógł podpowiedzieć jak w necie to wyszukać to bym o tym poczytał wink.gif
Omin
Dziękuję, może jakoś uda mi się to ogarnąć wink.gif


Udało mi się zrobić dynamicznie checkboxy w taki sposób:

  1.  
  2. $sprawdzenie_specjalizacji = mysqli_query($db,"SELECT * FROM `specjalizacje`");
  3.  
  4. while ($specjalizacje_info = mysqli_fetch_array($sprawdzenie_specjalizacji)) {
  5. $specjalizacje_tablica[] = $specjalizacje_info;
  6. }
  7.  
  8. foreach ($specjalizacje_tablica as $key => $value) {
  9.  
  10. echo '<input type="checkbox" name="specjalizacje[]" value="'.$value['ID_specjalizacji'].'">'.$value['nazwa'].'<br>';
  11. }
  12.  


Moglibyście podpowiedzieć jak wysłać teraz dane do bazy danych? Póki co zrobiłem tak, że sprawdzam ID ostatniej osoby która się zapisuje tym oto zapytaniem:
  1. SELECT `ID` FROM `persons` ORDER BY `ID` DESC LIMIT 1


i teraz chciałbym wysłać specjalizacje do tabeli która łączy osoby ze specjalizacjami. Nie wiem jak zrobić to by wysłało np do osoby o ID 8 specjalizacje o ID 1,2,3 w osobnych rekordach.
W tabeli pola wyglądają tak:

ID_osoby | ID_specjalizacji


Chciałbym by po wyborze specjalizacji wyglądało to mniej więcej tak:


ID_osoby | ID_specjalizacji
1 ------------------ 1
1 ------------------ 2
1 ------------------ 3

Pozdrawiam




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

Poradziłem już sobie z problemem wink.gif

Zliczyłem ilość zaznaczonych specjalizacji, dałem to w pętle for i śmiga wink.gif
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.