28. november 2011 - 16:26Der er
19 kommentarer og 1 løsning
opdeleling af værdier til <select> fra database
Hej igen jeg har oprettet en database hvor det er muligt at indrykke nogle værdier i et givent felt. jeg havde forstået at det er muligt at indskrive værdigerne som f.eks. 1,2,3,4,5 eller 2,4,6,8 afhængig af hvad feltet er for en type? koden er således ud:
Det er IKKE opsætningen der er vigtig her da jeg pt bare prøver at få det til at du. Den pæne grafiske del kommer bagefter. Men outputtet skulle gerne være sådan her: <dropdown 1,2,3,4,5> Antal YYY a´ pris: XXkr <dropdown 2,4,6,8> Antal ZZZ a´ pris: XXkr
Giver det mening? Reelt virker alt bortset fra at jeg ikke kan hive mine data ud som enkelte <option>værdi<option> osv osv osv men <option>1,2,3,4,5<option>
hej Ole. jeg burde næsten bare skrive direkte til dig næste gang? :D Reelt er det fordi min bror forklarede mig hvordan jeg kunne gøre det smart at sætte de værdier jeg skal bruge som "feltet kan have følgende værdier" og så skrive de værdier jeg skal bruge. Det kan nemlig også være navne eller udsagn. "jeg kan have kage med" eller jeg tilmelder x "børn"
følgende virker nu (selvom jeg indrømmer det ikke er kønt) $result = mysql_query("SELECT * FROM events_options WHERE event_id = $id"); while ($row = mysql_fetch_array($result)) { $vaerdi = $row['feltvaerdier']; $vaerdi = explode(',', $vaerdi); echo "<select>"; foreach ($vaerdi as $b) { echo '<option>'.$b.'</option>'; }; echo '</select>'; echo " Antal " . $row['feltnavn'] . " a´ pris: " . $row['pris'] . "kr<br>"; };
Kan det gøres smartere nu jeg har den opsætning jeg har? På forhånd tak. Du samler ikke på point eller hvordan er det nu?
jeg glemte: at min bror ikke har tid til at forklare det til slut. det besværliggør helt ærligt tingene lidt når man er halvvejs i blive forklaret noget... æv!
Du kommer nok til at uddybe hvad du har og hvad du vil. Det ser ud til at du (eller den du laver det for) arrangerer 'events'. Hver event hat et antal options, hver med en pris. Du vil så for en bestemt event med id = $id have udskrevet grundoplysningerne såsom navn og tidspunkter plus en liste af options for denne event så folk kan vælge. Her er et vildt eksempel for at demonstrere, hvordan jeg har forstået det. Dine events og options er sikkert helt andre. Men lad os sige, at du organiserer en sneferie, og options er 1. hotel, 2. pensionat, 3. leje af ski, 4. skiskole, 5. lift-kort, 6. tur med hestekane, 7. udflugt på snesko, 8. leje af kælk.
Men hvor kommer så 'feltværdier' ind i billedet? Er det således, at du vil lave 'pakke-ordninger', for eksempel en for skiløbere med options 3, 4, og 5 og en for ikke-skiløbere med options 6, 7, og 8?
Normalt er det en skidt ide i en relationel database såsom mysql at lave felter med en liste af værdier såsom 1,2,3,4,5 eller 2,4,6,8. SQL kommandoerne er optimeret på, at hver værdi står for sig. Du synes at have to tabeller. Den ene er for events med (mindst) felterne id, navn, start, slut, deadline, og beskrivelse. Den anden er for options, hvor en af felterne er event_id som linker til event tabellens id. Der ville jeg nok, i options tabellen, lave en række for hver option såsom følgende eksempel:
events id navn beskrivelse o.s.v 1 ski skiferie i Østrig 2 bal julebal i kroen
options id event_id navn pris 1 1 hotel 5000 2 1 pension 3000 3 1 leje af ski 1000 4 1 skiskole 2000 5 2 adgangskort 300 6 2 baltegn 100 7 2 rabatkort 10 drinks
Således hører options 1, 2, 3, og 4 til event 1 og options 5, 6, og 7 til event 2.
Når du så har kørt din anden query (SELECT * FROM events_options...) kan du skrive det ud noget i denne retning:
Det er ikke testet, men skrevet ned hurtigt som forbilled, så det kan være syntaksen skal tilpasses. Men for event1 skulle du få dette: <dropdown 1>hotel - 5000kr <dropdown 2>pension - 3000kr <dropdown 3>leje af ski - 1000kr <dropdown 4>skiskole 2000kr
Giv mig din reaktion på ovenstående, især hvor jeg har gættet forkert med hensyn til hvad du har og hvad du skal have vist. Så kan vi tage en omgang mere.
@Christian_Belgien: Meningen er god nok, men forklaringen "Normalt er det en skidt ide i en relationel database såsom mysql at lave felter med en liste af værdier [...] SQL kommandoerne er optimeret på, at hver værdi står for sig" er enten misforstået - eller den kan let misforstås =)
MySQL databasen er rystende ligeglad med, om der står en kommasepareret string eller en sætning med mange kommaer i f.eks. et VARCHAR felt. Derimod har PHP efterfølgende en masse bøvl med at separere og bruge de enkelte værdier. Det kan MySQL gøre langt hurtigere med relationerede tabeller.
Og når nu vi har slæbt de relaterede tabeller ud af skabet, ville det unægtelig være fiksere at foretage ét kald til begge tabeller på én og samme gang. Gerne - men ikke nødvendigvis - i forbindelse med en foreign key og innerjoin. phpMyAdmin er dog særlig velegnet til at håndtere foreign keys, så det bør vi nok undgå her =)
(olebole, jeg var allerede, vanemæssigt, i gang med at foreslå en join query. Men så tænkte jeg det igennem en gang mere. Spørgeren vil kun udskrive for en enkelt event og vil have alle data fra event tabellen først, efterfulgt af en liste med de tilhørende data fra options tabellen. Jeg konkluderede derfor, at spørgerens løsning med de to queries nok i det konkrete tilfælde er lige så god som den traditionelle join query løsning, så jeg undlod at gøre mig klog på dette område. Formålet med mit indlæg var primært at udforske hvad nu problemstillingen egenlig var, især om det at placere en liste af options værdier i et enkelt felt grundede sig på et behov (som du selv er inde på i #3) eller det drejer sig om et indfald, hvad #5 kunne tyde på.)
magnus_rievers, hvordan kommer vi videre med spørgsmålet? Du forklarede, hvis jeg har forstået dig rigtigt, at du i et enkelt felt i tabellen har en række værdier, såsom 1,2,3,4,5 , men du skal bruge disse værdier enkeltvis (<option>værdi</option> o.s.v.). For at kunne hjælpe udbad jeg mig yderligere oplysninger, især om det at placere en række værdier i et enkelt felt er begrundet i et behov, og i så fald hvad det behov var. Alternativt skitserede jeg hvordan du formentligt langt lettere kunne løse opgaven ved at have værdierne en for en i tabellen.
Du har ikke reagerede ikke på mit indlæg. Men mens jeg arbejdede på indlægget fortalte du en anden indlægger, vist nok, at du ikke kendte baggrunden for at have flere værdier i et enkelt felt - det var et forslag fra din broder der ikke havde tid til at forklare hvorfor.
Hvis du stadig ikke har flere oplysninger, så bliver det nok svært at hjælpe. Jeg vil så foreslå, at du lukker spørgsmålet ved selv at oprette et svar og acceptere det. Det samme gælder, hvis du selv har fundet frem til noget du kan bruge.
Hvis på den anden side du stadig søger efter en løsning og i mellemtiden er blevet i stand til at forklare konkret, så kom ind. Så kan jeg (eller andre) kikke videre.
undskyld jeg ikke har svaret. Jeg har siddet og nørklet med den kode Olebole skrev allerede i #2. Koden her virker nemlig og selvom det måske ikke virker snedigt, er det for mig ikke relevant at lave alting om for at lave hver værdi i tabellen. Mange tak for den meget udførlige hjælp selvom jeg allerede havde svaret fra starten. Reelt har Olebole svaret så hvis du er interesseret i point så smid et svar og endnu engang tak til jer begge to for hjælpen.
Magnus, du fik en løsning. Kan jeg bede dig lukke spørgsmålet igen, så det ikke længere står som åbent i min (og andres) liste af indlæg? Den der kom med løsningen samler ikke points, så du må selv oprette et svar og accepter det.
Javel ja. jo mange tak for hjælpen, jeg lukker hermed spørgsmålet men jeg synes måske det er en anelse pragmatisk at panikke lidt fordi et spørgsmål står åbent en uge? jeg bruger ikke ligefrem eksperten.dk hver dag end sige hver uge? så jeg undskylder hvis det forventes at man øjeblikkeligt reagerer på indlæg. Det tillader mig tidsplan mig desværre ikke.
Hvis man finder det 'pragmatisk' at panikke, kan det vist kun bero på en misforståelse af, hvad ordet 'pragmtisk' betyder. Det er fint, din tidsplan ikke tillader, du følger Ekspertens almindelige arbejdsgang, men så skulle du måske overveje, om Eksperten er stedet for dig og din arbejdsgang =)
nå så skidt da. jeg tror vi er mange der ikke har været daglige gang her men gerne ønsker hjælp i ny og næ når vi er faldet over noget vi ikke kan hitte ud af. Jeg tager det med mig men har altså ikke tænkt mig stoppe med at stille spørgsmål fordi jeg ikke overholder et ukendt kodex.
og undskyld jeg hvis starter en længere tråd om holdningen til eksperten.dk det er IKKE meningen!
Det gør du ikke. Det handler ikke om holdninger i forhold til Eksperten. Det handler bare om ganske almindelig god opdragelse og almindeligt udbredte sociale kompetencer =)
Kan man finde stedet, hvor man kan få hjælp af fagfolk med stor erfaring og kompetence - og sætte dem i gang med ganske gratis at bruge deres fritid på ens problemer - kan man nok også finde tid til at virke lidt interesseret i problemets løsning.
Nu føler jeg mig alligevel lidt stødt. man spørger i plenum i dette forum. jeg kan ikke vide hvilke forudsætninger folk der svarer har. ligesom man ikke kan tillade sig at blive sur og et råd man ikke kan bruge?
God opdragelse og sociale kompetencer er nok at trække den! hvis det er holdingen vil jeg gerne sige tak for hjælpen for sidste gang, du behøver ikke svare på mine kommende spørgsmål. jeg tror ikke jeg lever op til dine krav.
og det er faktisk uforskammet at bringe det op. jeg har skrevet undskyld adskillige gange i ovenstående. jeg føler ikke jeg behøver gøre mere her. Reelt er det vel også Christian_Belgien der har ret til disse udtalelser såfremt han måtte have lyst til dette?
lad os nu bare lukke den her og sige at det var det!
Det er mig, der undskylder! Jeg havde ikke forudset, mine udtalelser indebar så store intellektuelle udfordringer.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.