Avatar billede MadsDue Nybegynder
22. maj 2011 - 18:02 Der er 14 kommentarer og
1 løsning

Hjælp til PHP

Jeg er igang med at lave en menu hvor man kan oprette sige som bruger.

jeg har skrevet følgende:

<div class="navn">Navn</div><br/>
                                <input type="text" size="20" class="fornavn" name="fornavn" value="Fornavn:" onfocus="if (this.value=='Fornavn:') this.value = ''" onblur="if (this.value=='') this.value = 'Fornavn:'"/>
                                <br/>
                                <input type="text" size="20" class="efternavn" name="efternavn" value="Efternavn:" onfocus="if (this.value=='Efternavn:') this.value = ''" onblur="if (this.value=='') this.value = 'Efternavn:'"/>
                                <br/>
                               
                                <div class="kon1">Køn</div><br/>
                                <input type="radio" class="kon" name="kon" value="Mand" />Mand
                                <input type="radio" class="kon" name="kon" value="Kvinde" />Kvinde
                                <br/>
                               
                                <div class="personnummer">Personnummer</Div><br/>
                                <input type="text" size="9" class="personnummer1" name="personnummer1" /> <input type="password" class="sidst4" size="4" name="sidst4" />
                                <br/>
                               
                                <div class="email">E-MAIL</Div><br/>
                                <input type="text" size="20" class="mail" name="mail" value="E-mail adresse:" onfocus="if (this.value=='E-mail adresse:') this.value = ''" onblur="if (this.value=='') this.value = 'E-mail adresse:'"/>
                                <br/>                           
                           
<input type="Submit" class="videre" value=" Videre " />



Jeg vil gerne have nogen krav på, så fx at man ikke bare kan trykke på "videre" uden at skrive noget i feltet.
hvordan gøre jeg det bedst?
Avatar billede claes57 Ekspert
22. maj 2011 - 18:16 #1
i din <form... noget, der kalder en validering af felter, fx
<form action=side2.php method=get name=frm id=frm onSubmit="return validate();">
og så skal du have et javascript, der hedder validate i <Head>, fx
<SCRIPT language=JavaScript>
  var browserID = "n";
  if (navigator.appName.indexOf("Microsoft")>=0){browserID="i";}
  function validate(){
    if (browserID=="n"){frm = document.getElementById("frm");}
    if (prisIalt == 0) {
        alert('Du har ikke valgt, hvad du vil købe.');
        return false;}
    if (frm.navn.value == ''){
        alert('Husk at udfylde navn.');
        frm.navn.focus();
        return false;}
    if (frm.adresse.value == ''){
        alert('Husk at udfylde adresse.');
        frm.adresse.focus();
        return false;}
    return true;
    }
</script>
Avatar billede MadsDue Nybegynder
22. maj 2011 - 19:53 #2
Jeg har prøvet at sætte det ind som du skriver. men der sker ikke nogen forskel.

Jeg kan godt trykke "videre" uden at skrive noget i felterne
Avatar billede claes57 Ekspert
22. maj 2011 - 20:28 #3
så kom med din samlede kode for siden - jeg ved jo ikke, hvordan du koder, og en af os har lavet mindst en fejl tilsammen.
Avatar billede olsensweb.dk Ekspert
22. maj 2011 - 21:33 #4
en lille rettelse til claes57 code,
navn kalder du fornavn
adresse kalder du mail


<form action=side2.php method=get name=frm id=frm onSubmit="return validate();">
bør vel være
<form action="side2.php" method="get" name="frm" id="frm" onsubmit="return validate()">


en hurtig rettelse
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    function validate(){
        frm = document.getElementById('frm');
        if (frm.fornavn.value == '' || frm.fornavn.value== 'Fornavn:'){
            alert('Husk at udfylde navn.');
            frm.fornavn.focus();
            return false;
        }
        if (frm.mail.value == '' || frm.mail.value == 'E-mail adresse:'){
            alert('Husk at udfylde adresse.');
            frm.mail.focus();
            return false;
        }
        return true;
    }
    </script>
</head>
<body>
<form action="side2.php" method="get" name="frm" id="frm" onsubmit="return validate()">
<div class="navn">Navn</div><br/>
<input type="text" size="20" class="fornavn" name="fornavn" value="Fornavn:" onfocus="if (this.value=='Fornavn:') this.value = ''" onblur="if (this.value=='') this.value = 'Fornavn:'"/>
<br/>
<input type="text" size="20" class="efternavn" name="efternavn" value="Efternavn:" onfocus="if (this.value=='Efternavn:') this.value = ''" onblur="if (this.value=='') this.value = 'Efternavn:'"/>
<br/>             
<div class="kon1">Køn</div><br/>
<input type="radio" class="kon" name="kon" value="Mand" />Mand
<input type="radio" class="kon" name="kon" value="Kvinde" />Kvinde
<br/>                             
<div class="personnummer">Personnummer</Div><br/>
<input type="text" size="9" class="personnummer1" name="personnummer1" /> <input type="password" class="sidst4" size="4" name="sidst4" />
<br/>
<div class="email">E-MAIL</Div><br/>
<input type="text" size="20" class="mail" name="mail" value="E-mail adresse:" onfocus="if (this.value=='E-mail adresse:') this.value = ''" onblur="if (this.value=='') this.value = 'E-mail adresse:'"/>
<br/>                         
<input type="Submit" class="videre" value=" Videre " />
</form>
</body>
</html>
Avatar billede olsensweb.dk Ekspert
22. maj 2011 - 22:13 #5
nu er det denne gruppe vi skriver i

Forside » Spørgsmål og Svar » Opgaver » Programmeringsopgaver » PHP

så det bør vel være en hel PHP løsning der efterspørges.
men alt andet lige første test bør være client side, men nogle brugere kan finde på at slå JS fra, så der SKAL også testes serverside.

@MadsDue: er der en grund til du ikke har lagt spørgsmålet i JS eller PHP, og istedet lagt det som en opgave ??, det viste har intet med PHP at gøre men er ren HTML

http://www.eksperten.dk/spm/Programmering/Script/JavaScript/
http://www.eksperten.dk/spm/Programmering/Script/PHP/
Avatar billede MadsDue Nybegynder
23. maj 2011 - 21:14 #6
Super. tak ronols

Jeg troede jeg oprettede spr. det rigtige sted, sorry.

Lige en ting. hvis jeg gerne vil have det som. beskeden "Husk at udfylde navn." ovenover boksen, i stedet for en alert.

Kan du også lige guide mig til det? eller skal man oprette et nyt spr?
Avatar billede claes57 Ekspert
24. maj 2011 - 08:52 #7
jeg har lagt en fast (tom) linje ind, så formen ikke hopper ned ved en fejltekst.

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    function validate(){
        if (!navigator.appName.indexOf("Microsoft")>=0){frm = document.getElementById("frm");}
        document.getElementById('fejl40').innerHTML = '&#160;';
        if (frm.fornavn.value == '' || frm.fornavn.value == 'Fornavn:'){
            document.getElementById('fejl40').innerHTML = 'Husk at udfylde fornavn.';
            frm.fornavn.focus();
            return false;
        }
        if (frm.efternavn.value == '' || frm.efternavn.value == 'Efternavn:'){
            document.getElementById('fejl40').innerHTML = 'Husk at udfylde efternavn.';
            frm.efternavn.focus();
            return false;
        }
        if (frm.mail.value == '' || frm.mail.value == 'E-mail adresse:'){
            document.getElementById('fejl40').innerHTML = 'Husk at udfylde email.';
            frm.mail.focus();
            return false;
        }
        return true;
    }
    </script>
</head>
<body>
<form action="side2.php" method="get" name="frm" id="frm" onsubmit="return validate()">
<div class="fejltxt" id="fejl40">&#160;</div><br/>
<div class="navn">Navn</div><br/>
<input type="text" size="20" class="fornavn" name="fornavn" value="Fornavn:" onfocus="if (this.value=='Fornavn:') this.value = ''" onblur="if (this.value=='') this.value = 'Fornavn:'"/>
<br/>
<input type="text" size="20" class="efternavn" name="efternavn" value="Efternavn:" onfocus="if (this.value=='Efternavn:') this.value = ''" onblur="if (this.value=='') this.value = 'Efternavn:'"/>
<br/>             
<div class="kon1">Køn</div><br/>
<input type="radio" class="kon" name="kon" value="Mand" />Mand
<input type="radio" class="kon" name="kon" value="Kvinde" />Kvinde
<br/>                             
<div class="personnummer">Personnummer</Div><br/>
<input type="text" size="9" class="personnummer1" name="personnummer1" /> <input type="password" class="sidst4" size="4" name="sidst4" />
<br/>
<div class="email">E-MAIL</Div><br/>
<input type="text" size="20" class="mail" name="mail" value="E-mail adresse:" onfocus="if (this.value=='E-mail adresse:') this.value = ''" onblur="if (this.value=='') this.value = 'E-mail adresse:'"/>
<br/>                         
<input type="Submit" class="videre" value=" Videre " />
</form>
</body>
</html>
Avatar billede olsensweb.dk Ekspert
24. maj 2011 - 16:39 #8
>Lige en ting. hvis jeg gerne vil have det som. beskeden "Husk at udfylde navn." ovenover boksen, i stedet for en alert.
>Kan du også lige guide mig til det? eller skal man oprette et nyt spr?
jeg ville nok have oprettet et nyt spørgsmål i JS så flere havde mulighed for at byde ind, og det er nemmere at søge på, efterfølgende, hvis man bruger E som Knowledgebase, men nu har class57 jo svaret på det

emnet har været debateret her på E før
http://www.google.dk/search?q=eksperten.dk+js+validering+vis+fejl+som+label
http://job.eksperten.dk/spm/872211 #7, har givet mig en ide til en løsning
demo http://olsensweb.dk/test/experten/spm/939402/

du overfører dine variable til side2.php med "get" det bør/skal være post, det er fortrolige data 

jeg ser du vil registrerer fuldt cpr nummer, vær opmærksom på register lovgivningen omkring dette, læs http://www.eksperten.dk/spm/659913 , en del link

du bør smide denne ind i starten af side2.php, så den fange hvis js er slået fra eller fejler
<?php
/*
hvis der anvendes data base bør man vaske $_POST med "mysql_real_escape_string" http://dk.php.net/mysql_real_escape_string
*/
$fornavn     =  $_POST['fornavn'];
$efternavn     =  $_POST['efternavn'];
$mail         =  $_POST['mail'];
$personnummer2     =  $_POST['sidst4'];
$personnummer1     =  $_POST['personnummer1'];
$kon        =  $_POST['kon'];

$error = 0;
if (! isset($kon) ){
    echo "De har ikke udfyldt Deres Køn";
    $error = 1;
}
if($fornavn == '' || $fornavn == 'Fornavn:'){
    echo "De har ikke udfyldt Deres Formavn";
    $error = 1;
}
if($efternavn == '' || $efternavn == 'Efternavn:'){
    echo "De har ikke udfyldt Deres Efternavn";
    $error = 1;
}
if($mail == '' || $mail == 'E-mail adresse:'){
    echo "De har ikke udfyldt Deres E-mail adresse";
    $error = 1;
}
if($personnummer1 == ''){
    echo "De har ikke udfyldt Deres Person nummer";
    $error = 1;
}
if($personnummer2 == ''){
    echo "De har ikke udfyldt de 4 sidste i Deres person nummer";
    $error = 1;
}

if($error){
    exit;
}
?>
Avatar billede MadsDue Nybegynder
24. maj 2011 - 19:47 #9
Tusind tak for begge jeres svar.

ronols, respekt for dig. det virkelig dejligt det du har fundet mange tak.

Det skal lige siges at jeg kun har arbejdet med at bygge hjemmeside, i 3 mdr. så det er derfor jeg ikke altid lige selv har svaret eller lavet den rigtige løsning.
Avatar billede MadsDue Nybegynder
24. maj 2011 - 21:09 #10
okay,
ronols
Den der back up, du siger jeg skal lave på side 2.

Den tillader også at man kommer om på side to. Kan man ikke gøre det så det kun bliver på side 1. som JS?

jeg har prøvet følene:

        if (frm.kon.value != 'value' ){
            document.getElementById('fejl40').innerHTML = 'Husk at udfylde kon.';
            frm.mail.focus();
            return false;
        }

Men det lykkes ikke, er det fordi det er en input="radio" ?
Avatar billede olsensweb.dk Ekspert
24. maj 2011 - 22:56 #11
>Men det lykkes ikke, er det fordi det er en input="radio" ?
radio button er lidt specielle at teste på, man er nød til at løbe hele arrayet igennem for at se hvilken / hvis nogle, der er true
der er en test af Radio-button her: http://quomon.com/question-Radio-button-validation-2405.aspx , læs kommentar "nidhi Date:: Jun 22, 2007 Time:: 03:56"
det er denne function (checkRadio (frmName, rbGroupName) ) jeg selv anvender i min demo i #8,
demo  http://olsensweb.dk/test/experten/spm/939402/
source http://olsensweb.dk/test/experten/spm/939402/madsdue.zip

du kommer til side2.php pga der er fejl/ulovlig handling i dit js, hvilke bevirker det bliver disablet :(, hvilke er årsaget til jeg skrev "så den fange hvis js er slået fra eller fejler"
if (frm.kon.value != 'value' ){ kan ikke udføres, og ødelægger dit script
Avatar billede claes57 Ekspert
25. maj 2011 - 10:39 #12
hvis du forudfylder Kon med Mand, så er den altid udfyldt, og er den ikke Mand, så er den Kvinde. Du behøver derfor kun at teste på, om den er Mand, og du ved svaret.
Avatar billede MadsDue Nybegynder
25. maj 2011 - 19:44 #13
okay..

Så ledes=???

if (frm.kon.value != 'Mand' ){
document.getElementById('fejl40').innerHTML = 'Husk at udfylde kon.';
frm.mail.focus();
return false;
        }

Så kommer teksten godt nok frem, når jeg ikke udfylder nogle af felterne.

Men når jeg så gør, så lader den mig ikke komme videre. ??
Avatar billede claes57 Ekspert
25. maj 2011 - 20:01 #14
jeg skrev, at du skulle lade Mand være default udfyldt
Så kan du aldrig få fejl på manglende udfyldelse (du skal ikke teste på feltet) - du skal bare i php aflæse værdien, og skrive den i databasen.
I html-koden
<input type="radio" class="kon" name="kon" value="Mand" checked  />Mand
<input type="radio" class="kon" name="kon" value="Kvinde" />Kvinde

det nye er checked, og så drop test på køn
Avatar billede MadsDue Nybegynder
25. maj 2011 - 20:24 #15
okay , super 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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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