mysql en checkboxes

Status
Niet open voor verdere reacties.

ahermans

Gebruiker
Lid geworden
9 apr 2018
Berichten
9
Ik gebruik op een site een zoek formulier met een 30 checkboxes die allen een andere waarde hebben. Door deze aan te klikken kan de gebruiker dus zoeken. Via Ajax wordt in de database de selectie uitgevoerd op basis van de aangevinkte checkboxen en wordt de inhoud van het scherm bijgewerkt.

De aangevinkte checkboxen worden via een IN opdracht in de query geplaatst. Dus zoiets als select * from categorie where categorie IN (1, 25,26) waarbij de cijfers op basis van de aangevinkte checkboxen in de query worden geplaatst.

Dit is de aanbevolen werkwijze op elke site waarop ik heb gezocht en in eerste instantie was ik ook tevreden. Totdat ik merkte dat het niet klopt.

Stel ik heb de checkboxen 1 en 25 aangevinkt. De query geeft dan een goed resultaat. Voeg ik hierbij 26 dan klopt het resultaat niet meer zoals ik het wil hebben. 26 staat niet in de tabel dus eigenlijk moet het resultaat dan leeg zijn. Er wordt nu op basis van "of" geselecteerd. Met andere woorden of 1 of 25 of 26. Ik wil echter 1 en 25 en 26. Iemand een idee?
 

Bijlagen

  • 2018-04-09 19_04_30-localhost _ 127.0.0.1 _ dieren _ categorie _ phpMyAdmin 4.7.9.png
    2018-04-09 19_04_30-localhost _ 127.0.0.1 _ dieren _ categorie _ phpMyAdmin 4.7.9.png
    38,8 KB · Weergaven: 73
  • 2018-04-09 19_05_18-localhost _ 127.0.0.1 _ dieren _ categorie _ phpMyAdmin 4.7.9.png
    2018-04-09 19_05_18-localhost _ 127.0.0.1 _ dieren _ categorie _ phpMyAdmin 4.7.9.png
    29,7 KB · Weergaven: 73
Laatst bewerkt:
Waarom werkt het dan niet met de 26e checkbox?
 
Laatst bewerkt:
Omdat de waarde 26 niet bestaat. Deze staat dus niet in de tabel en daarom zou het resultaat leeg moeten zijn.
 
Maar 1 en 25 bestaan wel, dus logisch dat je resultaat krijgt.
 
Ja logisch uit de denkwijze van de ict'er. Maar als je als gebruiker een formulier voor de neus krijgt waarin 5 checkboxen staan. je selecteert er een en de site wordt bijgewerkt met alle records die voldoen van die ene checkbox. Klik je een tweede aan blijven dezelfde records staan. Haalt de gebruiker dan de eerste vink weg verdwijnt opeens alles. Dit komt door de "or" selectie die bij IN wordt gemaakt. Als het een "and" query zou zijn zou bij de tweede checkbox alles moeten verdwijnen en dat is wat de gebruiker verwacht.
 
SQL werkt zoals is getoond, daar verander je niks aan.
Een And kan niet want dan krijg je helemaal geen resultaat.
Een categorie is nooit EN 1 EN 25 EN 26.
 
Laatst bewerkt:
Helemaal met je eens en dat is precies dat wat de gebruiker verwacht. Als hij 2 checkboxen aanklikt en hij krijgt dezelfde gegevens te zien dan wanneer hij één checkbox aanklikt dan betekent dit voor de gebruiker dat de selectie aan beide eisen voldoet. Maar in werkelijkheid is dit dus niet zo. Het resultaat hoeft maar aan één eis te voldoen. Het blijft vreemd.
 
Is niks vreemds aan en gewoon een logische gang van zaken. Als je geen resultaat wilt wanneer 1 van de gevraagde gegevens niet bestaat zal je je query moeten uitbreiden met zoveel AND EXISTS (SELECT 1 FROM 'categorie WHERE categorie = (1) als er checkboxes zijn aangevinkt, waarbij je (1) telkens voorziet van de waarde van de checkbox. Subqueries dus.
 
Ook dat ben ik met je eens. Het worden zo wel grote queries met veel and's. Heb 32 checkboxen op de site staan.
 
Eigenlijk vraag ik me af of de opzet wel handig gekozen is, als je zulke lastige fratsen moet uithalen.
 
Dat vind ik ook. Er zal in het begin vanwege het onjuiste begrip m.b.t. een SELECT query van een verkeerd punt zijn vertrokken.
 
Ik heb jullie raad aangenomen en mijn database model nog eens kritisch bekeken. Ik heb het perfect hierdoor kunnen oplossen door de checkboxen als 1 en 0 in een string te zetten en deze zo op te slaan. Ik zoek nu dus in de string welke checkboxen on en welke off zijn. Ik heb dit eerder al eens gebruikt bij een afsprakensysteem waarbij de tijden dus ook door 1 en 0 in een string worden geplaatst. WErkt nu alles perfect. Bedankt voor de gouden tip.
 
rond het probleem fietsen kan je zo
Code:
IF(`tablename`.`field`IS NULL,\' checked=checked ',' ')AS `ischecked`

Code:
IF(`tablename`.`field`IS NULL OR meer controles AND ect ,' checked ',' ')AS `ischecked`

zie html ...
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan