Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Useita samanlaisia comboboxeja

Sivun loppuun

B_R_H [22.09.2009 11:20:16]

#

Tervehdys,

Miten olisi järkevintä tehdä php/javascipt/html lomake, jossa on 25 samanlaista comboboxia (jokaisella kuitenkin eri nimi).

Nyt yksi combo muodotetaan:

<select name="boxi"
   <option value="-1">Not selected</option>
   <?php
   $i=0;
   foreach($rivit as $rivi){
      ?>
      <option value="<?=$i++?>"><?=$rivi?></option>
      <?php
   }
   ?>
   </select>
   <?php

Ideoita?

Teuro [22.09.2009 11:25:20]

#

Onko mitään väliä minkä nimisiä comboja haluat muodostaa?

Mikäli ei ole väliä voit laittaa combo1 combo2 jne... vaikka silmukalla. Mikäli on voisit nimetä combot vaikka taulukkoon, josta luet aina seuraavan nimen indeksin perusteella.

MIB [22.09.2009 11:36:34]

#

Vaihtoehto1:

<?php
$nimet = array();
$nimet[0] = "combo1";
$nimet[1] = "boxi";
$nimet[2] = "loota";
//jne..

for($i = 0; $i < sizeof($nimet); $i++) {
	echo "<option value=\"" . $nimet[$i] . "\">" . $nimet[$i] . "</option>\n";
}
?>

Vaihtoehto2:

<?php
for($i = 0; $i < 30; $i++) {
	echo "<option value=\"$i\">$i</option>\n";
}
?>

Tein esimerkit Teuron vastauksesta, kun ei ole paljon mitään ihmeellistä tekemistä.

Teuro [22.09.2009 11:41:19]

#

Et tehnyt minun esimerkin mukaisesti. Et ilmeisesti ymmärtänyt aloittajan ongelmaa. Tarkoitus oli saada useita compobokseja ei suinkaan useita vaihtoehtoja yhteen compoboksiin.

MIB [22.09.2009 11:48:52]

#

Jaahas... :D No, tosta ei ole silti kovinvaikea muokata siihen tarkoitukseen sopivaa.

B_R_H [22.09.2009 11:51:36]

#

>Onko mitään väliä minkä nimisiä comboja haluat muodostaa?
>Mikäli ei ole väliä voit laittaa combo1 combo2 jne... vaikka silmukalla.
Ei niillä niin väliä, kunhan ovat yksilöiviä

Jotenkin tuntuisi mukavalta pudottaa nuo option-rivit jostakin 1x/combo, mutta miten?

Sijoitustakin formilla tarvinnee vielä miettiä

Teuro [22.09.2009 12:14:31]

#

Otetaan vaihtoehto 1 käyttöön

<?php
for($a = 0; $a < 25; $a++){
  echo"<select name=\"boxi" . ($a+1) . "\">";
   echo"<option value=\"-1\">Not selected</option>";
   $i = 1;
   foreach($rivit as $rivi){
      echo "<option value=\"$i\">$rivi</option>";
      $i++;
   }
   echo "</select>";
}

B_R_H [22.09.2009 12:29:13]

#

Kiito Teuro,

Kokeilin ja hienosti toimi! Tosin tämä vaatineen echoa?

<option value="-1">Not selected</option>

Eiköhän tällä pärjätä taas. Ja $i alkaa nollasta ;-)

Mulla on selvä ongelma tuon tulostamisen kanssa kanssa, kumpaa käyttäisin:

?>
<option value="-1">Not selected</option>
<?php

vai:

echo '<option value="-1">Not selected</option>';

Teuro [22.09.2009 12:31:07]

#

Korjattu tuo lapsus tuosta yhdestä optionista, mutta käytä ehdottomasti alempaa tapaa, koska koodista tulee muutoin aika hankalasti luettavaa mössöä.

B_R_H [22.09.2009 12:40:40]

#

"Isot pojat" juuri tässä hiljan opastivat käyttämään tuota ylempää, kun kuulemma tuosta alimmaisesta tulee mössöä.

==> Pihalla kuin lumiukko!

Teuro [22.09.2009 12:51:42]

#

Nojaa kumpi sitten mössöä 10 - 150 aloittavaa <?php ja vastaava määrä ?> merkkejä keskellä koodia, vai samanlainen määrä echoa / printtiä? Tosin tässä astuu kuvaan DOM, jota olenkin jonkun verran rummuttanut. Se ratkaisee tämänkin ongelman tyylikkäästi, koska tuo äskeinen voidaan laittaa seuraavaan muotoon.

<?php
$sivu = new DOMDocument();
$body = $sivu->createElement("body");

for($a = 0; $a < 25; $a++){
  $select = $sivu->createElement("select");
  $select->setAttribute("name", "boxi" . ($a+1));
  $body->appendChild($select);

  $option = $sivu->createElement("option", "Not selected");
  $option->setAttribute("value", "-1");
  $select->appendChild($option);

  $i = 1;
  foreach($rivit as $rivi){
    $option = $sivu->createElement("option", $rivi);
    $option->setAttribute("value", $i);
    $select->appendChild($option);

    $i++;
  }
}

echo $sivu->saveXML();

Metabolix [22.09.2009 12:53:56]

#

Voit ihan omien puuromieltymystesi mukaan valita. Itsekin olisin sen ylemmän kannalla, koska sillä säästyy monessa tilanteessa \-sekamelskalta (ei tosin koske juuri tätä).

Tässä on vielä muutama esimerkkitapaus:

<img src="<?php echo htmlspecialchars($url); ?>" alt="<?php echo htmlspecialchars($alt); ?>" />
<?php
$url_html = htmlspecialchars($url);
$alt_html = htmlspecialchars($alt);
echo "<img src=\"$url_html\" alt=\"$alt_html\" />";
<?php
$url_html = htmlspecialchars($url);
$alt_html = htmlspecialchars($alt);
echo "<img src='$url_html' alt='$alt_html' />";
<?php
echo "<img src='", htmlspecialchars($url), "' alt='", htmlspecialchars($alt), "' />";

B_R_H [22.09.2009 13:03:34]

#

Tuo dcom luokka onkin kiinnostava tarvinnee tutustua.

Kiitos kommenteista.
Henkilökohtaiseti näen tuon jälkimmäisen joskus luettavampaa ja "vähän kaikki" niinkuin php:llä. Tuo toinen taas toimii mukavammin editorien kanssa (koodin merkkaus) ja sitten tosiaankin tuo \-merkintä on taas joskus tosi hankalan näköistä.

tsuriga [22.09.2009 19:12:37]

#

Tarkotuksena olis, että ylemmästä syntyy sillon selkeetä jälkeä, kun sisältö on jo kasassa ja jäljellä on enää sisällön tulostus. Ts. sulla on siellä enää jotai suht simppeliä silmukkaa, kuten tässä. Näinhän ne templatet toimivat.

peg [22.09.2009 19:39:33]

#

tai sovella tästä.

<form><div><table>
<?php
#$i = 1; $i < 15; $i++;
function text_kentta($kentan_asia, $kentan_nimi) {
   echo "<tr><td>{$kentan_asia}  </td><td><input type='text' size='53' name='in{$kentan_nimi}' value='in{$kentan_nimi}'></td></tr>\n";
}
text_kentta("Nimi", ++$i);
text_kentta("Osoite", ++$i);
text_kentta("Puhelin", ++$i);

?>
</table></div></form>

Sivun alkuun

Vastaus

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

Tietoa sivustosta