verification formulaire asynchrone

Mammouth du PHP | 702 Messages

07 juin 2012, 11:09

Bonjour à tous, je souhaiterais verifier un numero siret ou siren de manière asynchrone pour un formulaire,

je n'y connais pas grand chose en ajax.

j'ai donc fais cela:
[javascript]
<div id="siret"></div>
<script language="javascript">
var bPseudo = false; // servira pour empêcher de poster le formulaire si vérification pseudo non ok
function verifsiret(pseudo) {

//XMLHttpRequest est supporté par Internet Explorer 5.0+, Safari 1.2, Mozilla 1.0 / Firefox, Netscape 7
if(document.all) var XhrObj = new ActiveXObject("Microsoft.XMLHTTP"); //Internet Explorer
else var XhrObj = new XMLHttpRequest(); //Mozilla

content = document.getElementById("siret"); //zone d'affichage

XhrObj.open("POST", "verifsiret.php");

//Ok pour la page cible
XhrObj.onreadystatechange = function()
{
if (XhrObj.readyState == 4 && XhrObj.status == 200) {
if (XhrObj.responseText == 'OK') {
// ok nouveau pseudo
content.innerHTML='<img src="images/accepter.png" alt=""/> Ok';
} else {
// erreur pseudo déjà existant
content.innerHTML='<img src="images/refuser.png" alt=""/> Déjà pris';
}
}
}

XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
XhrObj.send('p='+siret);

}
</script>[/javascript]

et mis cet input:
<p><label for='siret'>Siret</label><input type='text' name='client["+counter+"][siret]' onBlur='verifsiret(this.value)'></p>
et dans la page de verification j'ai mis les fonctions:

[javascript]function EstSirenValide(siren) {
var estValide;
if ( (siren.length != 9) || (isNaN(siren)) )
estValide = false;
else {
// Donc le SIREN est un numérique à 9 chiffres
var somme = 0;
var tmp;
for (var cpt = 0; cpt<siren.length; cpt++) {
if ((cpt % 2) == 1) { // Les positions paires : 2ème, 4ème, 6ème et 8ème chiffre
tmp = siren.charAt(cpt) * 2; // On le multiplie par 2
if (tmp > 9)
tmp -= 9; // Si le résultat est supérieur à 9, on lui soustrait 9
}
else
tmp = siren.charAt(cpt);
somme += parseInt(tmp);
}
if ((somme % 10) == 0)
estValide = true; // Si la somme est un multiple de 10 alors le SIREN est valide
else
estValide = false;
}
return estValide;
}

/**
* @name EstSiretValide
*
* @param Le code SIRET dont on veut vérifier la validité.
*
* @return Un booléen qui vaut 'true' si le code SIRET passé en
* paramètre est valide, false sinon.
*/
function EstSiretValide(siret) {
var estValide;
if ( (siret.length != 14) || (isNaN(siret)) )
estValide = false;
else {
// Donc le SIRET est un numérique à 14 chiffres
// Les 9 premiers chiffres sont ceux du SIREN (ou RCS), les 4 suivants
// correspondent au numéro d'établissement
// et enfin le dernier chiffre est une clef de LUHN.
var somme = 0;
var tmp;
for (var cpt = 0; cpt<siret.length; cpt++) {
if ((cpt % 2) == 0) { // Les positions impaires : 1er, 3è, 5è, etc...
tmp = siret.charAt(cpt) * 2; // On le multiplie par 2
if (tmp > 9)
tmp -= 9; // Si le résultat est supérieur à 9, on lui soustrait 9
}
else
tmp = siret.charAt(cpt);
somme += parseInt(tmp);
}
if ((somme % 10) == 0)
estValide = true; // Si la somme est un multiple de 10 alors le SIRET est valide
else
estValide = false;
}
return estValide;
}

var counter = 0;[/javascript]

mais en dépit de toutes ces précaution, cela ne fonctionne pas, je n'ai pourtant aucun message d'erreur, je suis en local sur wamp

Par avance merci pour votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 juin 2012, 13:41

Salut,

Y a quoi dans verifsiret.php ?

Ou comment utilise tu ta fonction ? (parce que la pas c'est mis ;) )

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 702 Messages

08 juin 2012, 14:01

finalement je suis passé par que du javscript ca me fais l'alert mais au moins c'est opérationnel:

voici mon code qui pourrait reservir à d'autres, j'ai eu un peu de mal .

[javascript] <script>
function EstSirenValide(siren) {
var estValide;
if ( (siren.length != 9) || (isNaN(siren)) )
estValide = false;
else {
// Donc le SIREN est un numérique à 9 chiffres
var somme = 0;
var tmp;
for (var cpt = 0; cpt<siren.length; cpt++) {
if ((cpt % 2) == 1) { // Les positions paires : 2ème, 4ème, 6ème et 8ème chiffre
tmp = siren.charAt(cpt) * 2; // On le multiplie par 2
if (tmp > 9)
tmp -= 9; // Si le résultat est supérieur à 9, on lui soustrait 9
}
else
tmp = siren.charAt(cpt);
somme += parseInt(tmp);
}
if ((somme % 10) == 0)
estValide = true; // Si la somme est un multiple de 10 alors le SIREN est valide
else
estValide = false;
}
return estValide;
}

/**
* @name EstSiretValide
*
* @param Le code SIRET dont on veut vérifier la validité.
*
* @return Un booléen qui vaut 'true' si le code SIRET passé en
* paramètre est valide, false sinon.
*/
function EstSiretValide(siret) {
var estValide;
if ( (siret.length != 14) || (isNaN(siret)) )
estValide = false;
else {
// Donc le SIRET est un numérique à 14 chiffres
// Les 9 premiers chiffres sont ceux du SIREN (ou RCS), les 4 suivants
// correspondent au numéro d'établissement
// et enfin le dernier chiffre est une clef de LUHN.
var somme = 0;
var tmp;
for (var cpt = 0; cpt<siret.length; cpt++) {
if ((cpt % 2) == 0) { // Les positions impaires : 1er, 3è, 5è, etc...
tmp = siret.charAt(cpt) * 2; // On le multiplie par 2
if (tmp > 9)
tmp -= 9; // Si le résultat est supérieur à 9, on lui soustrait 9
}
else
tmp = siret.charAt(cpt);
somme += parseInt(tmp);
}
if ((somme % 10) == 0)
estValide = true; // Si la somme est un multiple de 10 alors le SIRET est valide
else
estValide = false;
}
return estValide;
}

function handleSiretSirenValidation(val)
{
if(val.length === 9)
{
if(!EstSirenValide(val))
{
alert('Le numero siren est faux');
}
}
else if(val.length === 14)
{
if(!EstSiretValide(val))
{
alert('Le numero siret est faux');
}
}
else
{
alert('Le numero siret/siren est faux');
}

return true;
}
</script>[/javascript]