Elikkä mul on MySQL taulukko jossa on noin 30 kenttää.
Eli pitäs rakentaa scripti, joka tekee HTML sivun jonne voi syöttää jokaiseen kenttään omat tiedot.
Eli pitäisi tulostaa allekkain syöttökenttiä ja lopuksi submit nappulalla lähettää kaikki eteenpäin.
While voisi olla hyödyllinen ratkaisu, mutta tarvitsisin jonkun function jonka avulla voin hakea eri muuttujiin/taulukkoon kenttien otsikot.
esim.
on taulukko, jossa on kentät nimeltä: projekti, valmistaja, suunnittelija.
sitten pitäisi tulostaa
projekti |_____________________|
valmistaja |_____________________|
sunnittelija |_____________________|
|SUBMIT| (|___| tarkoittaa syöttökenttää)
elikkä tulostaa allekkain kaikille kentille syöttökentät, lisäksi pitäisi tehdä joku while joka hakee $_POST komennolla formista tietoja.
kyseenä on siis oikotien rakentaminen, että ei tarvitse kirjoittaa jokaista kenttää erikseen.
Toivottavasti ymmärsitte.
Ei pitäisi olla niin vaikeaa tehdä itse. Haet ensin taulun kenttien nimet ja sitten käyt ne loopilla läpi, tulostaen uuden kentän.
Mazuli kirjoitti:
Ei pitäisi olla niin vaikeaa tehdä itse. Haet ensin taulun kenttien nimet ja sitten käyt ne loopilla läpi, tulostaen uuden kentän.
Juuri se miten haen ne kenttien nimet. Ehkä tyhmä kysymys, voin osata itsekin, mutta nyt ei raksuta.
Jos haluat helpon ratkaisun (yksityiseen käyttöön), lataa MySQL-muokkain. Jos kuulut niihin loistaviin yksilöihin jotka haluaa tehdä itse, auttaa seuraava funktio jo melko pitkälle:
<?php function HaeSarakkeet ($tietokanta, $taulu) { $sarakkeet = mysql_list_fields($tietokanta, $taulu); $sarakemaara = mysql_num_fields($sarakkeet); for ($a = 0; $a < $sarakemaara; $a++) { $kentta = mysql_field_name($sarakkeet, $a); $tyyppi = mysql_field_type($sarakkeet, $a); $pituus = mysql_field_len($sarakkeet, $a); $taulukko[$kentta] = "{$tyyppi},{$pituus}"; } return $taulukko; } ?>
Se olisi katsos ihan kiva oppia itse eikä opetella käyttää ohjelmaa joka tekee puolesta :).
Kokeilin tuota äskeistä esimerkkiä mysql_connectin kanssa ja echosin ton sit ulos, mutta saan tulostukseks Array...mikä vikana?
Tuosta annetusta funktiosta kun lähtee tutkimaan, että mitä se tekee, oppii jo paljon.
mysql_list_fields palauttaa resurssin, jossa on tietoa taulusta. Muun muassa sarakkeen nimi.
Käydään sarakkeet läpi for silmukassa.
Otetaan name eli nimi, type eli tyyppi ja len eli pituus talteen.
Muodostetaan palautettavaan taulukkoon joka kierroksella sarakkeen nimellä nimetty solu, johon tallennetaan toinen taulukko, mikä pitää sisällään tyypin ja pituuden.
Palautetaan taulukko.
Nyt menee vaikeaksi. Sinulla on nyt käsissäsi assosiatiivinen taulukko, jonka jokainen solu vastaa tietokantataulusi saraketta.
Tyyppiä ja pituutta et tarvitse mihinkään tehdessäsi lomaketta, pelkät nimet riittävät.
Nyt tulee se while, minkä halusit (piruuttani en anna valmista koodia)
WHILE saadussa taulukossa on vielä soluja tulosta inputin muut tiedot tulosta taulukon solun nimi inputin nimeksi ENDWHILE
Kiitoksia paljon leftover ja wwwapu. Vielä sain aikaiseksi toimivan tulostuksen:
for($i = 0; $i < $sarakemaara; $i++) { $kentta[$i] = mysql_field_name($sarakkeet, $i); echo '<tr>'; echo '<td>'; echo $kentta[$i]; echo '</td>'; echo '<td>'; echo '<input type="text" name='.$kentta[$i].' />'; echo '</td>'; echo '</tr>'; } echo '</table>';
Yksi kysymys olisi vielä: Pitäisi tulostaa taulukkoon aina kaksi kenttää vierekkäin, että kaikki tiedot mahtuisivat samalle ruudulle.
Olen yrittänyt seuraavaa ratkaisua ja muunnoksia siitä tuloksetta.
Olisiko teillä vielä vastaus tähän miten saan rivitettyä näin.
For silmukassa indeksiä ei ole pakko kasvattaa yhdellä. Voit kasvattaa myös kahdella ja tulostaa $i ja $i+1 sarakkeiden nimet.
Tässä menettelyssä on kuitenkin yksi vaaran paikka. Arvaatko mikä? Vihje: "MySQL taulukko jossa on noin 30 kenttää".
itse jatkaisin debuggerin koodilla muuten, mutta siirtäisi ensimmäisen rivin <tr> aloituksen ennen for-silmukkaa ja viimeisen rivin </tr> lopetuksen for-silmukan jälkeen. Nyt olisi tilanne jossa vain soluja <td> tulostettaisiin for-silmukassa. Seuraavaksi kun laittaisi <td> tulostuksen jälkeen modulointiehdon if (($i > 0)&&($i % 2 == 0)) echo '</tr><tr>' niin meillä olisi jo melko hyvä alku.
Tietenkin kun lähdetään hakemaan myös standardisuutta, olisi hyvä for-silmukan ulkopuolelle, ennen </tr> tagia lisätä vertailu jossa katsottaisiin onko $i yhä parillinen, ja jos on niin tulostetaan yksi tyhjä solu.
Jos mietit miksi parillinen, on vastaus yksinkertainen: for-silmukka toimii siten että ensimmäisenä on aloitusehto. Toisena on poistumisehto ja kolmantena ehto joka toteutetaan aina for-silmukan lopussa. Jos kokeilet koodia:
huomaat että kaksi viimeisintä tulostusta, viimeinen for-loopin sisällä ja for-loopin ulkopuolella ovat eri. Tämä siis siksi että for-looppi ehtii kasvattamaan i:n arvoa yhdellä ennen kuin lopetusehto täyttyy.
Aihe on jo aika vanha, joten et voi enää vastata siihen.