Hvordan får jeg 2 emailfelter i en form til at sammenligne og validere hinanden og så poppe op og sige at felterne ikke ligner hinanden ?
Da det er den eneste kontaktmåde jeg har overfor dem der udfylder formen, vil jeg gerne være sikker på at de har udfyldt deres rigtige emailadresse...
jeg bruger et lille javacript der popper op ved submit, for hvert feldt der ikke er udfyldt. Og det gør den også ved første emailfelt, hvis det ikke er en korrekt valideret email-adresse...
men jeg kan ikke få den til at gøre det med emailfelt nr.2 og samtidig checke om det er den samme som i emailfelt nr.1
min javascript.js ser således ud:
function checkFormContent(form)
{
if (checkEmail(form) &&
checkField(form.fornavn, 'dit navn') &&
checkField(form.efternavn, 'dit efternavn') &&
checkField(form.tlf, 'dit telefonnummer') &&
checkField(form.adresse, 'din adresse') &&
checkField(form.postnr, 'dit postnr') &&
checkField(form.bynavn, 'dit bynavn') &&
checkField(form.uddannelse, 'din uddannelse') &&
checkField(form.historie, 'din historie') &&
checkField(form.email2, 'din rigtige mailadresse') &&
checkField(form.challengeAnswer, 'sikkerhedsfeltet mod spam')) {
return true;
}
return false;
}
function checkField(field, description)
{
if (field.value.length < 1) {
alert('Du mangler at udfylde ' + description + '.');
field.focus();
return false;
}
return true;
}
function checkEmail(form)
{
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (!filter.test(form.email.value)) {
alert('Indtast venligst gyldig e-mail adresse.');
form.email.focus();
return false;
}
return true;
}
noget af min index.php ser sådan her ud:
$email = (isset($_REQUEST['email'])?trim($_REQUEST['email']):'din@email.dk');
$email2 = (isset($_REQUEST['email2'])?trim($_REQUEST['email2']):'');
$fornavn = (isset($_REQUEST['fornavn'])?trim($_REQUEST['fornavn']):'robert);
$efternavn = (isset($_REQUEST['efternavn'])?trim($_REQUEST['efternavn']):'hansen');
<p>Email:
<input name="email2" type="text" id="email2" value="<?php echo $email ?>" size="50" />
</p>
<p>email igen:
<input name="email" type="text" id="email" size="50"/>
</p>
<p>dobbelt emailcheck</p>
og noget af min php-motor ser sådan her ud:
function signUp($email, $email2)
{
$fornavn = isset($_POST['fornavn'])?$_POST['fornavn']:'';
$fornavn = htmlentities(stripslashes($fornavn), ENT_QUOTES);
$fornavn = preg_replace("/\r|\n/", "", $fornavn);
$efternavn = isset($_POST['efternavn'])?$_POST['efternavn']:'';
$efternavn = htmlentities(stripslashes($efternavn), ENT_QUOTES);
$efternavn = preg_replace("/\r|\n/", "", $efternavn);
$email = isset($_POST['email'])?$_POST['email']:'';
$email = addslashes(trim($email));
$email = preg_replace("/\r|\n/", "", $email);
$errors_udfyldt = array();
if (!preg_match("/[A-z]/", $fornavn)) {
$errors_udfyldt[] = 'Dit fornavn.';}
if (!preg_match("/[A-z]/", $efternavn)) {
$errors_udfyldt[] = 'Dit efternavn.';}
if (!checkEmail($email)) {
$errors_udfyldt[] = 'En gyldig e-mail addresse.';}
til det første emailfelt har jeg følgende valideringskode:
function checkEmail($email)
{
if ((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/',$email)) ||
(preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)))
{
$host = explode('@', $email);
if (function_exists('checkdnsrr')) {
if (checkdnsrr($host[1], 'MX') ||
checkdnsrr($host[1], 'A') ||
checkdnsrr($host[1], 'CNAME')) {
return true;
}
}
else {
return true; // Do not block prior to PHP 5.3.0 on Windows
}
}
return false;
}
jeg prøvede at følge en vejledning om javascript fra lynda.com, men det overgik desværre min fatteevne og fik det aldrig til at virke på den måde hun beskrev
Indlæg senest redigeret d. 19.01.2011 21:27 af Bruger #15267