Appliquer une fonction lors de l'envoi d'un formulaire : URGENT PLZ

payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 - 24 déc. 2008 à 14:51
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 2 janv. 2009 à 11:30
Bonjour,

J'ai un formulaire, qui appelle une fonction javascript par un ONSUBMIT qui vérifié si les champs saisis ne sont pas nuls, mais j'ai également un automate qui vérifie la validité de l'adresse email.
Mon probleme est que cet automate est en PHP et je ne sais pas comment envoyer cet automate lors de la validation du formulaire. Quelqu'un peut-il m'aider s'il vous plaît ?

Quelques petites infos si vous en avez besoin :
Mon champs email se nomme 'email' la variable '$_POST['email']' est contenue dans une variable appelée '$r_email', ma page du formulaire est 'inscription.php' et la page vers laquelle elle pointe et qui sert à ecrire dans al base est 'envoi_inscription.php'

Voilà Merci beaucoup
Ju'

7 réponses

payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 4
24 déc. 2008 à 14:52
j'ai oublié, ma fonction c'est :



function ControleEmail( $r_email )
{
  $Etat = 0;
  for( $i = 0 ; $i < strlen( $r_email ) ; $i++ )
  {
    // Analyse des caracteres
 
    $Type = ' ';
    if( ($r_email[$i] >= '0' && $r_email[$i] <= '9') ||
        ($r_email[$i] >= 'a' && $r_email[$i] <= 'z') ||
        ($r_email[$i] >= 'A' && $r_email[$i] <= 'Z') ) $Type = 'A';
    if( $r_email[$i] == [mailto:'@' '@'] ) $Type = [mailto:'@' '@'];
    if( $r_email[$i] == '.' ) $Type = '.';
    if( $r_email[$i] == '_' ) $Type = 'S';
    if( $r_email[$i] == '-' ) $Type = 'S';
   
    switch( $Etat )
    {
    case 0   : // Attend un caractere alphanumeric uniquement               if( $Type 'A' ) $Etat 1; else $Etat = 999;
               break;
    case 1   : // Si caractere special caractere suivant alphanumeric uniquement               if( $Type 'S' ) $Etat 0;
               // Si point special caractere suivant alphanumeric uniquement               if( $Type '.' ) $Etat 0;
               // Si caractere non conforme echec               if( $Type ' ' ) $Etat 999;
               // Si arobase caractere suivant alphanumeric uniquement               if( $Type [mailto:'@' '@'] ) $Etat 2;
               // Sinon prochain caractere libre
               break;
    case 2   : // Attend un caractere alphanumeric uniquement                if( $Type 'A' ) $Etat 3; else $Etat = 999;
               break;
    case 3   : // Si caractere special caractere suivant alphanumeric uniquement               if( $Type 'S' ) $Etat 2;
               // Si point special caractere suivant alphanumeric uniquement               if( $Type '.' ) $Etat 4;
               // Si caractere non conforme echec               if( $Type ' ' ) $Etat 999;
               // Si arobase caractere suivant alphanumeric uniquement               if( $Type [mailto:'@' '@'] ) $Etat 999;
               // Sinon prochain caractere libre
               break;
    case 4   : // Si caractere special caractere suivant alphanumeric uniquement               if( $Type 'A' ) $Etat 5; else $Etat = 999;
               break;
    case 5   : // Si caractere special caractere suivant alphanumeric uniquement               if( $Type 'S' ) $Etat 2;
               // Si point special caractere suivant alphanumeric uniquement               if( $Type '.' ) $Etat 4;
               // Si caractere non conforme echec               if( $Type ' ' ) $Etat 999;
               // Si arobase caractere suivant alphanumeric uniquement               if( $Type [mailto:'@' '@'] ) $Etat 999;
               // Sinon prochain caractere libre (Validation car dernier domaine avec 2 caracteres)               if( $Type 'A' ) $Etat 1000;
               break;
    case 1000: // Si caractere special caractere suivant alphanumeric uniquement               if( $Type 'S' ) $Etat 2;
               // Si point special caractere suivant alphanumeric uniquement               if( $Type '.' ) $Etat 4;
               // Si caractere non conforme echec               if( $Type ' ' ) $Etat 999;
               // Si arobase caractere suivant alphanumeric uniquement               if( $Type [mailto:'@' '@'] ) $Etat 999;
               // Sinon prochain caractere libre
               break;
    }
    //echo "[".$Type."]".$Etat."
";
  }
  if( $Etat == 1000 ) return True;
  return False;
}
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
24 déc. 2008 à 18:28
Salut,

J'avoue ne pas très bien comprendre ton problème.
je ne sais pas comment envoyer cet automate lors de la validation du formulaire
=> que veux tu dire par là ?

Pour décomposer un peu :
inscription.php
formulaire
vérification Javascript de la validité des champs (y compris mail pourquoi pas ?)
Envoi du formulaire après traitement en local sur le poste du client vers envoi_inscription.php

envoi_inscription.php (traitement sur le serveur)
nouvelle vérification de toutes les variables envoyées, vérification de la validité de l'adresse mail
insertion dans la base de données

En ce qui concerne ta fonction ControleEmail franchement ce n'est pas le top, pour ne pas dire pire :-) Tu peux la remplacer par 2/3 lignes (jette un oeil aux regex)

Cordialement,

Kohntark -
0
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 4
26 déc. 2008 à 09:08
Bonjour et merci de ta réponse. Et bien que ce soit sur 2/3 lignes ou un truc méga long comme j'ai fait ne change pas mon probleme.

Oui enfait tu as bien décomposé.
Le visiteur s'inscrit sur inscription.php où j'ai mon formulaire "form_inscription" auquel j'ai accolé un onsubmit, sur ma fonction de verification de chamsp vides en javascript.
Si aucun champs n'est vide, on passerai à la page "envoi_inscription.php" qui ecrit toutes les infos du formulaire dans la base et qui envoi au visiteur un mail de confirmation d'inscription.
Le seul bug, est que quand il rentre un mail qui n'est pas valide, il execute tout bien, et à la fin il renvoi un erreur SQL malgré qu'il a déjà tout fait. Donc pour eviter cette erreur j'aimerais bien pouvoir déclencher cette fonction, mais je ne sais pas comment la faire fonctionner (ainsi que toutes les autres fonctions PHP depuis un formulaire).

ça se trouve c'est un truc tout bete qui remplacer le ONSUBMIT ou un truc du genre... ?

Ai-je été bien explicite ?

Merci.

Ju'
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
26 déc. 2008 à 12:03
Salut,

Bonjour et merci de ta réponse. Et bien que ce soit sur 2/3 lignes ou
un truc méga long comme j'ai fait ne change pas mon probleme.

=> certes, mais en tout état de cause ça rendra ton code 1000 fois plus lisible, plus rapide et sans aucun doute plus fiable.
Juste un exemple au pif : "d@wa.n_a.do-o.fr" passe sans problème ta fonction .... chui pas sur que ce soit une adresse bien valide hein.
Donc au final remplacer ta fonction par une autre t'évitera bien des problèmes.

Donc pour eviter cette erreur j'aimerais bien pouvoir déclencher cette
fonction, mais je ne sais pas comment la faire fonctionner (ainsi que
toutes les autres fonctions PHP depuis un formulaire).


=> j'ai l'impression qu'il est utile de rappeler que :

Les scripts javascript tournent sur la machine du visiteur, ils ne fonctionnent pas sur le serveur

Les scripts php tournent sur le serveur, il est "impossible" de les éxécuter sur la machine du visiteur

Ceci étant dit, côté serveur (envoi_inscription.php) :

$r_email = strip_tags($_POST['email']); // traitement sécuritaire des données reçues de inscription.php

//contrôle que l'eMail est valide en faisant appel à la fonction
if (false === ControleEmail($r_email)) die('L\'adresse mail que vous avez renseignée est invalide');

$r_email = mysql_real_escape_string($r_email); //protège tous les caractères qui pourraient poser pb à la requête SQL

//... insertion en base de données

Cordialement,

Kohntark -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 4
26 déc. 2008 à 16:46
Ok merci 1000 fois pour ces explications claires.
Et je suis d'accor avec toi pour la fonction sur 2/3 lignes. En 2 secondes tu as déjà trouvé un bug lol
Je doti absolument finir ma partie graphique sous photoshop et ensuite je me replonge dans le PHP pour la fonction mail, je ne pense pas avoir le temps avant lundi dans la journée, donc je le ferais dès lors.
Et je te tiendrais au courant si j'y arrive ou pas.

Merci encore et à lundi ;)
Ju'
0
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 4
30 déc. 2008 à 09:11
Bonjour,

Comme je  l'ai di vendredi, j'ai enfin testé, mais je me suis retrouvé coincé, car j'utilise une interface ODBC

donc $r_email = mysql_real_escape_string($r_email);  il ne connait pas.
Connais tu l'equivalent en ODBC ?
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
2 janv. 2009 à 11:30
Salut,

Non, sauf erreur de ma part ça va dépendre de la base de données que tu utilises derrière.
Reste juste, si il y a lieu, à échapper (avec le caractère qui va bien) les caractères qui doivent l'être (c'est ce que fait en 1 seul fonction native mysql_real_escape_string, mais rien n'empêche de faire la même chose avec une fonction utilisateur)

Kohntark -
0
Rejoignez-nous