Hmm... Mitenkäs se olisi viisas tapa tehdä PHP + MySQL -yhdistelmällä tietokannasta radionapin arvon haku?
Tilanne on sellainen, että minulla on lomake joka sisältää paljon kysymyksiä joihin vastataan käyttäen radionappeja. Käyttäjät voivat käydä ronkkimassa lomakkeen radionappeja (4 radionappia aina yhtä kysymystä kohden) ja sitten tallentaa omat valintansa tietokantaan. Tähän asti ei ole ongelmaa, mutta sitten kun käyttäjä tulee takaisin järjestelmään muokkaamaan valintojaan ja tarkoitus olisi ladata valitut arvot radionapeille.
Tässähän pitää ihan älytön määrä tehdä ehtolauseita jos kuvitellaan, että minulla on vaikka yli 100 kysymystä joihin vastataan radionapeilla. Kait tähän jokin kikkakakkonen on etten ihan pöljänä rupea kirjoittamaan noita ehtolauseita. :o
Jos kysymyksiä tosiaan on paljon, niin ei muuta kuin kysymykset ja vastausvaihtoehdot tietokantaan (eri tauluihin). Lisäksi teet liitostaulun, johon tulee käyttäjän Id, kysymyksen Id sekä vastaus. Tuollaisen kannan päälle pystyykin sitten jo tekemään suht. automaattisen systeemin.
Nyt juuri sopivasti ylimääräistä aikaa pieneen demoon:
Kysymykset: --------------------- Id | Kysymys ---+----------------- 1 | Ikäsi? 2 | Sukupuolesi? Vastausvaihtoehdot ----------------------------------------- KysymysId | VastausId | Vastausvaihtoehto ----------+-----------+-------------------- 1 | 1 | 10 - 20 1 | 2 | 21 - 30 1 | 3 | 31 - 40 1 | 4 | 41 - 100 2 | 1 | Mies 2 | 2 | Nainen KayttajaVastaukset ----------------------------------- KayttajaId | KysysmysId | Vastaus -----------+------------+---------- 1 | 1 | 3 1 | 2 | 1
Niin ja käyttäjän vastausten haku balttiarallaa näin:
SELECT Kysymykset.Kysymys, Vastaukset.VastausId, Vastaukset.Vastaus FROM Kysymykset LEFT JOIN Vastausvaihtoehdot ON Vastausvaihtoehto.KysymysId = Kysymys.KysymysId LEFT JOIN KayttajaVastaukset ON Kysymys.KysymysId = KayttajaVastaukset.KysymysId WHERE KayttajaVastaukset.KayttajaId = [käyttäjän ID] ORDER BY Kysymykset.Id, VastausVaihtoehdot.Id
Nyt pikkujouluihin...! :)
Hmps.. Ehkä tuo kysymys oli hieman epäselvä.. :I
Tarkoitus on siis saada tämä oikea radionappi aktiiviseksi kun asiakas kirjautuu järjestelmään. Eli jos asiakas on valinnut:
Tykkään stetsoneista:
Ei[] Ehkä[x] En sano[] Kyllä[]
... niin tämä sama Ehkä on valittu sitten oletuksena kun hän seuraavan kerran kirjautuu järjestelmään. Valinnat on kirjattu tietokantaan ihan numeroina (0-3).
Ainut keino mitä tuli mieleen, olisi sellainen systeemi, että aina yhdelle kysymykselle pitäisi tehdä neljä ehtoa:
Jos valinta = 0
Radionappi1 = checked
Radionappi2 = unchecked
Radionappi3 = unchecked
Radionappi4 = unchecked
MuutoinJos valinta = 1
Radionappi1 = unchecked
Radionappi2 = checked
Radionappi3 = unchecked
Radionappi4 = unchecked
MuutoinJos valinta = 2
Radionappi1 = unchecked
Radionappi2 = unchecked
Radionappi3 = checked
Radionappi4 = unchecked
MuutoinJos valinta = 3
Radionappi1 = unchecked
Radionappi2 = unchecked
Radionappi3 = unchecked
Radionappi4 = checked
Jokaiselle kysymykselle tuollanen hirveä sarja ehtoja. :o
Ratkaisu on tulostaa kysymykset sopivan for-silmukan avulla, jolloin sama HTML-koodi täytyy kirjoittaa vain kerran. Tämän vuoksi silmukan sisällä täytyy tavalla tai toisella saada selville, mikä kysymys sillä hetkellä kuuluu tulostaa sivulle.
Tässä on esimerkki, jonka pitäisi selventää asiaa:
<?php // kysymykset ja niiden vastaukset $kys[] = array("Kysymys A", "Vastaus A1", "Vastaus A2", "Vastaus A3"); $kys[] = array("Kysymys B", "Vastaus B1", "Vastaus B2", "Vastaus B3"); $kys[] = array("Kysymys C", "Vastaus C1", "Vastaus C2", "Vastaus C3"); $kys[] = array("Kysymys D", "Vastaus D1", "Vastaus D2", "Vastaus D3"); // valittu vastaukset A2, B1, C3 ja D3 $val = array(2, 1, 3, 3); for ($i = 0; $i < count($kys); $i++) { // tulostetaan kysymys echo "<p>{$kys[$i][0]}</p>"; for ($j = 1; $j < count($kys[$i]); $j++) { $lisa = ""; // merkitään vaihtoehto tarvittaessa valituksi if ($val[$i] == $j) $lisa = "checked=\"checked\""; // tulostetaan vaihtoehto echo "<input type=\"radio\" name=\"k{$i}\" $lisa>{$kys[$i][$j]}<br>"; } } ?>
Taulukossa $kys ovat kaikki kysymykset helposti muutettavassa muodossa, taulukossa $val taas ovat käyttäjän valinnat kysymysten järjestyksessä. Muuttuja $lisa määrittää kysymysten tulostuksessa, onko tietty vaihtoehto valittu.
Joo, tuo näytästää vähän siltä mitä ajoin takaa. Kiitti.
Ainakin tulee paljon lyhempi tuosta tiedostosta kuin tuolla periaatteella mikä minulla kävi aluksi mielessä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.