Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Lomakeongelma

vmatika [08.01.2008 21:23:30]

#

Ongelmana on se, että form-metodilla (tai vastaavalla) olen lähettämässä muuttuvaa tietoa eteenpäin. for-silmukalla tulostetaan kenttä johon käyttäjä voi asettaa jonkin luvun, id-numeron joka on jokaisessa taulukon rivissä eri ja tämän jälkeen "varaa" painike joka lähettää kyseisen rivin tiedot (ruutuun kirjoitetun numeron ja id-numeron) eteenpäin. Miten homman saisi toimimaan. Oma toimimaton koodini alla. Pahoittelen jos on sekava.

<form action="varaa.php" method="post">
<?php

//luetaan viestit taulukkoon
$viestit = file("/polku/tiedosto.txt");

$viestimaara = count($viestit);

//silmukka
for ($i = 0; $i < $viestimaara; $i++) {
  $tiedot = explode("|", $viestit[$i], 4);

  //erotellaan tiedot omiin muuttujiinsa
  $id = $tiedot[0];
  $nimi = $tiedot[1];
  $info = $tiedot[2];
  $kpl = $tiedot[3];


  //tulostetaan viesti
  echo "<TR>";
  echo "<TD>$nimi</TD>";
  echo "<TD>$info</TD>";
  echo "<TD><center>$kpl</center></TD>";
  echo "<INPUT TYPE=\"TEXT\" NAME=\"maara\" SIZE=5 MAXLENGTH=5><INPUT TYPE=\"HIDDEN\" NAME=\"idtieto\" VALUE=\"$id\"></TD>";
  if ($vertaa != $kpl) {
  echo "<TD><center><input type=\"submit\" value=\"varaa\"></center></TD>"; }
  echo "</TR>";
}
?>
</form>

Antti Laaksonen [08.01.2008 21:32:09]

#

Voisitko vielä selventää, mitä olet tarkalleen tekemässä? Mitä sivulla kuuluisi näkyä ja mitä koodin kuuluisi tehdä?

vmatika [08.01.2008 21:45:13]

#

Tarkoitus olisi tehdä eräänlainen lahjalista jossa muuttujat id, nimi, tietoa ja kpl. Ja varaus-sivu on ongelmana. Eli yritän ylhäällä tulostaa sivun, jossa tulostetaan lahjan nimi ja info. Tämän jälkeen vieraat voivat varata lahjaa tietyn määrän täyttämällä haluamansa numeron tekstikenttään "maara". Tämän jälkeen riville tulostetaan vielä "varaa" nappi jonka pitäisi (en ole saanut toimimaan) lähettää kyseisen rivin tiedot eteenpäin varaa.php:lle joka sitten vähentää lahjamäärää (muuttujaa kpl).

Jotta tiedetään minkä lahjan kappalemäärää pitäisi vähentää on mukana piilokenttä "id". Myös kyseisen kentän id pitäisi lähettää jotta vertaa.php:ssä osataan löytää oikea lahja.

Lahjojen määrä voi vaihdella kun niitä lisätään tai poistetaan ja tämän takia tulostuksessa for-silmukka. Vain kpl-muuttujan tieto muuttuu (ei koskaan alle nollan). Lisäksi koodissani verrataan (Vaikka vertaa-muuttuja onkin jäänyt jostain syystä pois) onko kpl "0" jolloin ei tulosteta "varaa"-painiketta.

Eli web-sivulla tulostus olisi suunnilleen:

nimi...........In­fo..................­va­paa­na........­va­raa..........­varaa
leivänpaahdin..malli hd132..............5.........varaa-kenttä...varaa-painike
kiharrin.......malli jk12...............1.........varaa-kentta...varaa-painike


ja niin edespäin.

Antti Laaksonen [08.01.2008 22:08:40]

#

Lomak(k)e(et) täytyy rakentaa hieman toisella tavalla. Vaihtoehtoja on kaksi: koko lista on yksi suuri lomake tai jokainen rivi on oma lomake. Nykyisen ratkaisun ongelma on, että kaikilla piilokentillä on sama nimi eivätkä ne mitenkään liity lähetysnappeihin (paitsi että sijaitsevat sivulla niiden vieressä, mutta tätä ei voi mitenkään tietää PHP:ssä).

Jos tarkoitus on, että käyttäjä voi merkitä lukumääriä moneen varauskenttään ja lähettää sitten kaikki varaukset yhdellä kertaa, jokaisella varauskentällä täytyy olla oma nimi. Pelkkä nimi "maara" ei siis kelpaa, vaan kentät täytyy nimetä esim. "maara1", "maara2" jne. rivinumeron mukaan. Lisäksi tarvitaan vielä lähetysnappi, mutta yksi nappi riittää lomakkeen loppuun.

Jos taas riittää, että käyttäjä merkitsee yhden lukumäärän kerrallaan ja painaa sitten samalla rivillä olevaa nappia, helppo toteutus on määrittää jokainen rivi omaksi lomakkeekseen. Tällöin nykyinen ratkaisu on melkein toimiva, ainoa tarvittava muutos on, että jokainen rivi täytyy ympäröidä form-tageilla. Tuloksena sivulla on joukko pieniä lomakkeita, joissa on erilliset muuttujat.

Toivottavasti tästä oli hieman apua, kysy toki tarvittaessa lisää.

Vastaus

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

Tietoa sivustosta