Avatar billede xgamesboy Nybegynder
22. august 2005 - 10:24 Der er 20 kommentarer

Opsætning af en select box

Goddag kære brugere på eksperten.

Jeg har den her select boks kørende, som en søgefunktion til at kunne noget data i en database.
Jeg har bare det lidt flove problem, at jeg ikke kan få sat mine select bokse til at køre efter den nuværende dato.
Det skal siges at jeg har 3 bokse kørende. En hvor der står dato, den næste med måned og den sidste med år. Disse skal så sættes til den nuværende dato, efter hvad computeren nu mener datoen er.
Håber I kan hjælpe mig med problemet, eller måske lede mig hen til hvordan det måske kan ordnes.

Her er den kode jeg har liggende på min php side:

<?php
// Makes the form to search for the information to the unit.
echo"
<form action=\"?side=rack2\" method=\"post\">
<table border=0>
    <tr>
        <td>Dag:</td><td>Måned:</td><td                     
align=center>År:</td><td>Enhed:</td>
    </tr>
    <tr>
        <td><select name=\"dag\">
            <option name=\"01\">01</option>
            <option name=\"02\">02</option>
            <option name=\"03\">03</option>
            <option name=\"04\">04</option>
            <option name=\"05\">05</option>
            <option name=\"06\">06</option>
            <option name=\"07\">07</option>
            <option name=\"08\">08</option>
            <option name=\"09\">09</option>
            <option name=\"10\">10</option>
            <option name=\"11\">11</option>
            <option name=\"12\">12</option>
            <option name=\"13\">13</option>
            <option name=\"14\">14</option>
            <option name=\"15\">15</option>
            <option name=\"16\">16</option>
            <option name=\"17\">17</option>
            <option name=\"18\">18</option>
            <option name=\"19\">19</option>
            <option name=\"20\">20</option>
            <option name=\"21\">21</option>
            <option name=\"22\">22</option>
            <option name=\"23\">23</option>
            <option name=\"24\">24</option>
            <option name=\"25\">25</option>
                <option name=\"26\">26</option>
            <option name=\"27\">27</option>
            <option name=\"28\">28</option>
            <option name=\"29\">29</option>
            <option name=\"30\">30</option>
            <option name=\"31\">31</option>
        </select>
        </td>
        <td>
        <select name=\"maaned\">
        <option name=\"01\">01</option>
                <option name=\"02\">02</option>
                <option name=\"03\">03</option>
            <option name=\"04\">04</option>
            <option name=\"05\">05</option>
            <option name=\"06\">06</option>
            <option name=\"07\">07</option>
            <option name=\"08\">08</option>
            <option name=\"09\">09</option>
            <option name=\"10\">10</option>
            <option name=\"11\">11</option>
            <option name=\"12\">12</option>
        </select>
        </td>
        <td>
        <select name=\"aar\">
                <option name=\"2003\">2003</option>
            <option name=\"2004\">2004</option>
            <option name=\"2005\">2005</option>
        </select>
        </td>
        <td>
        <select name=\"unit\">
            <option name=\"fan1\">1</option>
            <option name=\"temp\">2</option>
            <option name=\"fugt\">3</option>
                </select>
    </tr>
    <tr>
              <td colspan=4 scope=cols align=center><input type=\"submit\" name=\"knap\" value=\"Get Unit\"></td>
    </tr>
    </select>
    </table>
    </form>
      ";
?>


Med venlig hilsen
xgamesboy
Avatar billede softspot Forsker
22. august 2005 - 10:35 #1
Nu kan jeg ikke PHP, men derfor kan jeg jo godt give et tip til hvordan man kan gøre :)

Jeg ville umiddelbart danne options i et loop og så sætte selected på de options som datoen afspejler (PHP kan nok levere datoen i stumper af dag, måned og år).

Alternativt skal det ske efterfølgende på klienten via javascript...
Avatar billede nielle Nybegynder
22. august 2005 - 10:49 #2
Jeg har lavet dagene for dig - resten laves efter samme mønster:

<form action="?side=rack2" method="post">
<table border=0>
    <tr>
        <td>Dag:</td><td>Måned:</td><td align=center>År:</td><td>Enhed:</td>
    </tr>
    <tr>
        <td>
            <select name="dag">";
            <?php $dag = date("d"); ?>
            <option name="01"<? if ($dag == "01") echo " SELECTED"; ?>>01</option>
            <option name="02"<? if ($dag == "02") echo " SELECTED"; ?>>02</option>
            <option name="03"<? if ($dag == "03") echo " SELECTED"; ?>>03</option>
            <option name="04"<? if ($dag == "04") echo " SELECTED"; ?>>04</option>
            <option name="05"<? if ($dag == "05") echo " SELECTED"; ?>>05</option>
            <option name="06"<? if ($dag == "06") echo " SELECTED"; ?>>06</option>
            <option name="07"<? if ($dag == "07") echo " SELECTED"; ?>>07</option>
            <option name="08"<? if ($dag == "08") echo " SELECTED"; ?>>08</option>
            <option name="09"<? if ($dag == "09") echo " SELECTED"; ?>>09</option>
            <option name="10"<? if ($dag == "10") echo " SELECTED"; ?>>10</option>
            <option name="11"<? if ($dag == "11") echo " SELECTED"; ?>>11</option>
            <option name="12"<? if ($dag == "12") echo " SELECTED"; ?>>12</option>
            <option name="13"<? if ($dag == "13") echo " SELECTED"; ?>>13</option>
            <option name="14"<? if ($dag == "14") echo " SELECTED"; ?>>14</option>
            <option name="15"<? if ($dag == "15") echo " SELECTED"; ?>>15</option>
            <option name="16"<? if ($dag == "16") echo " SELECTED"; ?>>16</option>
            <option name="17"<? if ($dag == "17") echo " SELECTED"; ?>>17</option>
            <option name="18"<? if ($dag == "18") echo " SELECTED"; ?>>18</option>
            <option name="19"<? if ($dag == "19") echo " SELECTED"; ?>>19</option>
            <option name="20"<? if ($dag == "20") echo " SELECTED"; ?>>20</option>
            <option name="21"<? if ($dag == "21") echo " SELECTED"; ?>>21</option>
            <option name="22"<? if ($dag == "22") echo " SELECTED"; ?>>22</option>
            <option name="23"<? if ($dag == "23") echo " SELECTED"; ?>>23</option>
            <option name="24"<? if ($dag == "24") echo " SELECTED"; ?>>24</option>
            <option name="25"<? if ($dag == "25") echo " SELECTED"; ?>>25</option>
            <option name="26"<? if ($dag == "26") echo " SELECTED"; ?>>26</option>
            <option name="27"<? if ($dag == "27") echo " SELECTED"; ?>>27</option>
            <option name="28"<? if ($dag == "28") echo " SELECTED"; ?>>28</option>
            <option name="29"<? if ($dag == "29") echo " SELECTED"; ?>>29</option>
            <option name="30"<? if ($dag == "30") echo " SELECTED"; ?>>30</option>
            <option name="31"<? if ($dag == "31") echo " SELECTED"; ?>>31</option>
        </select>
    </td>
...

Bemærk at jeg har pillet det hele ud af den echo du havde sat det ind i - den er slet ikke nødvendig.

Læøs mere om date() her:

http://dk2.php.net/date
Avatar billede Slettet bruger
22. august 2005 - 11:50 #3
Udfra nielle's:

<select name="dag">";
    <?php
    $dag = date("d");
    for($i = 1; $i < 31; $i=$i+1) {
        echo "<option name=\"".$i."\"";
        if ($dag == "$i") {
            echo " selected";
        }
        echo "\">$i</option>\n";
    }
    ?>
</select>
Avatar billede nielle Nybegynder
22. august 2005 - 12:35 #4
Husk at d. 31. skal med og at der skal tages højde for ledende 0'er for d. 1 til d. 9:

<select name="dag">";
    <?php
    $dag = date("d");
    for ($i = 1; $i <= 31; $i++)
    {
        $iStr = "$i";
        if (i<10) $iStr = "0" . $iStr;

        echo "<option name=\"" . $iStr . "\"";
        if ($dag == $iStr) echo " selected";
        echo "\">$iStr</option>\n";
    }
    ?>
</select>

PS: I øvrigt bør man bruge $i++ i stedet for $i=$i+1 - det er mere effektivt.
Avatar billede Slettet bruger
22. august 2005 - 12:40 #5
Rettelse:

<select name="dag">";
    <?php
    $dag = date("d");
    for ($i = 1; $i <= 31; $i++)
    {
        $iStr = "$i";
        if ($i<10) $iStr = "0" . $iStr;

        echo "<option name=\"" . $iStr . "\"";
        if ($dag == $iStr) echo " selected";
        echo "\">$iStr</option>\n";
    }
    ?>
</select>
Avatar billede nielle Nybegynder
22. august 2005 - 12:58 #6
Korrekt :^)

.. og lad os så også lige få rettet:

<select name="dag">";

- til:

<select name="dag">
Avatar billede olebole Juniormester
22. august 2005 - 15:32 #7
<ole>

- og den 'rigtige' måde:

<?php
$dag = date("d");
$s = "";
for ($i = 1; $i <= 31; $i++) {
    $iStr = ($i<10)? "0".$i : $i;
    $sel = ($dag == $iStr)? " selected" : "";
    $s .= "<option value=\"".$iStr."\"".$sel.">".$iStr."</option>";
}
?>

<select name="dag">
<?=$s?>
</select>

/mvh
</bole>
Avatar billede olebole Juniormester
22. august 2005 - 15:34 #8
- for det første har option-elementer ikke en name-, men en value-attribut. For det andet, så er det flere hundrede gange hurtigere at skrive til en streng-buffer, som skrives ud én gang  ;o)
Avatar billede olebole Juniormester
22. august 2005 - 15:37 #9
- og endnu bedre er det, hvis man trækker al den slags op i toppen af dokumentet og isolerer det i funktioner, som kaldes de aktuelle steder i koden. Så undgår man langt de fleste tilfælde af unødig output-buffering, som folk er nødt til at fæøgte med for at sætte headers/cookies/sessions:

<?php
function getDateOpts() {
    $dag = date("d");
    $s = "";
    for ($i = 1; $i <= 31; $i++) {
        $iStr = ($i<10)? "0".$i;
        $sel = ($dag == $iStr)? " selected" : "";
        $s .= "<option value=\"".$iStr."\"".$sel.">".$iStr."</option>";
    }
    return $s;
}

?>

<select name="dag">
<?=getDateOpts()?>
</select>
Avatar billede softspot Forsker
22. august 2005 - 18:06 #10
Hmmm... at stringbuffering er hurtigere end echo lyder interessant. Jeg kan sværge at det er væsentlig hurtigere i ASP VBScript at skrive direkte ud med Response.Write end det er at sammensætte en streng ad mange mindre stumper... men det er sikkert fordi det er ActiveX og Miscrosoft-teknologi (på den anden side lyder det fornuftigt nok, at det er hurtigere bare at smide data i et hul end at oprette en streng kopiere data og nedlægge en streng - igen og igen og igen...).

Anyway! Bare en betragtning her fra sidelinien... :)
Avatar billede softspot Forsker
22. august 2005 - 18:10 #11
Dette er naturligvis ud fra den betragtning at der er tale om strengkonkatenering (er der virkelig noget der hedder det!?) - jeg ved som sagt ikke så meget om PHP, men

$s .= "en anden streng"

er vel en sådan. Jeg er klar over at når man taler reelle stringbuffers (med præallokeret hukommelse som nogenlunde modsvarer det endelige resultat), så er det en helt anden snak.
Avatar billede olebole Juniormester
22. august 2005 - 18:11 #12
Det er op til en faktor 2-300 hurtigere at skrive til en streng-buffer ... gør, som mig: Test  ;o)
Avatar billede olebole Juniormester
22. august 2005 - 18:12 #13
- og jeg kender i øvrigt ikke et sprog, hvor denne regel ikke gælder  :)
Avatar billede olebole Juniormester
22. august 2005 - 18:15 #14
- og i hvert fald i JavaScript (og mener også i PHP) er det endnu hurtigere at skrive til et array og join'e det til sidst  :)
Avatar billede softspot Forsker
22. august 2005 - 18:21 #15
Jeg har netop testet dette (dog for et stykke tid siden) i VBScript, med strengsammensætning som sagt, og det var for større datamængder væsentlig langsommere end bare at skrive direkte til response.write. Jeg har mit arbejde gennem tiden med VB 5 og VB 6 haft samme oplevelse

s = s & "en nye tilføjelse"

bliver (dræbende) langsom med store datamængder.

At det er hurtigere med join giver for mig god mening, idet jeg antager at den bagvedliggende allokeringsmekaniske "bare" tilføjer et nyt stykke hukommelse til array'et og lægger den nye streng deri, så sker der ikke helt det samme kopierings og dellokeringsarbejde som med strengsammensætning.
Avatar billede softspot Forsker
22. august 2005 - 18:23 #16
Men bare af ren nysgerrighed ang. PHP: er konstruktionen

$s .= "en ny tilføjelse"

så at betragte som en stringbuffer eller en strengsammensætning?
Avatar billede olebole Juniormester
22. august 2005 - 18:44 #17
VB er komplet håbløs til streng-behandling ... ikke mindst, når strengene bliver lange  :oP

I PHP og JS har du ingen decideret streng-buffer - så der er egentlig tale om konkatenering ... i daglig tale: en 'buffer'  :)

Jeg tror, det var jakoba, jeg engang diskuterede det med og vi lavede begge et forsøg ... det ligger i et gammelt spm. Hvis du har et par år, har E en søgefunktion  :D
Avatar billede nielle Nybegynder
31. august 2005 - 17:48 #18
xgamesboy> Har du fået kigget på det?
Avatar billede xgamesboy Nybegynder
05. september 2005 - 07:48 #19
Ja tak og har fået det til at virke.
Var dog også nød til at ændre i en anden php script for at få dem til at arbejde sammen og vise det korrekte data, tusind tak folkens! :D
Avatar billede nielle Nybegynder
05. september 2005 - 18:34 #20
Hvem ønsker du at få svar fra?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester