Avatar billede asn24 Nybegynder
27. december 2007 - 11:13 Der er 21 kommentarer og
1 løsning

Fødselsdag dropbox

Hey

Jeg skal lave en dropdown med fødselsdag hvor det er muligt at vælge dag, måned og år. Jeg har allerede lavet mine dag og måned bokse, men mangler bare år.

Sagen er den at man i år kun skal kunne vælge fra 17 år tilbage til 87 år tilbage i tiden. Jeg er i tvivl om hvordan jeg skal lave det. Nogen der har et foreslag?
Avatar billede w13 Novice
27. december 2007 - 11:24 #1
Jeg tror, det må være noget i stil med:

echo "<select>";
for ($counter=date(Y)-17;$counter<date(Y)-87;$counter--){
    echo "<option>";
    echo $counter;
    echo "</option>";
}
echo "</select>";
Avatar billede asn24 Nybegynder
27. december 2007 - 11:38 #2
Det ser faktisk ret fornuftigt ud :)

Men hvilken variabel skal jeg smide hvis jeg vil give den en value?
Avatar billede w13 Novice
27. december 2007 - 11:43 #3
Nå ja. Hvis value skal være år (hvilket jeg går ud fra), skal det være:

echo "<select>";
for ($counter=date(Y)-17;$counter<date(Y)-87;$counter--){
    echo "<option value='$counter'>";
    echo $counter;
    echo "</option>";
}
echo "</select>";
Avatar billede asn24 Nybegynder
27. december 2007 - 11:45 #4
Selve scriptet virker desværre ikke er jeg nødt til at sige..
Avatar billede w13 Novice
27. december 2007 - 11:49 #5
Uh, men der er så mange måder, et script ikke kan virke på. =) Jeg kan umuligt rette det, hvis du ikke fortæller mig lidt mere. Virkede det før? Hvilken fejl får du? (Fejlmeddelelser er din ven!) Og kan jeg evt. se det et sted på nettet?
Avatar billede asn24 Nybegynder
27. december 2007 - 11:54 #6
lige pt ser scriptet sådan ud:

<select name="year" class="small">
            <option value="">Vælg år</option>
            <?php
                for ($counter=date(Y)-17;$counter<date(Y)-87;$counter--){
                      echo "<option value='$counter'";
                      echo ($birthday[0] == $counter ? "selected" : "");
                      echo ">";
                    echo "$counter";
                    echo "</option>";
                }
            ?>       
</select>

Men der bliver ikke skrevet noget til siden fra PHP'en..
Avatar billede asn24 Nybegynder
27. december 2007 - 11:55 #7
Der er desværre ikke mulighed for at det kan ses på nettet, og der er ingen fejlmeddelese, bare en tom linie i kildekoden. Mine to andre dropboxes virker stadig fint :)
Avatar billede asn24 Nybegynder
27. december 2007 - 13:53 #8
Nu ser scriptet sådan ud:

$minage = date('Y') - 17;
$maxage = date('Y') - 87;
    for ($i=$minage; $i<$maxage; $i--) {
        $sel = '';
        if ($birthday[0] == $i) {$sel=' selected ';}
                echo '<option value="'.$i.'" '.$sel.' >'.$i.'</option>';
      }

Fandt det på php.net, og omskrev en smule, men det virker stadig ikke.. og der er stadig ingen fejlmeddelese i browseren, eller i kildekoden..
Avatar billede w13 Novice
27. december 2007 - 15:55 #9
Prøv at skrive hele din kode her så.
Avatar billede asn24 Nybegynder
27. december 2007 - 16:27 #10
<?php
session_start();
include("personal.php");

$birthday = explode("-", "$person->birthday"); ?>

    <form name"personalData"  enctype="multipart/form-data" action="<?=$_SERVER['REQUEST_URI']?>" onSubmit="validatePersonelForm(this);return false;" method="post">
    <h2>Person oplysninger</h2>
    <div class="act">
        <div class="inputRow inputRowFirst">Fornavn *<br/><input type="text" class="row" value="<?=addslashes($person->firstName)?>" name="firstName"/></div>
        <div class="inputRow">Mellemnavn(e)<br/><input type="text" class="row" value="<?=addslashes($person->middleName)?>" name="middleName"/></div>
        <div class="inputRow">Efternavn *<br/><input type="text" class="row" value="<?=addslashes($person->lastName)?>" name="lastName"/></div>
   
        <div class="inputRow inputRowFirst">Adresse *<br/><input type="text" class="large" value="<?=$person->adress?>" name="adress"/></div>
   
        <div class="inputRow inputRowFirst">Post Nr *<br/><input type="text" class="small" value="<?=$person->zipCode?>" name="zipCode"/></div>
        <div class="inputRow">By *<br/><input type="text" class="double" value="<?=$person->city?>" name="city"/></div>
        <div class="inputRow inputRowFirst">Fødselsdag *</div>
        <div class="inputRow inputRowFirst normal">
                <select name="day" class="small">
            <option value="">Vælg dag</option>
            <option value="1" <?php echo ($birthday[2] == 1 ? "selected" : "") ?>>1</option>
            <option value="2" <?php echo ($birthday[2] == 2 ? "selected" : "") ?>>2</option>
            ...
        </select>
        <select name="month" class="small">
            <option value="">Vælg måned</option>
            <option value="1" <?php echo ($birthday[1] == 1 ? "selected" : "") ?>>Januar</option>
            <option value="2" <?php echo ($birthday[1] == 2 ? "selected" : "") ?>>Februar</option>
            ...
        </select>
        <select name="year" class="small">
            <option value="">Vælg år</option>
            <?php
                $minage = date('Y') - 17;
                                $maxage = date('Y') - 87;
                                    for ($i=$minage; $i<$maxage; $i--) {
                                  $sel = '';
                                  if ($birthday[0] == $i) {$sel=' selected ';}
                                  echo '<option value="'.$i.'" '.$sel.' >'.$i.'</option>';
                                  }
            ?>
           
        </select>

Har tilladt mig at strippe koden for det meste unødvendige kode.
Avatar billede w13 Novice
27. december 2007 - 16:54 #11
Står der så kun "vælg år" i selecten?
Avatar billede asn24 Nybegynder
27. december 2007 - 16:59 #12
Ja
Avatar billede w13 Novice
27. december 2007 - 17:01 #13
Jamen så må vi jo debugge. Prøv at udskrive minage og maxage ligeså snart de er blevet sat - dvs. uden for løkken.
Avatar billede asn24 Nybegynder
27. december 2007 - 17:45 #14
Ingen fejl der. Så må fejlen jo ligge i for-løkken?
Avatar billede w13 Novice
27. december 2007 - 17:55 #15
Ingen fejl? Returnerer den så de korrekte årstal?
Avatar billede w13 Novice
27. december 2007 - 17:56 #16
Muligvis skal:
  $i<$maxage
være:
  $i>$maxage
ja :)
Avatar billede asn24 Nybegynder
27. december 2007 - 17:56 #17
Jep..

Har prøvet med en while-løkke i stedet for en for-løkke, men det giver det samme resultat.
Avatar billede w13 Novice
27. december 2007 - 18:01 #18
Og du har prøvet:

            <?php
                $minage = date('Y') - 17;
                $maxage = date('Y') - 87;
                for ($i=$minage; $i>$maxage; $i--) {
                    $sel = '';
                    if ($birthday[0] == $i) {$sel=' selected ';}
                        echo '<option value="'.$i.'" '.$sel.' >'.$i.'</option>';
                    }
            ?>

??

Muligvis bli'r if-sætningen ikke opfyldt, så prøv også:

            <?php
                $minage = date('Y') - 17;
                $maxage = date('Y') - 87;
                for ($i=$minage; $i>$maxage; $i--) {
                    $sel = '';
                    echo 'Det virker!';
                    if ($birthday[0] == $i) {$sel=' selected ';}
                        echo '<option value="'.$i.'" '.$sel.' >'.$i.'</option>';
                    }
            ?>
Avatar billede asn24 Nybegynder
27. december 2007 - 18:05 #19
Åh.. Du er en gud! - Nu virker det.. Tusind tak!.. Smid et svar, og så skal du få lidt knaldperler for din hjælp :)
Avatar billede w13 Novice
27. december 2007 - 18:11 #20
;)
Avatar billede w13 Novice
27. december 2007 - 19:17 #21
Takker.
Avatar billede asn24 Nybegynder
27. december 2007 - 19:30 #22
Selv tak :)
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