webForumDet fria alternativet

kontrollera innan submit

4 svar · 396 visningar · startad av Patrik81

Patrik81Medlem sedan okt. 2001537 inlägg
#1

Jag är verkligen inte bra på det här.

JAg lovar, jag har sökt, och sökt, och hittat massor med kod här på wF, men problemet är inte att koden inte funkat, det är att det är skit bakom tangentbordet.

Jag lyckas helt enkelt inte konvertera kodsnuttar från en uppgift till en annan.

Så det jag skulle vilja, är en kod, som onsubmit kollar om de tre fälten som finnes i formuläret, verkligen fyllts i, och att lite andra kontroller stämmer.

Det skall vara en client-side kontroll av lösenord, innan man skickar iväg sitt nya lösenord till servern.

Vilket innebär att man skall ha det gamla lösenordet i första fältet, och det nya i fält två, och en kontroll så att det nya inte är felstavat, i fält 3.

Fält 1 får inte vara samma som fält 2 eller 3
Fält 2 och 3 måste vara likadana, och längre än 8 tecken.
Ingen av de tre får dock vara längre än 40 tecken.
Och inget av fälten får vara tomma.

Efter denna kontroll skall fält 1 och 2 krypteras med sha1 (sha1.js är inkluderad) och skickas till nästa sida.
Och om något inte stämmer så skall inget skickas, formulärsidan skall vara kvar, och en alert ruta skall komma upp och tala om vad som är fel.

Det låter ju som om det skulle vara enkelt nog att göra, framförallt med all finfin kod som redan finns här på wF. Men icke.

Här nedan kommer koden jag arbetar med, men som inte funkar ett skvatt. Den skickar vidare till nästa sida vad jag än fyller i de tre fälten.

<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Byt lösenord</title>
<link rel="stylesheet" href="css/style.css" />
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="js/sha1.js"></script>
<script type="text/javascript">
function check(b, u, e){
if (b.value==""){
alert("Inte ifyllt fält");
return false;
} elseif (u.value==""){
alert("Inte ifyllt fält");
return false;
} elseif (e.value==""){
alert("Inte ifyllt fält");
return false;
}

if (b.value == u.value){
alert("Nya lösenordet samma som gamla, försök igen");
return false;
}

if (u.value.length < 8 || e.value.length < 8){
alert("Lösenordet måste vara minst 8 tecken långt, försök igen");
return false;
}

if (u.value != e.value){
alert("Nya lösenordet matchar inte dubbelkollen, det skall vara samma lösenord, försök igen");
return false;
}

document.changePwdForm.oldPwd.value = hex_sha1(b);
document.changePwdForm.newPwd.value = hex_sha1(u);
document.changePwdForm.ctrlPwd.value = hex_sha1(e);
}
</script>
</head>

<body>

<div class="changePwdForm">
<div class="cpf_l1">
<div class="cpf_l2">
<form action="sida2.php" method="post" name="changePwdForm" onsubmit="check(this.oldPwd.value, this.newPwd.value, this.ctrlPwd.value); return true;">
<p>Nuvarande lösenord</p>
<input type="password" name="oldPwd" class="text" /><br /><br />

<p>Det nya lösenordet</p>
<input type="password" name="newPwd" class="text" /><br /><br />

<p>Det nya lösenordet igen</p>
<input type="password" name="ctrlPwd" class="text" /><br /><br />

<input type="submit" class="submit" value="Byt lösenord" />
</form>
</div>
</div>
</div>

</body>
</html>

Någon som har lust och ork att hjälpa en stackare som inte klarar av js riktigt?

MVH Patrik

JaarMedlem sedan juli 2001434 inlägg
#2

Du skickar in lite konstiga grejjer...

onsubmit="check(this.oldPwd.value, this.newPwd.value, this.ctrlPwd.value); return true;">

Bör vara

onsubmit="return check(this.oldPwd, this.newPwd, this.ctrlPwd)">

Sedan bör du ha en "return true;" i slutet på check funktionen.

Sedan brukar jag inte köra med b.value=="", utan b.value.length < 1, men det är väl kanske en smaksak?

Patrik81Medlem sedan okt. 2001537 inlägg
#3

Jag ändrade koden efter förslagen, men samma scriptfel uppstår, den säger att den förväntar en ) på rad 71, tecken 31.

Och ´på den raden står:

<form action="sida2.php" method="post" name="changePwdForm" onsubmit="return check(this.oldPwd, this.newPwd, this.ctrlPwd)">

Vilket skulle innebära att den inte gillar min metod för att skicka formuläret?! Jag förstår inte varför den bråkar om ett javascript fel i htmlkoden.

Några andra förslag eller funderingar? Eller lösningar?

Tack på förhand.
MVH Patrik

nitro2k01Medlem sedan aug. 20037 630 inlägg
#4

Eventuellt är ordet mcheck på något konstigt sätt reserverat i javascript, pröva att byta namn på funktionen till Check med stort C. (och gör samma ändring i onsubmit.)

En annan sak jag märker är att du skriver elseif. Jag tror det är en bra ide att sära på de orden till else if.(Javascript har inte mycket likt med Visual Basic :) )

Pröva också att använda this.elements["namn"] istället för bara this.namn om ovan nämnda förslag inte fungerar.

 
<form action="sida2.php" method="post" name="changePwdForm" 
onsubmit="return check(this.elements['oldPwd'], this.elements['newPwd'], this.elements['ctrlPwd'])">
Patrik81Medlem sedan okt. 2001537 inlägg
#5

Ändrade funktions-namnet, och även elseif till else if, och nu rullar det på utav bara tusan =) suveränt!

TACK för att du/ni tog er tid.
*krama*

MVH Patrik

Genererad på 371 ms · cache AV · v20260730165559-full.f96bc7eb