Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP Kenttien lisääminen lennosta formille

Hoover [16.01.2007 19:25:44]

#

Mitenkä formille oikein voi luoda input kenttiä, esim. painamalla jotain nappia? Sen pitäisi vielä toimia niin, että kun käyttäjä tulee formille ja alkaa täyttämään formin kenttiä, niin jo syötetyt tiedot eivät häviä formilta kun painetaan nappia joka lisää kenttiä johonkin tietoon.

Tässä on esimerkki joka vähän selventää tilannetta:

Kysymys 1: Viinit

Nimi | Vuosikerta
[kenttä1] | [kenttä2]

Eli näitä kenttä1 ja kenttä2 -kenttiä tulisi lisää aina kun painetaan jotain nappia. Tietysti siihen voisi tylysti lätkästä 10 kenttää heti, mutta se on karun näkönen jos siellä on tarpeeton määrä kenttiä.

nipasenmaki [16.01.2007 19:31:08]

#

Itse pidemmittä harkinnoitta toteuttaisin tämän luultavasti lähettämällä getillä haluttujen kenttien määrän ja silmukoittaisin kenttiä sitäkautta. Nappulaan laittaisin lähettämään yhden suuremman(+1) muuttujan arvon, joka silmukasta tulloo, ja homma pelaa, toivottavasti.

Hoover [16.01.2007 19:43:55]

#

Hmm... tuo voisi toimia. JavaScript varmaan olisi kans, mutta mieluummin teen kuitenkin ilman sitä.

tsuriga [16.01.2007 20:11:43]

#

Tee JavaScriptillinen ja scriptitön versio erikseen. Ensimmäinen vie vähemmän kaistaa ja on täten nopeampi, sekä myös helppokäyttöisempi käyttäjälle. Scriptittömässä versiossa käytä kenttien nimien perässä hakasulkuja, jolloin kentät löytyvät PHP:ssä $_POST-taulukosta taulukkona. Et tarvitse erillistä kenttien määrää ilmoittavaa muuttujaa.

<?php

sarakkeet = array("nimet", "vuosikerrat", ..) // lomakkeen kenttien nimet

// tämä nyt tulostaa vähän turhaan tyhjät valuet uusille formin kentille, voi jättää
// poiskin ja tulostaa suoraan ne kentät, ei vaan tartte kahesti kirjotella samaa koodia tän avulla
function tulostaSarake(val1 = "", val2..) {
  loop (sarakkeet as sarake)
    tulosta '<input name="' . $sarake . '[]" value="' . $val1 . '" />';

}

kenttienLukumaara = count($_POST['nimet'])

tulosta form

loop (i = 0; i < kenttienLukumaara; i++) {
  tulostaSarake($_POST['nimet'][0], .. // tähän siis muut kentät, joita lomakkeesta löytyy

tulostaSarake() // tulostaa siis uuden tyhjän sarakkeen

?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta