Avatar billede MSR Juniormester
28. november 2011 - 16:26 Der 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:

<?php
    $result = mysql_query("SELECT * FROM events WHERE id = $id");
    while ($row = mysql_fetch_array($result))
    {
    $event_navn = $row['event_navn'];
    echo "<strong>". $row['event_navn'] ."</strong><br><hr align='left' width='600'>";
    echo "Eventen starter: " . $row['event_start'] .
    "<br>Eventen slutter: " . $row['event_slut'] .
    "<br>tilmeldingen lukker: " . $row['deadline'] .
    "<br>Beskrivelse:<br>"  . $row['beskrivelse'];
    };
    echo "<br><br>";
    $feltvaerdier = "";
    $result = mysql_query("SELECT * FROM events_options WHERE event_id = $id");
    while ($row = mysql_fetch_array($result))
    {
    echo "Antal " . $row['feltnavn'];
    $feltvaerdier = $row['feltvaerdier'];
    echo " a´ pris: " . $row['pris'] . "kr<br>";
    };
    ?>
    <select>
    <?php foreach ($array as $feltvaerdier): ?>
        <option value="<?php echo $feltvaerdier; ?>"><?php echo $feltvaerdier; ?></option>
    <?php endforeach; ?>
</select>

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>

På forhånd tak
Magnus
Avatar billede MSR Juniormester
28. november 2011 - 18:09 #1
helt kort kan det vel skrives:

echo "<select>";
foreach (array($vaerdi) as $b)
{
print "<option>". $b . "</option>";
}; 
echo "</select>";

$vaerdi = "2,4,6,8"; og skal give en dropdown med de valgte værdier.

det forklarer sgu nok hvad jeg leder efter noget bedre...
Avatar billede olebole Juniormester
28. november 2011 - 18:17 #2
<ole>

Det ligner godtnok ikke en gennemtænkt struktur (eller kode for den sags skyld), men du kan explode strengen:

$vaerdi = '2,4,6,8';
$vaerdi = explode(',', $vaerdi);
echo "<select>";
foreach ($vaerdi as $b) {
    echo '<option>'.$b.'</option>';
}; 
echo '</select>';

/mvh
</bole>
Avatar billede olebole Juniormester
28. november 2011 - 18:21 #3
- men hvorfor ligger tallene i ét felt? Mon ikke de skulle ligge i hvert sit felt og knyttes sammen i en eller anden relation mellem tabeller?
Avatar billede MSR Juniormester
28. november 2011 - 18:32 #4
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?

Magnus
Avatar billede MSR Juniormester
28. november 2011 - 18:33 #5
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!
28. november 2011 - 18:41 #6
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:

echo "<select>";
while ($row = mysql_fetch_array($result))
{
  $id = $row[id];
  $navn = $row['navn'];
  $pris = $row['pris'];
  echo "<option value=$id>$navn - $pris kr.</option><br>";
}
echo "</select>";

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.
28. november 2011 - 18:42 #7
Nå, jeg ser, at der er kommet en del kommentarer mens jeg arbejdede med min.  Dem kikker jeg på.
Avatar billede olebole Juniormester
28. november 2011 - 18:56 #8
@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  =)
Avatar billede olebole Juniormester
28. november 2011 - 18:58 #9
Ups ...! phpMyAdmin er dog ikke særlig velegnet til at håndtere foreign keys, så det bør vi nok undgå her  =)
28. november 2011 - 20:07 #10
(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å.)
29. november 2011 - 21:10 #11
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.
Avatar billede MSR Juniormester
29. november 2011 - 21:29 #12
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
Avatar billede olebole Juniormester
29. november 2011 - 23:35 #13
Ellers tak, jeg samler ikke point  =)
01. december 2011 - 05:59 #14
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.
Avatar billede MSR Juniormester
04. december 2011 - 17:14 #15
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.

men tak igen.
Magnus
Avatar billede olebole Juniormester
04. december 2011 - 18:27 #16
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  =)
Avatar billede MSR Juniormester
04. december 2011 - 18:35 #17
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!
Avatar billede olebole Juniormester
04. december 2011 - 18:54 #18
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.
Avatar billede MSR Juniormester
04. december 2011 - 19:26 #19
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!

Magnus
Avatar billede olebole Juniormester
04. december 2011 - 19:33 #20
Det er mig, der undskylder! Jeg havde ikke forudset, mine udtalelser indebar så store intellektuelle udfordringer.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester