Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP]SELECT php mysql checkbox - WYSZUKIWANIE, jak przeszukać bazę, różne wariacje checkboxa...
monsarrat
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 1
Dołączył: 29.02.2012
Skąd: Polska

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


Witam prosze o pomoc w skonstruowaniu kodu przeszukującego bazę pod kontem kategori praw jazdy gdy mam zanazczone wybrane checkboxy:

  1.  
  2.  
  3. <?php
  4. if(isset($_POST['wyszukiwanie_2'])) {
  5.  
  6.  
  7. $driverlicense_a = $_POST['driverlicense_a'];
  8. $driverlicense_b = $_POST['driverlicense_b'];
  9. $driverlicense_c = $_POST['driverlicense_c'];
  10. $driverlicense_d = $_POST['driverlicense_d'];
  11. $driverlicense_e = $_POST['driverlicense_e'];
  12. $driverlicense_t = $_POST['driverlicense_t'];
  13.  
  14.  
  15. $ssql = "SELECT * FROM items WHERE driverlicense_a LIKE '%$driverlicense_a%' AND driverlicense_b LIKE '%$driverlicense_b%' AND driverlicense_c LIKE '%$driverlicense_c%' AND driverlicense_d LIKE '%$driverlicense_d%' AND driverlicense_e LIKE '%$driverlicense_e%' AND driverlicense_t LIKE '%$driverlicense_t%'
  16.  
  17.  
  18. ";
  19. showresults($ssql, $rank);
  20. mysql_query($ssql) or die();
  21. }
  22. ?>
  23.  


ten kod wyciąga dane jeżeli osoba ma AB i T jednak chiałbym też odnależć osoby które mają TYLKO jedną z tych kategorii. Prosze o pomoc w skontruowaniu SELECTA...



  1. <div class="item inner_labels">
  2. <input type="hidden" name="driverlicense_a" value="non" />
  3. <input type="checkbox" id="Cb_a" name="driverlicense_a" value="A" />
  4. <label for="Cb_a">A</label>
  5.  
  6. <input type="hidden" name="driverlicense_b" value="non" />
  7. <input type="checkbox" id="Cb_b" name="driverlicense_b" value="B" />
  8. <label for="Cb_b">B</label>
  9.  
  10. <input type="hidden" name="driverlicense_c" value="non" />
  11. <input type="checkbox" id="Cb_c" name="driverlicense_c" value="C" />
  12. <label for="Cb_c">C</label>
  13.  
  14. <input type="hidden" name="driverlicense_d" value="non" />
  15. <input type="checkbox" id="Cb_d" name="driverlicense_d" value="D" />
  16. <label for="Cb_d">D</label>
  17.  
  18. <input type="hidden" name="driverlicense_e" value="non" />
  19. <input type="checkbox" id="Cb_e" name="driverlicense_e" value="E" />
  20. <label for="Cb_e">E</label>
  21.  
  22. <input type="hidden" name="driverlicense_t" value="non" />
  23. <input type="checkbox" id="Cb_t" name="driverlicense_t" value="T" />
  24. <label for="Cb_t">T</label>
  25.  
  26.  
  27. <div class="item inner_labels last" align="right">
  28. <input type="submit" name="wyszukiwanie_2" class="button" value="<?php echo $lang['SEARCH'];?>" />
  29. </div>
  30.  
  31. </div>
  32.  

Go to the top of the page
+Quote Post
kadlub
post
Post #2





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


  1. <input type="checkbox" id="Cb_e" name="driverlicense_e" value="E" />


trochę nie tak
i nie wiem po co ci te ukryte pola

zmień w tych wszystkich inputach
<input type="checkbox" id="Cb_e" name="driverlicense[]" value="E" />
i dlaczego te pola ukryte mają takie samo name jak checkboxy
poczytaj sobie o implode() i może o wyszukiwaniu rekordów które należą do jakiegoś zbioru
IN ale nie wiem czy to ci się przyda najpierw zrób to co ci powiedziałem z tym formularzem
Go to the top of the page
+Quote Post
monsarrat
post
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 1
Dołączył: 29.02.2012
Skąd: Polska

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


Gdy usunę ukryte IMPUTY i dodam [] do driverlicense krzyczy mi Notice: Undefined index: driverlicense_a

natomiast gdy gdy dodaje do bazy CHECKBOXY z jednej tabeli driverslicense to dostaje komunikat o array()...


być może źle zapisuje dane do bazy i tu jest błąd rozbijając to na poszczególne tabele
nie wiem jak rozwiazać problem z tymi CHECKBOXAMI...

Ten post edytował monsarrat 29.02.2012, 12:13:01
Go to the top of the page
+Quote Post
kadlub
post
Post #4





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


Po co ci te ukryte inputy??
daj
print_r($_POST['driverlicense']);
w tej tablicy masz wszystkie zaznaczone checkboxy

Ten post edytował kadlub 29.02.2012, 12:13:55
Go to the top of the page
+Quote Post
monsarrat
post
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 1
Dołączył: 29.02.2012
Skąd: Polska

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


Ukryte imputy eliminują 'nie zaznaczone' checboxy jeżeli nie jest zaznaczony to ma wartość NON

print_r wyświetlił mi wszytskich urzytkowników z bazy co maja i nie maja prawojazdy...

Ten post edytował monsarrat 29.02.2012, 12:30:41
Go to the top of the page
+Quote Post
kadlub
post
Post #6





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


usuń te ukryte inputy. zrub z tymi checkboxami jak ci powiedziałem.
i dopiero wtedy zrób
  1. print_r($_POST['driverlicense']);

i zobaczysz że w tabeli masz tylko te chckboxy które zaznaczyłeś

zapytani zrób tak
  1. $ssql = "SELECT * FROM items WHERE driverlicense_a IN (".implode(',' , $_POST['driverlicense']).")";


zauważyłem że masz każdą kategorię w osobnej kolumnie w bazie danych jak dasz je do jednej kolumny po przecinku to zapytanie może wyglądać tak
  1. $ssql = "SELECT * FROM items WHERE driverlicense ='".implode(',' , $_POST['driverlicense'])."'";


Ten post edytował kadlub 29.02.2012, 12:57:19
Go to the top of the page
+Quote Post
monsarrat
post
Post #7





Grupa: Zarejestrowani
Postów: 23
Pomógł: 1
Dołączył: 29.02.2012
Skąd: Polska

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


po zmianie kodu na sugerowany print_r daje wynik: Array ( [0] => A )

rozumiem tylko jak dodać kategorie zczytywane z CHECKBOXÓW do jednej kolumny i zarazem wymuszać pożniej ich wyświetlanie bez ukrytego IMPUTA

dodawanie do bazy mam zrobione za pomocą inserta :

  1.  
  2.  
  3. $driverlicense_a = $_POST['driverlicense_a'];
  4. $driverlicense_b = $_POST['driverlicense_b'];
  5. $driverlicense_c = $_POST['driverlicense_c'];
  6. $driverlicense_d = $_POST['driverlicense_d'];
  7. $driverlicense_e = $_POST['driverlicense_e'];
  8. $driverlicense_t = $_POST['driverlicense_t'];
  9.  
  10.  
  11.  
  12. $sql = "
  13. INSERT INTO items
  14. (driverlicense_a, driverlicense_b, driverlicense_c, driverlicense_d, driverlicense_e, driverlicense_t)
  15. VALUES
  16. ('$driverlicense_a', '$driverlicense_b', '$driverlicense_c', '$driverlicense_d', '$driverlicense_e', '$driverlicense_t');
  17. ";
  18. echo $sql;
  19. mysql_query($sql) or die();
  20. $lastid = mysql_insert_id();


oraz

  1. <form action="<?php echo $_SERVER['PHP_SELF'];?>" enctype="multipart/form-data" method="post" class="form" >
  2.  
  3.  
  4.  
  5. <div class="row">
  6.  
  7. <div class="item inner_labels last">
  8. <span class="label"><?php echo $lang['DRIVING_LICENCE'];?></span>
  9.  
  10. <input type="hidden" name="driverlicense_a" value="non" />
  11. <input type="checkbox" id="Cb_a" name="driverlicense_a" value="A" />
  12. <label for="Cb_a">A</label>
  13.  
  14. <input type="hidden" name="driverlicense_b" value="non" />
  15. <input type="checkbox" id="Cb_b" name="driverlicense_b" value="B" />
  16. <label for="Cb_b">B</label>
  17.  
  18. <input type="hidden" name="driverlicense_c" value="non" />
  19. <input type="checkbox" id="Cb_c" name="driverlicense_c" value="C" />
  20. <label for="Cb_c">C</label>
  21.  
  22. <input type="hidden" name="driverlicense_d" value="non" />
  23. <input type="checkbox" id="Cb_d" name="driverlicense_d" value="D" />
  24. <label for="Cb_d">D</label>
  25.  
  26. <input type="hidden" name="driverlicense_e" value="non" />
  27. <input type="checkbox" id="Cb_e" name="driverlicense_e" value="E" />
  28. <label for="Cb_e">E</label>
  29.  
  30. <input type="hidden" name="driverlicense_t" value="non" />
  31. <input type="checkbox" id="Cb_t" name="driverlicense_t" value="T" />
  32. <label for="Cb_t">T</label>
  33. </div>
  34.  
  35.  
  36. </div>
  37.  
  38.  
  39.  
  40.  
  41. <input type="submit" name="submit" class="button" value="<?php echo $lang['ADD'];?>" />
  42.  
  43. </form>


Go to the top of the page
+Quote Post
kadlub
post
Post #8





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


nie zastosowałeś się do moich rad tylko dalej klepiesz swoje
Go to the top of the page
+Quote Post
monsarrat
post
Post #9





Grupa: Zarejestrowani
Postów: 23
Pomógł: 1
Dołączył: 29.02.2012
Skąd: Polska

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


zastosowałem sie do Twoich rad, jedynie pokazałem CI inny plik (add.php) w ktorym to dodaje do bazy CHECBOXY... na samym pocztaku pokazałem plik (SEARCH.php) w ktorym chce wyszukiwać CHECBOXY, i poprawiłem go na twoje wskazówki, podałem też wynik print_r

prosze o pomoc



mam watpliwosci i nie wiem jak zmodywikowac samo dodawanie do bazy...

w bazie mam juz 100 osób...

Ten post edytował monsarrat 29.02.2012, 14:07:30
Go to the top of the page
+Quote Post
kadlub
post
Post #10





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


podobnie jak tamto wcześniej
przy dodawaniu wywałm te ukryte inputy daj
<input type="checkbox" id="Cb_a" name="driverlicense[]" value="A" />
i tak w następnych
następnie
zmień strukturę tej tabeli po co ci tyle tych kolumn na każdą kategorię osobne zrub jedno o nazwie driverlicense


  1.  
  2. $dane=implode(',' , $_POST['driverlicense']);
  3.  
  4. $sql = "
  5. INSERT INTO items (driverlicense) VALUES ( '$dane')";


a jak będziesz chciał sprawdzić czy ma te kategorie zastosuj się do drugiego zapytania jakie ci napisałem wcześniej

Ten post edytował kadlub 29.02.2012, 14:12:04
Go to the top of the page
+Quote Post
monsarrat
post
Post #11





Grupa: Zarejestrowani
Postów: 23
Pomógł: 1
Dołączył: 29.02.2012
Skąd: Polska

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


kadlub mam pytanie jak wyciągnąc teraz dane z bazy aby mi CHECBOXY zaznaczało...

napisałem tak ale to nie działa...

  1. <input type="checkbox" id="Cb_a" name="driverlicense[]" value="A" <?php if($row['driverlicense'] == 'A') echo 'checked="checked"';?> />
  2. <label for="Cb_a">A</label>
  3. <input type="checkbox" id="Cb_b" name="driverlicense[]" value="B" <?php if($row['driverlicense'] == 'B') echo 'checked="checked"';?> />
  4. <label for="Cb_b">B</label>
  5. <input type="checkbox" id="Cb_c" name="driverlicense[]" value="C" <?php if($row['driverlicense'] == 'C') echo 'checked="checked"';?> />
  6. <label for="Cb_c">C</label>
  7. <input type="checkbox" id="Cb_d" name="driverlicense[]" value="D" <?php if($row['driverlicense'] == 'D') echo 'checked="checked"';?>/>
  8. <label for="Cb_d">D</label>
  9. <input type="checkbox" id="Cb_e" name="driverlicense[]" value="E" <?php if($row['driverlicense'] == 'E') echo 'checked="checked"';?>/>
  10. <label for="Cb_e">E</label>
  11. <input type="checkbox" id="Cb_t" name="driverlicense[]" value="T" <?php if($row['driverlicense'] == 'T') echo 'checked="checked"';?>/>
  12. <label for="Cb_t">T</label>


Ten post edytował monsarrat 29.02.2012, 21:56:16
Go to the top of the page
+Quote Post
kadlub
post
Post #12





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


Ieśli zrobiłeś wszystko tak jak ci napisałem to w bazie w kolumnie driverlicense powinieneś mieć kategorię prawa jazdy danego użytkownika po przecinku np A,C,T
jak je wyciągniesz to robisz sobie explode() po przecinku i w tym momencie tworzysz ci się tablica, poprzez użycie in_array() w tym warunku sprawdzasz czy np kategorja A znajdzuje się w tablicy jak tak to checkbox zaznaczony jak nie to nie.
czyli tak

  1. $kat=explode(",",$row['driverlicense']);
  2. if(in_array("A",$kat)){
  3. zaznaczasz
  4. }
  5.  
  6.  


Ten post edytował kadlub 1.03.2012, 07:50:47
Go to the top of the page
+Quote Post
monsarrat
post
Post #13





Grupa: Zarejestrowani
Postów: 23
Pomógł: 1
Dołączył: 29.02.2012
Skąd: Polska

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


Super wyciaganie danych działą, przy czym co zrobic z IMPLODEM jeżeli żaden CHECKBOX nie jest zaznaczony...

otrzymuje w takim wypadku komunikat

35: $dane_driver =implode(',' , $_POST['driverlicense']);


Notice: Undefined index: driverlicense in edit.php on line 35
Warning: implode() [function.implode]: Invalid arguments passed in edit.php on line 35
Go to the top of the page
+Quote Post
kadlub
post
Post #14





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


poczytaj o isset() czyli sprawdzaj czy formularz został wysłany albo czy dana zmienna istnieje
Go to the top of the page
+Quote Post
monsarrat
post
Post #15





Grupa: Zarejestrowani
Postów: 23
Pomógł: 1
Dołączył: 29.02.2012
Skąd: Polska

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


Napisałem coś takiego

  1. <?php if (!isset($_POST['driverlicense'])) { $driverlicense = "brak"; } ?>


jednak jest źle...

chiałbym aby issent sprawdzal czy nie ma a jak nie ma to zapisal do bazy że brak wtedy przy wywolaniu wyświetli Prawojazdy: brak

problem mam z napisalenim poprawnego ifa z issent i pytanie gdzie go uiescić za CHECBOXAMI czy w tablicy zmiennych....

Ten post edytował monsarrat 1.03.2012, 12:04:27
Go to the top of the page
+Quote Post
kadlub
post
Post #16





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


musisz sprawdzić ile elementów ma tablica

  1. $ile=count($_POST['driverlicense']);
  2. if($ile==0){
  3. $driverlicense = "brak";
  4. }

nie wiem czy o to ci chodzi
Go to the top of the page
+Quote Post
monsarrat
post
Post #17





Grupa: Zarejestrowani
Postów: 23
Pomógł: 1
Dołączył: 29.02.2012
Skąd: Polska

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


sprawdzilem i niezabardzo to działa co napisałeś

w tablicy zadeklarowałem tak:
  1. $dane_driver = (isset($_POST['driverlicense']) && is_array($_POST['driverlicense'])) ? implode(',' , $_POST['driverlicense']) : null;
  2.  



i już nie wywala mi info Warning: implode() [function.implode]: gdy nie mam żadnego CHECBOXA zaznaczonego...

teraz powracamy do wyszukiwania, skoro juz wszystko działa


  1. <div class="item inner_labels">
  2. <input type="checkbox" id="Cb_a" name="driverlicense[]" value="A" />
  3. <label for="Cb_a">A</label>
  4. <input type="checkbox" id="Cb_b" name="driverlicense[]" value="B" />
  5. <label for="Cb_b">B</label>
  6. <input type="checkbox" id="Cb_c" name="driverlicense[]" value="C" />
  7. <label for="Cb_c">C</label>
  8. <input type="checkbox" id="Cb_d" name="driverlicense[]" value="D" />
  9. <label for="Cb_d">D</label>
  10. <input type="checkbox" id="Cb_e" name="driverlicense[]" value="E" />
  11. <label for="Cb_e">E</label>
  12. <input type="checkbox" id="Cb_t" name="driverlicense[]" value="T" />
  13. <label for="Cb_t">T</label>
  14.  
  15. <div class="item inner_labels last" align="right">
  16. <input type="submit" name="wyszukiwanie_2" class="button" value="<?php echo $lang['SEARCH'];?>" />
  17. </div>
  18.  
  19. </div>


  1. if(isset($_POST['wyszukiwanie_2'])) {
  2.  
  3. $driverlicense = $_POST['driverlicense'];
  4.  
  5. $ssql = "SELECT * FROM items WHERE driverlicense ='".implode(',' , $_POST['driverlicense'])."'";
  6.  
  7.  
  8.  
  9. showresults($ssql, $rank);
  10. mysql_query($ssql) or die();
  11.  
  12. print_r($_POST['driverlicense']);
  13. }
Go to the top of the page
+Quote Post
nospor
post
Post #18





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




Zapisujac w polu dane po przecinku, nie da sie w zaden sensowny sposób tego przeszukiwać.
Załóżmy, że w polu masz: A,B,C

No to teraz szukac kolesia co ma A i C. I co? I zonk. Twoje zapytanie nic nie zwórci bo masz w nim:
...driverlicense ='A,C' a przeciez takiego pola nie ma. Jest pole z zawartoscia A,B,C.

Tutaj bardzo fajnie sprawdzają się wartości bitowe.
http://nospor.pl/opcje-dwuwartosciowe-przechowywanie.html
W paczce do ściągnięcia znajduje się w pełni działający skrypt, który zapisuje dane oraz wyszukuje dane.


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

"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
monsarrat
post
Post #19





Grupa: Zarejestrowani
Postów: 23
Pomógł: 1
Dołączył: 29.02.2012
Skąd: Polska

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


dziekuje za odpowiedz NASPOR

Witam zastosowałem Twój skrypcik do CHECKBOXÓW i mam problem z ich wyświetleniem, nie tak w tabeli jak to tam miałeś ale normalne wylistowanie, tak jak to było w moim przypadku praw jazdy A,B, C

  1. $opcje_driverlicense = (int)$row['opcje_driverlicense'];
  2.  
  3. echo '<input type="checkbox" name="opcja[]" value="1" '.($opcje_driverlicense & 1 ? 'checked="checked"' : '').'/> <label >A</label>';
  4. echo '<input type="checkbox" name="opcja[]" value="2" '.($opcje_driverlicense & 2 ? 'checked="checked"' : '').'/> <label >B</label>';
  5. echo '<input type="checkbox" name="opcja[]" value="4" '.($opcje_driverlicense & 4 ? 'checked="checked"' : '').'/> <label >C</label>';
  6. echo '<input type="checkbox" name="opcja[]" value="8" '.($opcje_driverlicense & 8 ? 'checked="checked"' : '').'/> <label >D</label>';
  7. echo '<input type="checkbox" name="opcja[]" value="16" '.($opcje_driverlicense & 16 ? 'checked="checked"' : '').'/> <label >E</label>';
  8. echo '<input type="checkbox" name="opcja[]" value="32" '.($opcje_driverlicense & 32 ? 'checked="checked"' : '').'/> <label >T</label>';
  9.  
  10. echo '<br />';
  11. echo '<br />';
  12.  
  13.  
  14. echo $row['opcje_driverlicense'];
  15.  
  16.  
  17.  
  18.  


powyżej pięknie mi zaznacza jak i zwraca wartość jednak potrzebuje wylistowania tych praw jazdy ...


Go to the top of the page
+Quote Post
nospor
post
Post #20





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




Nie wiem, czy zrozumiałem, więc strzelam:
  1. $tOpcje = array(1=>'A',2=>'B',4=>'C',8=>'D',16=>'E',32=>'T');
  2.  
  3. //i tutaj już sobie wyświetlamy znalezione wyniki
  4. while ($row = mysql_fetch_array($res)){
  5. $rOpcje = (int)($row['OPCJE']); //pobieramy opcje z bazy
  6. foreach ($tOpcje as $v=>$n){
  7. if ($rOpcje & $v) echo $n.','
  8. }
  9. echo '<br />';
  10. }


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

"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

2 Stron V   1 2 >
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 - 16:19