Avatar billede MadsDue Nybegynder
14. august 2011 - 17:28 Der er 60 kommentarer

hjælp til Alder tjek

Hej

Jeg har lavet en hjemmeside.

hvor jeg er igang med at lave en opret bruger menu..

På den først side, vil jeg blandt andet kontroller, at den nye bruger er fyldt 18 år. Så han skal op give hans/hendes fødselsdag.

Jeg tænker at det skal være delt og i tre "felter" DAG, MÅNED OG ÅR

Jeg vil gerne høre om det er nogle, som har ideer til hvordan det kan gøres?
Avatar billede MadsDue Nybegynder
14. august 2011 - 17:41 #1
Den skal helst opdater sig selv, med tiden..
Avatar billede olsensweb.dk Ekspert
14. august 2011 - 17:42 #2
indtastningen kunne være som forslået i http://www.eksperten.dk/spm/943853 #7 2 forslag eller #9
om du vælger jquery datapicker eller ren js er hvad du syntes bedst om
Avatar billede olebole Juniormester
14. august 2011 - 17:51 #3
<ole>

Er problemet at få fødselsdagen ind i en database - eller er det at udregne vedkommendes alder udfra fødselsdagen i databasen?

/mvh
</bole>
Avatar billede Slettet bruger
14. august 2011 - 18:55 #4
Og dén sikkerhedsfeature kan en fjortenårig ikke omgå, eller hvad ?

HVIS indholdet på indersiden er forbudt for børn, er dét ikke løsningen!
- blot meningsløs snageri og intimidering af potentielle brugere.

Kig på NEMiD - eller (knap så sikkert) kreditkort-indbetaling af 1 kr.
Avatar billede olsensweb.dk Ekspert
14. august 2011 - 19:26 #5
du bør selvføgelig gemme fødselsdata som et timestamp i DB, men TOM er inde på noget interessant, hvordan sikre du at brugeren giver sandfærdige oplysninger ??

hvis du bare vil se noget beregning af alder i js så kig på http://www.webdeveloper.com/forum/showthread.php?t=45590
eller google "js calc age" http://www.google.dk/search?q=js+calc+age
jeg har lavet en lille dum demo http://olsensweb.dk/test/experten/spm/945038/
Avatar billede MadsDue Nybegynder
14. august 2011 - 20:02 #6
Jeg har levet det som på følgende side. hvor den også gemmer det på min DB.

http://www.magnusogmyggen.dk/mmsite/site_user_new_edit.aspx

Men jeg har ikke sat nogle kontrol på, så når man fx indtaster en fødselsdagen og man ikke er 18 år (hvor grænsen går), så skal der en spærre, på så brugerne ikke kan kommer til næste side.

og den grænse skal jo hele tiden skifte pr. dag der går. - Hvis i forstår?
Avatar billede olsensweb.dk Ekspert
14. august 2011 - 20:50 #7
Men jeg har ikke sat nogle kontrol på, så når man fx indtaster en fødselsdagen og man ikke er 18 år (hvor grænsen går), så skal der en spærre, på så brugerne ikke kan kommer til næste side.
så er det ikke JS det skal laves i, men derimod serverside (.aspx)
jeg vil anbefale dig at lukke dette spm og stille spørgsmålet over i ASPNET gruppen http://www.eksperten.dk/spm/Programmering/Script/ASPNET/, da siden er lavet med aspnet
Avatar billede MadsDue Nybegynder
14. august 2011 - 20:59 #8
troede man kunne lave det med Java, ligesom i dit eksempel. Hvor den regner alderen ud. Så skal den bare spærres hvis den er mindre end 18 år.

Det det skal ikke laves på serveren.

Jeg beder nemlig om nogle forskellige informationer på 3 sider, og på hver af de tre sider, er der nogle krav (som fx her hvor man skal være 18 år.). Den nye bruger skal leve op til kravene for at komme videre til næste side.

Til sidst på side 4. ser brugeren alle informationerne og skal accepter dem. først når brugeren har accepteret bliver han/hun oprettet på serveren.

Jeg har styre på alt det andet undtagen. Med kontrol af alderen
Avatar billede olebole Juniormester
14. august 2011 - 21:10 #9
Her i kategorien tales der om JavaScript, Java er et helt andet sprog - i en helt anden kategori. Lad os holde os til JavaScript her  =)

Jeg forstår stadig ikke konceptet. Er det ligegyldigt, hvis 10-årige Flemming-Bent vælger at være 18 år? Skal han så have vist de efterfølgende sider?
Avatar billede olsensweb.dk Ekspert
14. august 2011 - 21:12 #10
du skal under alle omstændigheder have fat i dagsdato serverside, brugeren kan sagtens have ændret datoen på egen PC og så vil udregningen være i skorven.

stol aldrig på at brugerens ur går rigtigt

når data submittes skal du kontrollere dem serverside, og hvis de er ok sende brugeren vidre til næste side eller retur til sammen side med en fejlbesked.
Avatar billede MadsDue Nybegynder
14. august 2011 - 21:25 #11
1. Så længe at man taster en fødselsdag, som giver 18+ skal man kunne komme videre. for på side 4, accpeter man at alle informationer er rigtige. O.S.V.

2. Jeg kan ikke se hvad jeg skal bruge brugernes PC'eres tid til. Da  han bare skal angive hans fødselsdag. fx 02 02 1990 også trækker vi dagsdato fra, så vi finder ud af at han/hun er 21 år. og må derfor kommer videre til næste side.

Håber i forstår hvad jeg mener
Avatar billede olebole Juniormester
14. august 2011 - 21:41 #12
2) Hvordan havde du egentlig forestillet dig, din PC ved, hvad dato det er?
Avatar billede olsensweb.dk Ekspert
14. august 2011 - 21:47 #13
ref http://www.eksperten.dk/spm/945041 #10
Jeg har lavet en opret bruger menu, som består af 4 sider.
på side 1:
der skal brugeren angive  NAVN, KØN, FØDSELSDAG OG EMAIL.
Så trykker brugeren videre, og informationer kommer til side 2.

når brugeren trykker vidre her sender du data til serveren, og her checker du på serveren om brugeren er fyldt 18, og evt også "valid" email hvis ikke retur til side 1, og ellers vidre til side 2
det eneste js check du skal lave på side 1 er om felterne er udfyldt, men de skal også checkes serverside


2. Jeg kan ikke se hvad jeg skal bruge brugernes PC'eres tid til
du skal have fat i dags dato
alder = dagsdato - indtastede FØDSELSDAG
Avatar billede MadsDue Nybegynder
14. august 2011 - 21:54 #14
okay. troede det var noget nemmere at lave.

kan man ikke bruger følgende til at finde dagsdato?

http://www.w3schools.com/js/tryit.asp?filename=tryjs_events
Avatar billede MadsDue Nybegynder
14. august 2011 - 21:55 #15
Avatar billede olebole Juniormester
14. august 2011 - 21:56 #16
Som ronols implicit skriver: Der er absolut ingen sikkerhed i frontend kode - herunder JavaScript!

Brugeren kan så let som ingenting indsætte ekstra formfelter, slette bestående og rette i evt. JavaScript funktioner.

Du kan som nævnt heller ikke gå udfra, at brugerens ur går rigtigt. Gør det ikke det, kan JavaScript ikke slå den korrekte dato op
Avatar billede olebole Juniormester
14. august 2011 - 21:58 #17
Ret dit PC-ur til samme dag og tid for en måned siden. Gå så ind på de to sider, du linker til ovenfor. Så vil du se, at det (populært sagt) er uret på din PC, JavaScript spørger
Avatar billede olsensweb.dk Ekspert
15. august 2011 - 07:00 #18
du kunne evt skrive BeregnAlder om så den anvender AJAX, så selve beregningen forgår serverside, sender fødselsdagsdato som parameter til server og denne anvender serverdato, beregner alderen og sender den retur til clienten, så er vi ude om clientens ur
men du har stadig ikke nogle sikkerhed for hvis 10-årige Flemming-Bent vælger at være 18 år?

men som jeg ser det, sender du allerede data når du forlader sde 1. som jeg skrev i #13, og bør lave beregningen før du sender side 2
Avatar billede olsensweb.dk Ekspert
15. august 2011 - 07:24 #19
en nemmerer ide er selvføgelig bare at sette dagsdato serverseide, og ligge den over i JS.
Avatar billede MadsDue Nybegynder
15. august 2011 - 08:34 #20
okay. det vil sige.

At jeg skal have lavet det her med ASP.NET i stedet for, før at det kan virke?

Hvis jeg ligger det i JS, vil brugeren så få besked hvis han ikke er  over 18 år? ligeså snart han har tastet informationerne?
Avatar billede olebole Juniormester
15. august 2011 - 14:58 #21
Orv, det er dæleme smart! Hvis man ikke ved, hvor gammel man er, kan man gå ind på din side og få at vide, om man er over eller under 18. Flot! *LoL*

Nej, du behøver ikke lave det i ASP.NET. Du kan lave det i hvad somhelst. Det er rystende ligegyldigt, for du foretager under alle omstændigheder evalueringen på fuldstændig tilfældige data.

Alle sprog kan afgøre om et tilfældigt tal (timestamp udfra brugerens indtastning) er større eller mindre end et andet tal (timestamp på dags dato minus 18 år). Set i det lys kan det være bedøvende ligegyldigt, hvilken tidsangivelse du tager udgangspunkt i - og hvor nøjagtig den er.

Din model kan med andre ord intet sige om brugerens alder, hvorfor det er noget vrøvl at tale om, hvad der kan komme til at virke.

Hvis du skal bruge det til noget seriøst, bør du finde en helt anden tilgang til problemet (f.eks. NemID) - for så skal det virke.

Hvis du derimod bare skal lege med noget kode, kan du lave det client- eller serverside, som du ønsker. Med et helt tilfældigt udgangspunk vil resultatet under alle omstændigheder være helt tilfældigt - og dermed ubrugeligt til noget seriøst.
Avatar billede olsensweb.dk Ekspert
15. august 2011 - 15:23 #22
>At jeg skal have lavet det her med ASP.NET i stedet for, før at det kan virke?
grunden til at jeg omtalte ASPNET var at den side du referarede til kørte aspx, men har senere set du også har spm åbent i PHP (http://www.eksperten.dk/spm/945041), om muligvis sammen project, og der kan du ikke kører asp, du kan ikke blande de 2 serverside sprog.

>Hvis jeg ligger det i JS, vil brugeren så få besked hvis han ikke er  over 18 år?
det kan han godt, men der skal følges op med serverside validering, du kan have fejl i din js code der slår js fra, brugeren kan slå det fra, og avancerede brugere kan manipulerer med det.
men dette fra BeregnAlder() skal settes server side
var now = new Date();
tday=now.getDate();
tmo=(now.getMonth());
tyr=(now.getFullYear());

måneds og års selectboxene skal også laves serverside.

men som tidliger nævnt du har ikke nogle sikkerhed for at brugeren indtaster korrekte data (10-årige Flemming-Bent kan sagtens vælger at være 18 år?)
Avatar billede MadsDue Nybegynder
15. august 2011 - 15:27 #23
Okay.

Jeg her ligeglad med om brugeren, indtaster de rigtige eller forkerte oplysninger. Da jeg går ud fra at alle er ærlige.

Men Ronols, har du et link til nogle sidder, hvor jeg kan gør det med js? og serverside, så jeg for dagsdato til at være rigtig. Så det ikke er brugerens computer der bliver brugt?
Avatar billede olebole Juniormester
15. august 2011 - 15:36 #24
Hvis du er ligeglad, er det jo ligegyldigt, om brugeren faktisk er 18 år - og så er det nemmeste da at skrive:


<div>Er du fyldt 18 år</div>
Ja <input name="age_limit" type="radio" value="ja">
Nej <input name="age_limit" type="radio" value="nej" checked="checked">


I øvrigt viser al erfaring, at webbrugere er alt andet end ærlige  =)
Avatar billede olsensweb.dk Ekspert
15. august 2011 - 17:16 #25
#23
hvor jeg kan gør det med js? og serverside, så jeg for dagsdato til at være rigtig. Så det ikke er brugerens computer der bliver brugt?

prøv at kigge på dette
google "php var js" http://www.google.dk/search?q=php+var+js
http://www.daniweb.com/web-development/php/threads/19598
http://p2p.wrox.com/php-faqs/11606-q-how-do-i-pass-php-variables-javascript.html


i js function beregn: slet det der er udkommenteret, og erstat det med php coden der er vist neden under
function BeregnAlder(){                
    var bday=parseInt(document.getElementById("dato").value);           
    var bmo=parseInt(document.getElementById("maaned").value);
    var byr=parseInt(document.getElementById("Aar").value);
    var byr;
    var age;
/*       
    var now = new Date();       
*/
<?php
    $now = date("Y-n-j");        
    $data = explode("-",$now);       
    echo "var now = new Date(".$data[0].", ".($data[1]-1) .", ".$data[2].");";
?>       
    tday=now.getDate();
    tmo=(now.getMonth());
    tyr=(now.getFullYear());       
    if((tmo > bmo)||(tmo==bmo & tday>=bday))
        {age=byr}
    else
        {age=byr+1}
    alert("As of today, "+now+' \n'+", you are:"+(tyr-age)+ " years old");       
}


#24
I øvrigt viser al erfaring, at webbrugere er alt andet end ærlige  =)
ja desværre :(

vedr sikkerhed kan jeg se det begynder at kører i http://www.eksperten.dk/spm/943937 #9
Avatar billede olebole Juniormester
15. august 2011 - 23:04 #26
ronols >> Jeg mener, du har lavet to fejl i koden (har ikke testet):

1) Du erklærer to variabler med navnet byr. Begge eksisterer i hukommelsen, men JS vil kun se den sidste - og den er undefined.

2) DATE.getMonth returnerer et månedsindeks, begyndende med 0. Derfor mener jeg, du bør skrive: tmo=now.getMonth()+1;
Avatar billede olsensweb.dk Ekspert
16. august 2011 - 07:15 #27
>1)
du har ret det er en smutter, så kan jeg lære det !!! man ikke bare skal råkopierer, fejlen ligger også i org coden i http://www.webdeveloper.com/forum/showthread.php?t=45590

>2) DATE.getMonth returnerer et månedsindeks, begyndende med 0
i js er januar måned 0, :(, hvorimod i andre sprog feks PHP er januar måned 1
det var jo derfor jeg var nød til at trække 1 fra her ($data[1]-1) da jeg gik fra PHP til JS
http://www.w3schools.com/jsref/jsref_getmonth.asp
Avatar billede olebole Juniormester
16. august 2011 - 13:11 #28
1) Ja, der skrives meget 'derude'
2) Jeg havde noteret mig, du gjorde det rigtige den ene vej, så jeg gik også udfra, det var en tankefisk af en art  *o)
Avatar billede MadsDue Nybegynder
16. august 2011 - 14:50 #29
okay. Jeg har lavet følgende:)

<head>
<script language="javascript">
<!--
function BeregnAlder(){               
    var bday=parseInt(document.getElementById("dato").value);           
    var bmo=parseInt(document.getElementById("maaned").value);
    var byr=parseInt(document.getElementById("Aar").value);
    var byr;
    var age;
/*       
    var now = new Date();       
*/
<?php
    $now = date("Y-n-j");       
    $data = explode("-",$now);       
    echo "var now = new Date(".$data[0].", ".($data[1]-1) .", ".$data[2].");";
?>       
    tday=now.getDate();
    tmo=(now.getMonth());
    tyr=(now.getFullYear());       
    if((tmo > bmo)||(tmo==bmo & tday>=bday))
        {age=byr}
    else
        {age=byr+1}
    alert("As of today, "+now+' \n'+", you are:"+(tyr-age)+ " years old");       
}
//-->
</script>
</head>
<body>
<form action="../../sider/opret_brugere/opret_bruger2.php" method="post" name="frm" id="frm" onsubmit="return validate()">

<div class="personnummer">Fødselsdag<br/><br/>
                                    <select class="dag" name="txtBday">
                                    <?php include("kalender/dag.php"); ?>
                                    </select>
                                    <select class="maaend" name="txtBmo">
                                    <?php include("kalender/maaend.php"); ?>
                                    </select>
                                    <select class="aar" name="txtByr">
                                    <?php include("kalender/aar.php"); ?>
                                    </select>
                                   
                                   
                            </div><br/>
<input type="Submit" class="videre" value=" Videre " />

Men det virker altså ikke
Avatar billede olsensweb.dk Ekspert
16. august 2011 - 15:48 #30
uden at kende dine kalender * filer
<select class="dag" name="txtBday">
<?php include("kalender/dag.php"); ?>
</select>
<select class="maaend" name="txtBmo">
<?php include("kalender/maaend.php"); ?>
</select>
<select class="aar" name="txtByr">
<?php include("kalender/aar.php"); ?>
</select>

kan jeg umildbart se følgende fejl:
du har kun givet dine select boxe et navn ikke et id, og vi henter værdien med getElementById
du har lavet navnet om i forholdt til det der kaldes i scriptet
var bday=parseInt(document.getElementById("dato").value);         
var bmo=parseInt(document.getElementById("maaned").value);
var byr=parseInt(document.getElementById("Aar").value);
 
skal så hedde
var bday=parseInt(document.getElementById("txtBday").value);         
var bmo=parseInt(document.getElementById("txtBmo").value);
var byr=parseInt(document.getElementById("txtByr").value); 


hvis du har januar som 1 i value i din  maaend.php selectbox skal

var bmo=parseInt(document.getElementById("txtBmo").value);
se sådan ud:
var bmo=parseInt(document.getElementById("txtBmo").value) -1;

i JusterDage()
select.setAttribute("id", "dato");       
skal hedde
select.setAttribute("id", "txtBday");       

hvis ovenstående stadig skal vi se coden til aar.php
Avatar billede olsensweb.dk Ekspert
16. august 2011 - 16:03 #31
du har glemt at læse det ole skriver i #26
1) Du erklærer to variabler med navnet byr. Begge eksisterer i hukommelsen, men JS vil kun se den sidste - og den er undefined.
den ignorer tilsynaladende bare anden gang den bliver erklæret, for værdien bliver ikke ændret, men det er ikke god codesstil
linjen var byr; skal slettes


dette var en tanke fejl jeg ikke havde lavet det, jeg har nemlig value = 1 for januar måned i min select box
var bmo=parseInt(document.getElementById("txtBmo").value) -1;
Avatar billede MadsDue Nybegynder
16. august 2011 - 16:26 #32
'Okay.. Nu har jeg rettet det til følgende:

function BeregnAlder(){               
var bday=parseInt(document.getElementById("txtBday").value);         
var bmo=parseInt(document.getElementById("txtBmo").value) -1;
var byr=parseInt(document.getElementById("txtByr").value);
   
    var age;
/*       
    var now = new Date();       
*/
<?php
    $now = date("Y-n-j");       
    $data = explode("-",$now);       
    echo "var now = new Date(".$data[0].", ".($data[1]-1) .", ".$data[2].");";
?>       
    tday=now.getDate();
    tmo=(now.getMonth());
    tyr=(now.getFullYear());       
    if((tmo > bmo)||(tmo==bmo & tday>=bday))
        {age=byr}
    else
        {age=byr+1}
    alert("As of today, "+now+' \n'+", you are:"+(tyr-age)+ " years old");       
}
//-->
</script>
</head>
<body>
<form action="../../sider/opret_brugere/opret_bruger2.php" method="post" name="frm" id="frm" onsubmit="return validate()">

<div class="personnummer">Fødselsdag<br/><br/>
                                    <select class="dag" name="txtBday">
                                    <?php include("kalender/dag.php"); ?>
                                    </select>
                                    <select class="maaend" name="txtBmo">
                                    <?php include("kalender/maaend.php"); ?>
                                    </select>
                                    <select class="aar" name="txtByr">
                                    <?php include("kalender/aar.php"); ?>
                                    </select>
                                   
                                   
                            </div><br/>
<input type="Submit" class="videre" value=" Videre " />
</body>

Jeg ved ikke hvad du mener med følgende:

i JusterDage()
select.setAttribute("id", "dato");       
skal hedde
select.setAttribute("id", "txtBday");   


Min måend se følgende ud:
Januar = value 1
Februar = Value 2
osv.
Avatar billede olsensweb.dk Ekspert
16. august 2011 - 17:05 #33
slet det udkommenteret og indsæt det fremhævet istedet
function JusterDage(){       
        var fragment = document.createDocumentFragment();
/*
        var daglisteelm = document.getElementById("dato");
        var aarvalue = document.getElementById("Aar").value;
        var md = document.getElementById("maaned").value;
*/
        var daglisteelm = document.getElementById("txtBday");
        var aarvalue = document.getElementById("txtByr").value;
        var md = document.getElementById("txtBmo").value;
       
        var dage = Dage(md, aarvalue);        
        var select = document.createElement('select');       
/*   
        select.setAttribute("id", "dato");       
*/
        select.setAttribute("id", "txtBday");        
        select.setAttribute("onchange", "BeregnAlder()");       
        for( var i = 1; i <= dage; i++ ) {
            var option = document.createElement('option');
            option.setAttribute("value",i);
            var text = document.createTextNode(i);
            option.appendChild(text);
            select.appendChild(option);
        }
        fragment.appendChild(select);       
        daglisteelm.parentNode.replaceChild(fragment, daglisteelm);           
}   


>Min måend se følgende ud:
jeg syntes ikke jeg ser noget echo
jeg syntes ikke jeg ser noget <options>


<select class="dag" name="txtBday">
<?php include("kalender/dag.php"); ?>
</select>
<select class="maaend" name="txtBmo">
<?php include("kalender/maaend.php"); ?>
</select>
<select class="aar" name="txtByr">
<?php include("kalender/aar.php"); ?>
</select>


ville se noglelunde sådan ud:
<?php
    $year = date("Y");
    $html='<select class="aar" size="1" id="txtByr"  name="txtByr" onchange="JusterDage()">';
    for($i=1900; $i<= $year; $i++){
        $html .= '<option value="'.$i.'">'.$i.'</option>';                   
    }                   
    $html .= '</select>';                   
    echo $html;

    $Month = array("Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","Novenber","December");
    $html = '<select class="maaend" size="1" name="txtBmo" id ="txtBmo" onchange="JusterDage()">';                   
    for($i=0, $j=1; $i<12; $i++, $j++){
        $html .= '<option value="'.$j.'">'.$Month[$i].'</option>';                   
    }                   
    $html .= '</select>';
    echo $html;       
?>
<select class="dag" size="1" id="txtBday" name="txtBday">                       
    <option value="0">0</option>                       
</select>
Avatar billede MadsDue Nybegynder
21. august 2011 - 17:55 #34
slet det udkommenteret og indsæt det fremhævet istedet
function JusterDage(){       
        var fragment = document.createDocumentFragment();
/*
        var daglisteelm = document.getElementById("dato");
        var aarvalue = document.getElementById("Aar").value;
        var md = document.getElementById("maaned").value;
*/
        var daglisteelm = document.getElementById("txtBday");
        var aarvalue = document.getElementById("txtByr").value;
        var md = document.getElementById("txtBmo").value;       
        var dage = Dage(md, aarvalue);       
        var select = document.createElement('select');       
/*   
        select.setAttribute("id", "dato");       
*/
        select.setAttribute("id", "txtBday");       
        select.setAttribute("onchange", "BeregnAlder()");       
        for( var i = 1; i <= dage; i++ ) {
            var option = document.createElement('option');
            option.setAttribute("value",i);
            var text = document.createTextNode(i);
            option.appendChild(text);
            select.appendChild(option);
        }
        fragment.appendChild(select);       
        daglisteelm.parentNode.replaceChild(fragment, daglisteelm);           
}   


Jeg ved desværre ikke helt hvad du mener, med det udkommeenteret.?

Vil det sige at jeg skal gør sådan her?

<script language="javascript">
<!--
function BeregnAlder(){               
var bday=parseInt(document.getElementById("txtBday").value);         
var bmo=parseInt(document.getElementById("txtBmo").value) -1;
var byr=parseInt(document.getElementById("txtByr").value);
   
    var age;
slet det udkommenteret og indsæt det fremhævet istedet
function JusterDage(){       
        var fragment = document.createDocumentFragment();
/*
        var daglisteelm = document.getElementById("dato");
        var aarvalue = document.getElementById("Aar").value;
        var md = document.getElementById("maaned").value;
*/
        var daglisteelm = document.getElementById("txtBday");
        var aarvalue = document.getElementById("txtByr").value;
        var md = document.getElementById("txtBmo").value;       
        var dage = Dage(md, aarvalue);       
        var select = document.createElement('select');       
/*   
        select.setAttribute("id", "dato");       
*/
        select.setAttribute("id", "txtBday");       
        select.setAttribute("onchange", "BeregnAlder()");       
        for( var i = 1; i <= dage; i++ ) {
            var option = document.createElement('option');
            option.setAttribute("value",i);
            var text = document.createTextNode(i);
            option.appendChild(text);
            select.appendChild(option);
        }
        fragment.appendChild(select);       
        daglisteelm.parentNode.replaceChild(fragment, daglisteelm);           
}   

<?php
    $now = date("Y-n-j");       
    $data = explode("-",$now);       
    echo "var now = new Date(".$data[0].", ".($data[1]-1) .", ".$data[2].");";
?>       
    tday=now.getDate();
    tmo=(now.getMonth());
    tyr=(now.getFullYear());       
    if((tmo > bmo)||(tmo==bmo & tday>=bday))
        {age=byr}
    else
        {age=byr+1}
    alert("As of today, "+now+' \n'+", you are:"+(tyr-age)+ " years old");       
}
//-->
</script>

eller hvad?


Jeg har ændret det nede i body, som du har lavet. Men jeg kan ikke vælger nogen dag på siden, der står bare nul.?
Avatar billede olsensweb.dk Ekspert
21. august 2011 - 19:26 #35
>Jeg ved desværre ikke helt hvad du mener, med det udkommeenteret.?
alt det der står fra og med /* til og med */
samt fra og med // og resten af linjen

>Jeg har ændret det nede i body, som du har lavet
sikkert ikke helt som jeg har skrevet, når man ændre navne et sted skal man huske at rette de affødte steder også

komplet code ser nu sådan ud med dine navne:
<!DOCTYPE html>
<html>
  <head>
      <title> test </title>     
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
    <script type="text/javascript">
    function isLeapYear(Year){   
        return  ((Year % 4 == 0 && Year % 100 != 0) || Year % 400 == 0) ? true : false;
    }
    function Dage(md, Year){       
        return [31,(isLeapYear(Year) ? 29:28),31,30,31,30,31,31,30,31,30,31][md-1];
    }   
    function JusterDage(){       
        var fragment = document.createDocumentFragment();
        var daglisteelm = document.getElementById("txtBday");
        var aarvalue = document.getElementById("txtByr").value;
        var md = document.getElementById("txtBmo").value;
        var dage = Dage(md, aarvalue);        
        var select = document.createElement('select');
        select.setAttribute("id", "txtBday");       
        select.setAttribute("onchange", "BeregnAlder()");       
        for( var i = 1; i <= dage; i++ ) {
            var option = document.createElement('option');
            option.setAttribute("value",i);
            var text = document.createTextNode(i);
            option.appendChild(text);
            select.appendChild(option);
        }
        fragment.appendChild(select);       
        daglisteelm.parentNode.replaceChild(fragment, daglisteelm);           
    }       
    function BeregnAlder(){               
        var bday=parseInt(document.getElementById("txtBday").value);           
        var bmo=parseInt(document.getElementById("txtBmo").value) -1;
        var byr=parseInt(document.getElementById("txtByr").value);
        var age;       
    <?php
        $now = date("Y-n-j");
        $data = explode("-",$now);       
        echo "var now = new Date(".$data[0].", ".($data[1]-1) .", ".$data[2].");";
    ?>       
        tday=now.getDate();
        tmo=(now.getMonth());
        tyr=(now.getFullYear());       
        if((tmo > bmo)||(tmo==bmo & tday>=bday))
            {age=byr}
        else
            {age=byr+1}
           
        alert("As of today, "+now+' \n'+", you are:"+(tyr-age)+ " years old");       
    }   
    </script>     
</head>
  <body> 
  <form method="post" action="#">
  <?php
        $year = date("Y");
        $html='<select size="1" id="txtByr"  name="txtByr" onchange="JusterDage()">';
        for($i=1900; $i<= $year; $i++){
            $html .= '<option value="'.$i.'">'.$i.'</option>';                   
        }                   
        $html .= '</select>';                   
        echo $html;

        $Month = array("Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","Novenber","December");
        $html = '<select size="1" name="txtBmo" id ="txtBmo" onchange="JusterDage()">';                   
        for($i=0, $j=1; $i<12; $i++, $j++){
            $html .= '<option value="'.$j.'">'.$Month[$i].'</option>';                   
        }                   
        $html .= '</select>';
        echo $html;       
  ?>                         
    <select size="1" id="txtBday" name="txtBday">                       
        <option value="0">0</option>                       
    </select>
    </form>   
    </body>
</html>
Avatar billede MadsDue Nybegynder
22. august 2011 - 21:57 #36
okay kanon, men nu kan man jo bare ændre sin tid, for at snyde. du snakket om en måde hvor man kunne undgå det. Det var lidt det jeg troede du viste mig hvordan man gjorde.

kan man i stedet for alert boksen. for følgende tekste med rød, oven over de fletter hvor man vælger sin fødselsdag i?

hvis personen er 18+ "Du har XX år gammel"

under 18 år "Man skal desværre være 18 år, for at oprette sig"

??
Avatar billede olsensweb.dk Ekspert
23. august 2011 - 06:45 #37
>men nu kan man jo bare ændre sin tid, for at snyde
prøv at ligge scriptet op på din web server, så det ikke kører localhost

>for følgende tekste med rød, oven over de fletter hvor man vælger sin fødselsdag i?

lav en css rule
<style type="text/css">
#tt{
    color: red;
}
</style>


indsæt det fremhævet   
<form method="post" action="#">
span id="tt"></span><br />
<?php
   

i BeregnAlder()
erstat
alert("As of today, "+now+' \n'+", you are:"+(tyr-age)+ " years old");

med
if(tyr-age < 18){
    document.getElementById("tt").innerHTML = "Man skal desværre være 18 år, for at oprette sig";               
}
else{
    document.getElementById("tt").innerHTML = "du er : "+(tyr-age)+ " år gammel";       
}

   
demo http://olsensweb.dk/test/experten/spm/945038/   
source http://olsensweb.dk/test/experten/spm/945038/index.php?source
Avatar billede MadsDue Nybegynder
26. august 2011 - 17:06 #38
Kanon, det er lavet nu..

Men nu kan bruger stadigvæk kommer videre, uden at han/hun bliver stoppet og en advarsel som at de skal huske at udfylde fødselsdag.

Jeg ved ikke hvordan man ligger det op på serven? det har jeg ikke sat mig ind i endnu. jeg har bare oprette en phpmyadmin mysql server. Men jeg ved overhovedet ikkee om det er sikkert eller noget
Avatar billede olebole Juniormester
26. august 2011 - 17:40 #39
Jeg tror, du bliver nødt til at forklare, hvad en "phpmyadmin mysql server". Sådan en er der vist ikke mange, der har hørt om - så om det er sikkert eller ej, er ikke til at sige  =)
Avatar billede MadsDue Nybegynder
26. august 2011 - 19:19 #40
okay :)

Jeg har et XAMPP control panel.

Med den kan jeg komme ind på phpMyAdmin, hvor jeg kan lave tabeller o.s.v.

http://www.phpmyadmin.net/home_page/index.php
Avatar billede olebole Juniormester
26. august 2011 - 19:48 #41
Brug din XAMPP til udvikling og eksperimenter, og find et billigt webhotel til at lægge sitet på, så det bliver gjort offentlig tilgængeligt
Avatar billede olsensweb.dk Ekspert
26. august 2011 - 19:54 #42
Men nu kan bruger stadigvæk kommer videre, uden at han/hun bliver stoppet og en advarsel som at de skal huske at udfylde fødselsdag.
når du går fra side 1 til side 2 trykker du vel på en knap, og det skal du så kalde en form validation (http://www.w3schools.com/js/js_form_validation.asp)
du kunne jo rette BeregnAlder så den bare retunerer alderen og så udskrive teksten ifm form validering, og form validering retunerer true/false, hvilke er beskrevet oppe i linket til w3schools
men du skal selvføgelig følge op med serverside validering, for som olebole skriver til TumseMM i http://www.eksperten.dk/spm/943633 #8 Brug JavaScript for brugerens skyld og PHP for din og din servers sikkerheds skyld

efterhånden tror jeg der er behov for at se hele coden til din side ??, derved kan vi se hvordan den kommer vidre til side 2
smid den på pastebin.com og læg linket herind...
Avatar billede MadsDue Nybegynder
30. august 2011 - 17:34 #43
Avatar billede olsensweb.dk Ekspert
31. august 2011 - 21:48 #44
får styr på din HTML og valider din side, jeg kan se du har et nogle problemer med dit tegn sæt
linje 9 + 10 + 13 + 57 har du <meta http-equiv="content-type" content="text/html; charset
slet linje 9+10 + 57

jquery:
linje 20, og nedaf kalder du en jquery funtion, men du har ikke loadet jquery lib, medmindre det er det i linje 17, som jeg ser det loader du først jquery i linje 53
linje 20 jQuery.extend(Drupal.settings, { "basePath
hvad bruger du drupal til ??

i din validate() har du en fejl
if (!IsValidEmailAddress(frm.mail.value) ){        
    err_fld.firstChild.nodeValue = "Email er ikke udfyldt.";   
    frm.mail.focus();
    return false;
}   
   
skal se sådan ud
if (!IsValidEmailAddress(document.frm.mail.value) ){        
            err_fld.firstChild.nodeValue = "Email er ikke udfyldt.";   
            document.frm.mail.focus();
            error = 1;
}
   

og så ville jeg validerer alderen ifm form submit der som bekendt kalder validate().
så ændre beregnalder() så den setter en global variabel med alderen / retunerer alderen, og test i validate(), om alderen er mindre end 18.
jeg ville vælge at retunerer alderen, jeg kan ikke lide globale variable
Avatar billede MadsDue Nybegynder
18. september 2011 - 11:50 #45
Jeg kan da ikke valider den, når den ikke er online?


Jeg har ændret det du sagde til: http://pastebin.com/Cj4grihT

Men jeg er stadigvæk ikke med på hvordan jeg gør det med alder tjek?
Avatar billede olsensweb.dk Ekspert
18. september 2011 - 12:28 #46
1 linje 
if(isset($_GET["source"])) { highlight_file(__FILE__); exit; }

skal du ikke bruge live, den er kun med for at vise source http://dk.php.net/highlight_file

>Jeg kan da ikke valider den, når den ikke er online?
du kan da sagtens trykke submit, og dermed kalde functionen validate(), din egen PC er jo selv server

>Men jeg er stadigvæk ikke med på hvordan jeg gør det med alder tjek?
kig på disse, og læg mærke til functionerne beregnalder() og validate()
http://olsensweb.dk/test/experten/spm/945938/index.php?source
http://olsensweb.dk/test/experten/spm/945938/2011-08-30_ronols.php?source
Avatar billede MadsDue Nybegynder
18. september 2011 - 12:45 #47
okay..

men den bremser ikke ind, hvis man ikke udfylder noget?

og man kan bare ændre sin egen tid på computeren?
Avatar billede olsensweb.dk Ekspert
18. september 2011 - 17:20 #48
>men den bremser ikke ind, hvis man ikke udfylder noget?
hvad tror du dette gør ??, den tester netop på om fornavn er blankt
if (frm1.fornavn.value == '' || frm1.fornavn.value == null || frm1.fornavn.value== 'Fornavn:'){                
    err_fld.firstChild.nodeValue = "Fornavn er ikke udfyldt.";                   
    frm1.fornavn.style.backgroundColor = errorcolor;
    error = 1;                   
}

du har et tilsvarende på efternavn

>og man kan bare ændre sin egen tid på computeren?
det vil kun virker sålænge du anvende localhost som server, når den kommer op en server ude i byen kan du ændre dine locale ids instillinger lige så tosset du vil, scriptet vil stadig regne rigtigt
Avatar billede MadsDue Nybegynder
18. september 2011 - 19:04 #49
okay,

det er jeg mente med at den ikke bremser, er ikke ved navn og efternavn,

Men ved datoen...
Avatar billede olsensweb.dk Ekspert
18. september 2011 - 19:15 #50
demo
http://olsensweb.dk/test/experten/spm/945938/index.php

ikke gammel nok, bliver på siden og skriver en fejl

over 18 kommer til en ny side, læg mærke til # dvs du er kommet vidre, # er bare den side jeg poster til

du kan iøvrigt prøve at ændre din dato på lokal pc'en og se om det påvirker alders beregningen :)

du vil finde den sammen code på http://olsensweb.dk/test/experten/spm/945938/2011-08-30_ronols.php?source, der kan jeg bare ikke lave en demo da jeg ikke har dine include biblioteker
Avatar billede MadsDue Nybegynder
19. september 2011 - 18:12 #51
Din demo virker ikke, da jeg ikke kan vælge dage.

Hvis jeg indsætter http://olsensweb.dk/ (...) bremser den intet.

Jeg har alle funktioner på min side, men jeg har ikke en regel som bremser dem der trykker en yngre alder end 18.
Avatar billede olsensweb.dk Ekspert
19. september 2011 - 18:40 #52
prøv igen, jeg havde lige lagt noget test på select boxen, men glemt en parantes :)

function validateForm(){   
    var error = 0;       
    var bday=document.getElementById("txtBday").value
    if(bday==0){
        document.getElementById("tt").innerHTML = "De har ikke valgt noget i dato feltet";
        error=1;
    }

    var alder = BeregnAlder();
    if(alder<18){
        document.getElementById("tt").innerHTML = "Man skal desværre være 18 år, for at oprette sig";
        error=1;
    }       
    return (error)? false : true;
}
Avatar billede MadsDue Nybegynder
19. september 2011 - 20:23 #53
Kanon,

Nu er den der næsten.

Den ser sådan her ud nu. http://pastebin.com/Uavx5ZHT

Men jeg har lige en skønhedsfejl, jeg vil høre om du kan hjælpe med.

Hvis jeg taster at jeg er under 18 år. fx 1995 marts 04. Så kommer teksten også rigtig fint frem. Men når jeg efterfølgende taster en rigtig ind som fx 1990 marts 04. forsvinder fejlteksten ikke. (forudsætter at jeg ikke har udfyldt de andre emner, så jeg ikke kan komme videre til næste side).
Avatar billede olsensweb.dk Ekspert
20. september 2011 - 08:53 #54
>Men når jeg efterfølgende taster en rigtig ind som fx 1990 marts 04. forsvinder fejlteksten ikke
det er jo meget nemt, indsæt den fremhævet linje i functionen validate()

document.getElementById("err_tt").innerHTML = "";
var bday=document.getElementById("txtBday").value
if(bday==0){
    document.getElementById("err_tt").innerHTML = "De har ikke valgt noget i dato feltet";
    error=1;
}
Avatar billede olsensweb.dk Ekspert
20. september 2011 - 09:05 #55
som du nok kan se i functionen validate skrives fejl beskeden for både dato og alder i sammen felt, det bør nok være i hvert sit felt,

document.getElementById("err_tt").innerHTML = ""; 
var bday=document.getElementById("txtBday").value
if(bday==0){
    document.getElementById("err_tt").innerHTML = "De har ikke valgt noget i dato feltet";
    error=1;
}

document.getElementById("err_tt").innerHTML = ""; 
var alder = BeregnAlder();
if(alder<18){       
    document.getElementById("err_tt").innerHTML = "Man skal være 18 år, for at oprette sig";               
    error = 1;           
}
Avatar billede olsensweb.dk Ekspert
20. september 2011 - 09:33 #56
ved nærmerer eftertanke de kan jo godt bruge sammen felt, de 2 fejl kan jo ikke forekome samtidig, men en lille optimering, så du kun henter feltet "err_tt" 1 gang

var html ="";        
var alder = BeregnAlder();
    if(alder<18){       
    html += "Man skal være 18 år, for at oprette sig";               
    error = 1;           
}

var bday=document.getElementById("txtBday").value;
if(bday==0){
    html += "De har ikke valgt noget i dato feltet";
    error=1;
}       
document.getElementById("err_tt").innerHTML = html;


ved #55 kommer jeg da også til at slette dato fejl beskeden :( ups, lidt for hurtig, glem indlæg #55
Avatar billede MadsDue Nybegynder
20. september 2011 - 18:26 #57
okay pisse godt.

Men hvis jeg nu ændre min tid på min computer og der med snyde mig vej igennem..

Hvis jeg nu skal undgå det skal jeg vel have sat den op på min server, det her jeg desværre endnu ikke forstået hvordan det gøres? så mine bruger ikke kan snyde på den møde?
Avatar billede olsensweb.dk Ekspert
20. september 2011 - 19:35 #58
>Hvis jeg nu skal undgå det skal jeg vel have sat den op på min server
Ja

>det her jeg desværre endnu ikke forstået hvordan det gøres?
find en udbyder, og køb et domain (domain kan ofte testes og købes direkte hos udbyder).
billige udbydere http://www.eksperten.dk/spm/942955 #8

>så mine bruger ikke kan snyde på den møde?
så længe brugeren sidder fysisk på din server (pc), vil de altid kunne snyde, ved at ændre uret, hvis de tilgå via nettet kan de ikke snyde
Avatar billede MadsDue Nybegynder
23. oktober 2011 - 16:35 #59
okay.

så vil min egen pc'ere fungere som en server eller hvad?
Avatar billede olebole Juniormester
23. oktober 2011 - 18:20 #60
Ja, det kan den godt, men det kan absolut ikke anbefales
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