Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

submit gaat nog steeds door ondanks false

Pagina: 1
Acties:

  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Topicstarter
Ik ben een simpel mailformulier aan het maken maar om één of andere reden gaat de submit verder
ondanks dat er een ongeldige waarde wordt doorgegeven.
Ik heb nog niet zo vaak met formulieren gewerkt dus misschien zie ik iets evidents over het hoofd.

Dit is wat ik momenteel heb:
code:
1
2
3
4
5
6
7
8
<form method="post" action="scripts/mail.php">
  Email: &nbsp;&nbsp;&nbsp;<input name="email" type="text"/><br/>
  Subject: <input name="subject" type="text"/><br/><br/>
  Message:<br/>
  <textarea name="message" rows="15" cols="40"></textarea><br/><br/>
  <input type="submit" onclick="validate(email.value,subject.value,message.value);document.returnValue" value="submit"/>
  <input type="reset" value="clear"/>
</form>


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function validate(email,subject,message) {
    var errors='';
    var illegalChars= /[\(\)\<\>\,\;\:\\\/\"\[\]]/
    atPosition = email.indexOf("@")
    dotPosition = email.lastIndexOf(".")

    if(email.length == 0){
        errors+='-please fill in an e-mail adress\n';
    }
    else if(email.match(illegalChars)) {
        errors += 'The e-mail address contains (an) illegal character(s).\n';
    }
    else if(atPosition == -1 || dotPosition == -1 || atPosition == 0 || email.length-dotPosition == 1 || dotPosition - atPosition == 1 || dotPosition < atPosition){
        errors+= '-invalid e-mail adress\n';
    }
    
    if(subject.length == 0){
        errors+='-please fill in a subject\n';
    }
    
    if(message.length == 0){
        errors+='-please fill in a message\n';
    }
    
    if(errors!='')
        alert('Errors:\n'+errors);
        
    document.returnValue = (errors == '')
}


code:
1
2
3
4
5
6
7
8
<?php
  $email = $_REQUEST['email'] ;
  $subject = $_REQUEST['subject'];
  $message = $_REQUEST['message'] ;

  mail("verhoeven.simon@gmail.com", $subject,
    $message, "From: $email");
?>


Ik heb al een paar variaties geprobeert in de form en js.
In het form heb ik geprobeert om ;returnValue te doen en in de JS dan return returnValue ...

En ik weet dat het nog niet veilig is indien javascript uitgeschakeld is, ik moet nog wat opzoekwerk doen in PHP (nog nooit mee gewerkt) om te zien hoe ik dan :
-controleer of javascript uitgeschakeld is
-zoja de testen in php uitvoer en redirect naar een pagina met de foutboodschap. (laatste zal wel met een echo of zo zijn als ik mijn gegoogle goed herinner)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
HTML:
1
<form onsubmit="return myvalidate(...);">

Scheelt onclick handlers en is IMHO de netste manier. Waarbij MyValidate gewoon true of false hoort te returnen.
Simon Verhoeven schreef op zaterdag 18 oktober 2008 @ 15:37:
En ik weet dat het nog niet veilig is indien javascript uitgeschakeld is, ik moet nog wat opzoekwerk doen in PHP (nog nooit mee gewerkt) om te zien hoe ik dan :
-controleer of javascript uitgeschakeld is
Dat moet je niet testen; je moet gewoon altijd server-side validatie uitvoeren. JS validatie is leuk als toevoeging, maar je hoort server-side de eigenlijke validatie uit te voeren. Punt.

code:
1
2
3
4
5
6
7
8
9
  email = REQ['email'] ;
  subject = REQ['subject'];
  message = REQ['message'] ;

  if len(email)>0 and len(subject)>0 and len(message)>0
    sendmail("verhoeven.simon@gmail.com", email, subject, message);
  else
    ouput "Niet alle velden zijn ingevoerd!!!"
  end if

(En bij voorkeur controleer je ook nog even of 'email' een geldig emailadres is).

[ Voor 93% gewijzigd door RobIII op 18-10-2008 15:48 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Tanuki
  • Registratie: Januari 2005
  • Niet online
En voor zover ik weet is het de bedoeling dat je dit doet:
JavaScript:
1
return (errors == '');

ipv
JavaScript:
1
document.returnValue = (errors == '')

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


Verwijderd

Waarom doe je
JavaScript:
1
document.returnValue = (errors == '')

en niet
JavaScript:
1
return errors == '';

Verder:

Zelfs al bevat document.returnValue de waarde false, de statement
JavaScript:
1
document.returnValue;

zet alleen maar de waarde van document.returnValue 'op de stack', waar je in Javascript verder niet zoveel kunt. Je zou daar
JavaScript:
1
return document.returnValue;

moeten gebruiken. Maar als je dan toch bezig bent, doe dan gewoon mijn eerste suggestie, dus return errors == ''; in de functie, haal de onclick van de submit button weg, en voeg dit als attribuut aan het form element toe:
HTML:
1
<form method="post" action="scripts/mail.php" onsubmit="return validate(this.form.elements['email'].value, this.form.elements['subject'].value, this.form.elements['message'].value);">

Zo werkt het ook nog als het formulier op een andere manier gesubmit wordt, zoals bij een druk op de Enter-toets.

Nog beter: schrijf je functie een beetje om, en gebruik;
HTML:
1
<form method="post" action="scripts/mail.php" onsubmit="return validate(this);">

[ Voor 10% gewijzigd door Verwijderd op 18-10-2008 15:46 . Reden: spuit 11 ]


  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Topicstarter
Die document.returnValue = (errors == '') i.p.v. die return errors == '' was een probeerseltje omdat hij precies niet luisterde naar return errors == ''.
Ik had eraan moeten denken dat dat scriptje bij de onsubmit van het form i.p.v. de onclick van de knop hoorde. Erg stomme fout van mezelf.

'@Cheetah bedankt.

@RobIII bedankt voor je advies, ga me precies eens wat moeten bijlezen.

Gewoon eventjes wat brainstormen want de validatie op zich is niets aan ook al ken je niets van php.
Het probleem en de reden dat ik eerst de JS heb gedaan en nu pas aan de php ga beginnen is omdat ik gewoon nog niets ervan ken.

Simpelste maar waarschijnlijk slechtste manier zal zijn om er 8 versies van te maken & 3 boolean waardes om te zien waar het fout gaat en dan via header doorsturen naar de juiste versie.

Een andere mogelijkheid die waarschijnlijk veel beter is is met echo.
(denk aan iets in de trend van die gebruikelijke registratieforms die je ziet. Als je een veld vergeet verschijnt er zo een rode tekst naast). Zal er eens eentje gaan zoeken om eens wat naar de sourcecode te loeren.
Alvast bedankt.

[ Voor 15% gewijzigd door Simon Verhoeven op 18-10-2008 16:12 ]


Verwijderd

de heren hierboven hebben al een zeer mooie oplossing gegeven

Ik wil echter nog even iets opmerken.

je gebruikt een onclick in je submit-button. Als je dit zou doen in een gewone button (type="button" ipv type="submit"), en dan in je functie er voor zorgt dat je formulier gesubmit wordt, dan zou dat ook moeten werken.

Maar ik vind de oplossing die hierboven gepost werd toch ook wel iets netter.

  • tec
  • Registratie: Juni 2001
  • Laatst online: 17-12-2024

tec

TEC

Verwijderd schreef op maandag 20 oktober 2008 @ 12:07:
de heren hierboven hebben al een zeer mooie oplossing gegeven

Ik wil echter nog even iets opmerken.

je gebruikt een onclick in je submit-button. Als je dit zou doen in een gewone button (type="button" ipv type="submit"), en dan in je functie er voor zorgt dat je formulier gesubmit wordt, dan zou dat ook moeten werken.

Maar ik vind de oplossing die hierboven gepost werd toch ook wel iets netter.
Maarrr dan zou je het formulier niet kunnen submitten zonder javascript. :)

Verwijderd

tec schreef op maandag 20 oktober 2008 @ 12:50:
[...]

Maarrr dan zou je het formulier niet kunnen submitten zonder javascript. :)
dat is waar

de andere oplossing is dus veel beter, zoals ik reeds gezegd had

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14-11 23:57

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op zaterdag 18 oktober 2008 @ 15:44:
Zelfs al bevat document.returnValue de waarde false, de statement
JavaScript:
1
document.returnValue;

zet alleen maar de waarde van document.returnValue 'op de stack', waar je in Javascript verder niet zoveel kunt.
Onzin, er wordt natuurlijk helemaal niets op de stack gezet. Dingen die typisch op de stack staan zijn lokale variabelen en functie-argumenten. Het resultaat van een expressie als statement op zich zit daar niet tussen. Het zou wat zijn als er bij iedere expression-statement (dus óók functioncalls en assignments) een waarde op de stack wordt gezet :D

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Topicstarter
In het weekend heb ik al genoeg opgezocht om het naar php ( \[php+xhtml]rare margin + textkleur naar default ). Op zich was dat javascriptje eerder om het eens uit te proberen en me wat bezig te houden.
Pagina: 1