Toon posts:

[php+sql+form] meerdere keuzes

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het is een beetje lastig uit te leggen denk ik, maargoed, ik zat het proberen :)

Ik heb bijv. een groot form, daarop staan enkele listboxen, met daarin dus verschillende keuzes (duh) zo heb ik er bijv eentje die "kleur" heet, en de default waarde ervan is "geen voorkeur", en zo dus nog veel meer..
Hoe kan ik dus de sql query aanpassen zodat ie niet "no results" geeft als er "geen voorkeur" gezozen is.. :(

shit ik weet ff nie hoe ik het uit moet leggen :P
als jullie me niet begrijpen zal ik dalijk nog wel ff een stukkie typen

  • Grum
  • Registratie: Juni 2001
  • Niet online
als er nix word geselecteerd daar ook niet op matchen in je select ?

of een like '%' ?

Verwijderd

Topicstarter
Heb een topic gevonden van iemand die exact hetzelfde probleem heeft als mij, staat alleen geen antwoord in :( :(

Dit is dus wat ik bedoel:
[topic=109210/1/25]

Als iemand het weet, graag, ben al heel lang bezig :'(

Verwijderd

misschien een validatie script in java of vb dat kijkt of het veld ingevuld is, zodra dat niet het geval is dat je gewoon een andere query laat gebruiken.

of sla ik nu de plank helemaal mis

  • Grum
  • Registratie: Juni 2001
  • Niet online
je slaat de plank niet mis maar je gebruikt wel schroeven waar spijkers beter zouden zijn :)

gaat hier over php (maar de rest klopte dus wel zoals je begrijpt ;) )

Verwijderd

Topicstarter
Op dinsdag 26 februari 2002 13:58 schreef SeriaL het volgende:
misschien een validatie script in java of vb dat kijkt of het veld ingevuld is, zodra dat niet het geval is dat je gewoon een andere query laat gebruiken.

of sla ik nu de plank helemaal mis
Het probleem is dat ik een helehoop listboxen heb waar "alle kleuren" of "alle vormen" gekozen kan worden, of gewoon 1 normale waarde, dus ik moet min of meer de query dynamisch genereren, en ik kan nu gewoon ff niets logisch bedenken...
(ben ook al veel te lang wakker, maargoed :P )

  • Grum
  • Registratie: Juni 2001
  • Niet online
je hebt in mysql hele leuke en handige dingen als

SELECT veldje FROM tabelletje WHERE anderveldje IN (itempje1,itempje2,itempje3)

Verwijderd

Als ik denk dat dit is wat ik denk dat je bedoeld :?:

Ik los dit probleem op door een functie te maken die checked of een waarde is geselecteerd.

De functie:
function get_selected($value1, $value2) {
if ($value1 == $value2) {
return " selected";
} else {
return "";
}
}

De html/php code:
<select name="the_list_id">
<?
while ($row = mysql_fetch_array($result)) {
print "<option value=\"$row[id]\"" . get_selected($row[id], the_list_id) . ">$row[value]\n";
}
?>
</select>


Wat je hier dus krijgt is als de geselecteerde waarde hetzelfde is als de huidige waarde in de while loop print hij " selected" erbij waardoor de waarde dus wordt geselecteerd.

Verwijderd

Volgens mij bedoeld hij dat hij meerdere invul vakken heeft voor zijn zoekopdracht, en dat ze niet allemaal verplicht zijn, dus dat er zijn query dus opgebouwd word uit de bouwstenen van dat formulier

ik ga eens proberen, ben er geen ster in maar doe mijn best
code:
1
2
3
4
if ($kleur > 0)
{$zoekopdr = "kleur = $kleur"};
if ($lengte > 0)
{$zoekopdr += "and lengte = $lengte"};

en dan zou je volgens mij in je query select * from table where $zoekopdr

waarschijnlijk niet de beste of makkelijkste manier maar heb mijn best erop gedaan :)

edit:

zag zelf nog wat foutjes in mijn code

Verwijderd

Topicstarter
Op dinsdag 26 februari 2002 19:18 schreef SeriaL het volgende:
Volgens mij bedoeld hij dat hij meerdere invul vakken heeft voor zijn zoekopdracht, en dat ze niet allemaal verplicht zijn, dus dat er zijn query dus opgebouwd word uit de bouwstenen van dat formulier

ik ga eens proberen, ben er geen ster in maar doe mijn best
code:
1
2
3
4
if ($kleur > 0)
{$zoekopdr = "kleur = $kleur"};
if ($lengte > 0)
{$zoekopdr += "and lengte = $lengte"};

en dan zou je volgens mij in je query select * from table where $zoekopdr

waarschijnlijk niet de beste of makkelijkste manier maar heb mijn best erop gedaan :)

edit:

zag zelf nog wat foutjes in mijn code
zoiets soortgelijks heb ik idd. ook gebrouwen.. maar ik blijf het toch omslachtige code vinden.. :)
En dat is geen goed gevoel (klinkt dom) maar alles moet perfect zijn (min of meer dan)

Net zoals dit stukje code:
code:
1
2
3
4
5
6
7
8
function parseOpties($string) {
    $compare = array("ABS","Airbag","Airconditioning","Alarm","Centr. vergrendeling","Cruise control","Elek. ramen","Getint glas","Lederen bekleding","Lichtmetalen velgen","Metallic lak","Schuifdak","Radio/cd","Stuurbekrachtiging","Trekhaak","Xenon lampen","Radio/cassette","Mistlampen");
    $a = explode("#", $string);
    for ($i=0; $i < count($a)-1; $i++) {
        $temp = $a[$i];
        print "$compare[$temp]<br>";
    }
}

De opties worden in de db opgeslagen als bijv. 1#23#2#1
en er weer uitgehaald en met die functie omgezet naar de bijbehorende strings, maar ik blijf het ranzige code vinden,
ach, php is mijn taaltje volgens mij niet echt :P


(excuse me voor de layout f*ckup)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Wacht ff.......

Sla jij hier meerdere gegevens op in 1 veld?? Schend je hier de 1e normaal form??


Dan is het probleem wat je nu heb de eerste lamp waar je tegenaan loopt (er volgen vast nog meer) vanwege een iets brakker DB-ontwerp.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Op woensdag 27 februari 2002 08:46 schreef Janoz het volgende:
Wacht ff.......

Sla jij hier meerdere gegevens op in 1 veld?? Schend je hier de 1e normaal form??


Dan is het probleem wat je nu heb de eerste lamp waar je tegenaan loopt (er volgen vast nog meer) vanwege een iets brakker DB-ontwerp.
Mwah, zo erg is het toch niet, het is 1 string in de vorm van bijv. "2#5#8#10" die haal ik eruit en die string zet ik gewoon om in de opties.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Maar je hebt nu dus wel een probleem... Ga jij straks je hele DB inlezen om dat ene veld in om te zetten naar die opties om te kijken of deze voldoen aan wat er gezocht wordt??

Neem maar van mij aan dat dit zeker niet het laatste probleem is dat je met dit DB-ontwerp tegen gaat komen.....

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Op woensdag 27 februari 2002 08:57 schreef Janoz het volgende:
Maar je hebt nu dus wel een probleem... Ga jij straks je hele DB inlezen om dat ene veld in om te zetten naar die opties om te kijken of deze voldoen aan wat er gezocht wordt??

Neem maar van mij aan dat dit zeker niet het laatste probleem is dat je met dit DB-ontwerp tegen gaat komen.....
Nee die opties worden niet gezocht, hij zoekt het "id" en eenmaal gevonden tovert ie alles eruit en dus ook die string, en die string zet ik dan gewoon om, maar naar die opties in de db word helemaal niet gezocht.

Maargoed, kwa databases heb ik idd nog veel te leren ja, komt vanzelf :P

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Nu zoek je mischien nog niet... Maar een uitbreiding als 'zoeken op opties' is helemaal niet wild uit de lucht gegrepen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Op woensdag 27 februari 2002 09:05 schreef Janoz het volgende:
Nu zoek je mischien nog niet... Maar een uitbreiding als 'zoeken op opties' is helemaal niet wild uit de lucht gegrepen.
Ja ik snap het, als ik een uitbreiding wil dan zal ik de complete database weer omver moeten gooien.
Idd niet zo slim nee.. :(

Verwijderd

Topicstarter
Is dit beter dan :?
(ik==dbn00b)

Afbeeldingslocatie: http://www.scitzofreak.nl/db.jpg

  • Digihelp ®
  • Registratie: Maart 2001
  • Laatst online: 25-08 10:10
Je maakt nu twee tabellen, occasion en occ_options.
Wat ik mis is een veld die de twee tabellen met elkaar linkt.
Misschien is het sowieso beter om er 1 grote tabel van te maken, aangezien waarschijnlijk alle occasions verschillende options hebben.
(Dit geldt zeker als je dacht dat de 2 id velden de link zijn).

Verwijderd

Topicstarter
Op donderdag 28 februari 2002 09:05 schreef los_joost het volgende:
Je maakt nu twee tabellen, occasion en occ_options.
Wat ik mis is een veld die de twee tabellen met elkaar linkt.
Misschien is het sowieso beter om er 1 grote tabel van te maken, aangezien waarschijnlijk alle occasions verschillende options hebben.
(Dit geldt zeker als je dacht dat de 2 id velden de link zijn).
Vraag1: waarom kan ik "id" niet gebruiken om te linken?
vraag2: wat moet ik dan gebruiken om de 2 tabellen te linken?

:+

  • Digihelp ®
  • Registratie: Maart 2001
  • Laatst online: 25-08 10:10
Het heeft geen zin om id te gebruiken als link, omdat je dan net zo goed 1 tabel kan maken.

Dit heeft alles te maken met normalisatie. In hele simpele vorm houdt dat in dat je gegevens die vaker voorkomen apart in een tabel zet en dan linkt. Dat zou jij dus kunnen doen door in je occasion tabel een extra veld options_ID op te nemen, die dan verwijst naar de id in de tabel occ_options.

Maar nogmaals, dit heeft alleen zin als je occasions hebt, die precies dezelfde opties hebben.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Nadeel van het model dat je hier hebt neergezet is dat het niet uit te breiden is met nieuwe opties. Je kunt beter een optie tabel maken met daarin een ID en de naam van een optie. Vervolgens gebruik je een kopel tabel met daarin de velden auto_id en optie_id. Hierin sla je de opties die een auto heeft op.

Waneer je nu een nieuwe optie wil gebruiken, dan voeg je die gewoon toe aan deoptie tabel.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1