<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Subscription</title>
<!--
the JS class configured with the member $tocopy = 1, read the subscription.ini file
to generate the javascript script below corresponding to the form. The script has
been copied and pasted into the page.
// -->
<script language="javascript" type="text/javascript">
// (c) Pierre FAUQUE : js script (feb 2006), php class (jul 2020)
// The fonctions is...() return TRUE or FALSE
// The functions isValid...() return "OK" or an "Error message"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Return TRUE if the given character (c) is in the authorized list (list) and FALSE if not
function isCharInList(c,list) {
var c,list;
if (list.indexOf(c.toLowerCase()) < 0) { return false; } else { return true; }
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Return TRUE if all characters of the (str)ing are in the authorized (list), FALSE if not
function isStringInList(str,list) {
var str,list,n;
for (n=0; n<str.length; n++) {
if (!isCharInList(str.substring(n,n+1),list)) { return false; }
}
return true;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Return TRUE if the given characters correspond to a valid TLD, FALSE if not
function isTLD(tld) {
var tld,domains;
domains = "com|net|int|org|edu|mil|gov|af|al|dz|as|ad|ao|ai|aq|ag|ar|am|aw|ac|au|at|"
+ "az|bh|bd|bb|by|be|bz|bj|bm|bt|bo|ba|bw|bv|br|io|bn|bg|bf|bi|gg|je|kh|cm|ca|"
+ "cv|ky|td|cl|cn|cx|cc|co|km|cg|ck|cr|ci|hr|cf|cu|cy|cz|dk|dj|dm|do|tp|ec|eg|"
+ "sv|gq|er|ee|et|fk|fo|fj|fi|gf|pf|tf|fr|fx|ga|gm|ge|de|gh|gi|gr|gl|gd|gp|gu|"
+ "gt|gn|gw|gy|ht|hm|hn|hk|hu|is|in|id|ir|iq|ie|im|il|it|jm|jp|jo|kz|ke|ki|kp|"
+ "kr|kw|kg|la|lv|lb|ls|lr|ly|li|lt|lu|mo|mk|mg|mw|my|mv|ml|mt|mh|mq|mr|mu|yt|"
+ "mx|fm|md|mc|mn|ms|ma|mz|mm|mp|na|nr|np|an|nl|nc|nz|ni|ne|ng|nu|nf|no|om|pk|"
+ "pw|pa|pg|py|pe|ph|pn|pl|pt|pr|qa|re|ro|ru|rw|gs|lc|ws|sm|st|sa|sn|sc|sl|sg|"
+ "sk|si|sb|so|za|es|lk|sh|kn|pm|vc|sd|sr|sj|sz|se|ch|sy|tw|tj|tz|th|bs|tg|tk|"
+ "to|tt|tn|tr|tm|tc|tv|um|ug|ua|uk|us|uy|ae|uz|vu|va|ve|vn|vg|vi|wf|eh|ye|yu|"
+ "zr|zm|zw|eu|"
+ "biz|info|aero";
if (domains.indexOf(tld.toLowerCase()) < 0) { return false; } else { return true; }
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Return TRUE if the format of the email address is correct, FALSE if not
// Login not null, must contain "@", a dot in the domain (not null) and a valid TLD
function isEmail(address) {
var address,parts,domains;
if (address.indexOf("@") <= 0) { return false; }
parts = address.split("@");
if (parts[0].length == 0) { return false; }
if (parts[1].indexOf(".") <= 0) { return false; }
domains = parts[1].split(".");
if (!isTLD(domains[domains.length-1])) { return false; }
return true;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Return TRUE if the date format is correct (fr: DD/MM/YYYY), FALSE if not
function isDate(date) {
var date, reg = new RegExp("^[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}$","g");
if(reg.test(date)) { return true; } else { return false; }
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Return TRUE if the hour format is correct (HH:MN), FALSE if not
function isHour(hour) {
var tab, reg = new RegExp("^[0-9]{2}[:]{1}[0-9]{2}$","g");
if(reg.test(hour)) { return true; } else { return false; }
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Return "OK" if the date has a good format (fr: DD/MM/YYYY)or an "Error message"
function isValidDate(date) {
var date,tab;
if(isDate(date)) {
tab=date.split('/');
if((tab[0]*1)<1 || (tab[0]*1)>31) { return "Incorrect day !"; }
if((tab[1]*1)<1 || (tab[1]*1)>12) { return "Incorrect month !"; }
if((tab[2]*1)<1) { return "Incorrect year !"; }
return "OK";
}
return "Incorrect date format !";
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Return "OK" if the hour has a good format (HH:MN) or an "Error message"
function isValidHour(hour) {
var hour, tab;
if(isHour(hour)) {
tab=hour.split(':');
if((tab[0]*1)<0 || (tab[0]*1)>24) { return "Incorrect hours !"; }
if((tab[1]*1)<0 || (tab[1]*1)>60) { return "Incorrect minutes !"; }
if((tab[0]*1)==24 && (tab[1]*1)!=0) { return "Max is 24h !"; }
return "OK";
}
return "Incorrect hour format !";
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Tests the validity of a text (length and authorized characters). "OK" or "Error message"
function isValidText(field,chars,li,ls) {
var field,chars,li,ls,lg,msg;
lg = field.length;
if(li || ls) {
if(lg < li) { msg = "Too short input:\nMin : "+li; return msg; }
if(lg > ls) { msg = "Too long input:\nMax : "+ls; return msg; }
}
if(!isStringInList(field,chars)) { msg = "Forbidden characters !"; return msg; }
return "OK";
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Definition of basic characters
var ascii = "abcdefghijklmnopqrstuvwxyz";
var letters = "abcdefghijklmnopqrstuvwxyzàâäéèêëîïùûüÿçñ";
var digits = "0123456789";
// Authorized Characters
var ac_lname = letters + " '-";
var ac_fname = letters + " '-";
var ac_email = ascii + digits + "@-_+.";
var ac_phone = digits + ".- +";
var ac_cont = digits + ",.";
var ac_obs = letters + digits + "&\"' ()[]{}-_\\@+-*/?!,.;/:§\n\$£µ%=²";
function verif() {
// Fields value (14 fields)
var lname = document.subscription.lname.value;
var fname = document.subscription.fname.value;
var bday = document.subscription.bday.value;
var email = document.subscription.email.value;
var phone = document.subscription.phone.value;
var cont = document.subscription.cont.value;
var idrol = document.subscription.idrol.options[document.subscription.idrol.options.selectedIndex].value;
var begdate = document.subscription.begdate.value;
var prefh = document.subscription.prefh.value;
var obs = document.subscription.obs.value;
// ----- Last name, text. Required
if(!lname) {
alert("Last name : missing");
document.subscription.lname.focus();
return false;
}
msg = isValidText(lname,ac_lname,2,25);
if(msg != "OK") {
alert("Last name : "+msg);
document.subscription.lname.focus();
return false;
}
// ----- First name, text. Required
if(!fname) {
alert("First name : missing");
document.subscription.fname.focus();
return false;
}
msg = isValidText(fname,ac_fname,2,30);
if(msg != "OK") {
alert("First name : "+msg);
document.subscription.fname.focus();
return false;
}
// ----- Sex, radio. Required
check=0;
for(i=0; i<document.subscription.sex.length; i++) {
if(document.subscription.sex[i].checked) {
sex = document.subscription.sex[i].value;
check = 1;
}
}
if(check === 0) {
alert("Sex : Not checked");
return false;
}
// ----- Birthday, text/date. Required
if(!bday) {
alert("Birthday : missing");
document.subscription.bday.focus();
return false;
}
msg = isValidDate(bday);
if(msg != "OK") {
alert("Birthday : "+msg);
document.subscription.bday.focus();
return false;
}
// ----- eMail Address, text/mail. Optional
if(email) {
msg = isValidText(email,ac_email,6,50);
if(msg != "OK") {
alert("eMail Address : "+msg);
document.subscription.email.focus();
return false;
}
if(!isEmail(email)) {
msg = "Incorrect email address format !";
alert("eMail Address : "+msg);
document.subscription.email.focus();
return false;
}
}
// ----- Phone number, text. Optional
if(phone) {
msg = isValidText(phone,ac_phone,10,20);
if(msg != "OK") {
alert("Phone number : "+msg);
document.subscription.phone.focus();
return false;
}
}
// ----- Level of studies, radio. Required
check=0;
for(i=0; i<document.subscription.studies.length; i++) {
if(document.subscription.studies[i].checked) {
studies = document.subscription.studies[i].value;
check = 1;
}
}
if(check === 0) {
alert("Level of studies : Not checked");
return false;
}
// ----- Sports, checkbox. Required
nb = 0;
if(document.subscription.athl.checked) { nb++; }
if(document.subscription.volley.checked) { nb++; }
if(document.subscription.foot.checked) { nb++; }
if(document.subscription.swim.checked) { nb++; }
if(document.subscription.none.checked) { nb++; }
if(!nb) {
alert("Sports : At least one choice !");
return false;
}
// ----- Contribution, text/num. Required
if(!cont) {
alert("Contribution : missing");
document.subscription.cont.focus();
return false;
}
msg = isValidText(cont,ac_cont,1,6);
if(msg != "OK") {
alert("Contribution : "+msg);
document.subscription.cont.focus();
return false;
}
if(500 > 100) {
if(cont*1 <= 100 || cont*1 >= 500) {
alert("Contribution : Out of limits");
document.subscription.cont.focus();
return false;
}
}
// ----- Role, list. Required
if(idrol == "null") {
alert("Role : missing");
document.subscription.idrol.focus();
return false;
}
// ----- Beginning date, text/date. Required
if(!begdate) {
alert("Beginning date : missing");
document.subscription.begdate.focus();
return false;
}
msg = isValidDate(begdate);
if(msg != "OK") {
alert("Beginning date : "+msg);
document.subscription.begdate.focus();
return false;
}
// ----- Prefered hour, text/hour. Optional
if(prefh) {
msg = isValidHour(prefh);
if(msg != "OK") {
alert("Prefered hour : "+msg);
document.subscription.prefh.focus();
return false;
}
}
// ----- Observations, text. Required
if(!obs) {
alert("Observations : missing");
document.subscription.obs.focus();
return false;
}
msg = isValidText(obs,ac_obs,1,2000);
if(msg != "OK") {
alert("Observations : "+msg);
document.subscription.obs.focus();
return false;
}
// ----- Validation, checkbox/valid . Required
nb = 0;
if(document.subscription.ok.checked) { nb++; }
if(!nb) {
alert("Validation : You must validate to continue !");
return false;
}
return true;
}
</script>
<style type="text/css">
h1 { font-family:times; font-size:20pt; font-style:italic; color:#000080; }
.c1 { padding-left:6px; padding-right:6px; vertical-align:top; border:1px solid grey; text-align:center; background-color:#000080; color:#FFFFFF; }
.c2 { padding-left:6px; padding-right:6px; vertical-align:top; border:1px solid grey; border-left:0px; text-align:center; background-color:#000080; color:#FFFFFF; }
.c3 { padding-left:6px; padding-right:6px; padding-top:2px; padding-bottom:2px; vertical-align:top; border:1px solid grey; border-top: 0px; text-align:right; }
.c4 { padding-left:6px; padding-right:6px; padding-top:2px; padding-bottom:2px; vertical-align:top; border:1px solid grey; border-left:0px; border-top: 0px; }
.c5 { padding-left:6px; padding-right:6px; border:1px solid grey; text-align:center; background-color:#909090; color:#000000; font-style:italic; }
.c6 { padding-left:6px; padding-right:6px; border:1px solid grey; border-left:0px; text-align:center; background-color:#D0D0D0; color:#000090; font-style:italic; }
</style>
</head>
<body>
<h1>Sports club registration</h1>
<p>Generated script copied and pasted into the page</p>
<form method="post" name="subscription" action="javascript:alert('All is OK. Form sent !')" onsubmit="return verif()">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="c1">Label</td>
<td class="c2">Value</td>
<td class="c5">html</td>
<td class="c5">JS class</td>
</tr><tr>
<td class="c3">Last name</td>
<td class="c4"><input type="text" name="lname" size="25"></td>
<td class="c6">text</td>
<td class="c6">text</td>
</tr><tr>
<td class="c3">First name</td>
<td class="c4"><input type="text" name="fname" size="25"></td>
<td class="c6">text</td>
<td class="c6">text</td>
</tr><tr>
<td class="c3">Sex</td>
<td class="c4"><input type="radio" name="sex" value="M">Male<br/><input type="radio" name="sex" value="M">Female</td>
<td class="c6">radio</td>
<td class="c6">radio</td>
</tr><tr>
<td class="c3">Birthday</td>
<td class="c4"><input type="text" name="bday" size="10"> (DD/MM/YYYY)</td>
<td class="c6">text</td>
<td class="c6">date</td>
</tr><tr>
<td class="c3">eMail Address</td>
<td class="c4"><input type="text" name="email" size="55"></td>
<td class="c6">text</td>
<td class="c6">mail</td>
</tr><tr>
<td class="c3">Phone number</td>
<td class="c4"><input type="text" name="phone" size="12"></td>
<td class="c6">text</td>
<td class="c6">text</td>
</tr><tr>
<td class="c3">Level of studies</td>
<td class="c4">
<input type="radio" name="studies" value="0">Primary school<br/>
<input type="radio" name="studies" value="0">High scool<br/>
<input type="radio" name="studies" value="0">University
</td>
<td class="c6">radio</td>
<td class="c6">radio</td>
</tr><tr>
<td class="c3">Sports</td>
<td class="c4">
<input type="checkbox" name="athl" value="at">Athletism<br/>
<input type="checkbox" name="volley" value="vo">Volley ball<br/>
<input type="checkbox" name="foot" value="fo">Football<br/>
<input type="checkbox" name="swim" value="s">Swimming<br/>
<input type="checkbox" name="none" value="no">None<br/>
</td>
<td class="c6">checkbox</td>
<td class="c6">checkbox</td>
</tr><tr>
<td class="c3">Contribution</td>
<td class="c4"><input type="text" name="cont" size="10"> ($100 < contrib. < $500)</td>
<td class="c6">text</td>
<td class="c6">num</td>
</tr><tr>
<td class="c3">Role</td>
<td class="c4">
<select name="idrol">
<option value="null">--- Choose a role</option>
<option value="pl">Player</option>
<option value="ar">Arbitrator</option>
<option value="ma">Manager</option>
<option value="co">Coach</option>
</select>
</td>
<td class="c6">select</td>
<td class="c6">list</td>
</tr><tr>
<td class="c3">Beginning date</td>
<td class="c4"><input type="text" name="begdate" size="10"> (DD/MM/YYYY)</td>
<td class="c6">text</td>
<td class="c6">date</td>
</tr><tr>
<td class="c3">Prefered hour</td>
<td class="c4"><input type="text" name="prefh" size="5"> (HH:MN)</td>
<td class="c6">text</td>
<td class="c6">hour</td>
</tr><tr>
<td class="c3">Observations</td>
<td class="c4"><textarea rows="5" cols="50" name="obs"></textarea></td>
<td class="c6">textarea</td>
<td class="c6">text</td>
</tr><tr>
<td class="c3">Validation</td>
<td class="c4"><input type="checkbox" name="ok" value="ok"> I have read the rules, I accept the conditions</td>
<td class="c6">checkbox</td>
<td class="c6">valid</td>
</tr>
</table>
<input type="submit" name="submit" value="Submit">
</form>
<pre>
#
# file: subscription.ini
#
[form]
name=subscription
[general]
; Country date (TLD, Top Level Domain)
ctrydate=fr
; hour: 4 = 4 digits (HH:MN) ; 6 = 6 digits (HH:MN:SS)
hour=4
[fields]
; fieldname,labelname,fieldtype,obligatory(1) or not(0),lgmin,lgmax
lname,Last name,text,1,2,25
fname,First name,text,1,2,30
sex,Sex,radio,1
bday,Birthday,date,1
email,eMail Address,mail,0,6,50
phone,Phone number,text,0,10,20
studies,Level of studies,radio,1
athl;volley;foot;swim;none,Sports,checkbox,1
cont,Contribution,num,1,1,6,1,500
idrol,Role,list,1
begdate,Beginning date,date,1
prefh,Prefered hour,hour,0
obs,Observations,text,1,1,2000
ok,Validation,valid,1
[chars]
; not for checked or selected controls (radio, checkbox, select)
; only for fields filled with characters except dates and hours)
lname=letters + " '-"
fname=letters + " '-"
email=ascii + digits + "@-_+."
phone=digits + ".- +"
cont=digits + ",."
obs=letters + digits + "&\"' ()[]{}-_\\@+-*/?!,.;/:§\n\$£µ%=²"
</pre>
<p> </p>
<p> </p>
</body>
</html>
|