IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

désactiver le bouton


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut désactiver le bouton
    Bonjour,

    J'ai un champ de texte pour les emails et un bouton "Envoyer"...
    Si ce email a été déjà utilisé, je vais désactiver ce bouton :

    Voici mes étapes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <label>Votre email<span class="rose"><strong>*</strong></span> :
    <input name="email" type="text" id="email" onKeyUp="verifCourriel(this.value)"  /></label>
    <!-- onkeypress="return valid_mail(event);"-->
    <label class="error checked" generated="true" for="email">&nbsp;</label>
    <div id="divPourVrfEmail"></div><input type="submit"  name="submit" id="submit" value="Envoyer" />
    Lorsque l'utilisateur tape son courriel, on vérifie si ce courriel existe dans la basse de données, au fur et mesure qu'il tape les lettres...
    Si cela existe on lui dit que ce courriel est déjà existé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    function writediv_vrf_email(texte) {
    	document.getElementById('divPourVrfEmail').innerHTML = texte;
    }
     
     
    function verifCourriel(email) {
        if (email != '') {
            if (email.length < 0)
                writediv_vrf_email('<span style="color:#cc0000"><b>' + email + ' :</b>trop court</span>');
            else if (email.length > 200)
               writediv_vrf_email('<span style="color:#cc0000"><b>' + email + ' :</b>trop long</span>');
            else if (texte = file('verification_email.php?email=' + escape(email))) {
                if (texte == 1)
                    writediv_vrf_email('+email+');
     
                else if (texte == 2)
                    writediv_vrf_email('+email+');
     
                else
                    writediv_vrf_email(texte);
    				//document.mon_form_name.submit.disabled = true; 
     
            }
        }
     
    }
    et voici mon fichier verification_email.php
    include"mabase_d.php";

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $result = mysql_query("SELECT colone_email FROM $table_db WHERE colone_email='".$_GET["email"]."'");
     
    if(mysql_num_rows($result)>=1)
     
     
    echo "<span style=\"color:#cc0000\"><b>Attention ce courriel à été DÉJÀ utilisé avec ces lettres</b> Autrement dit, vous ne pouvez pas utiliser ce courriel</span>";
    else
    echo "<span style=\"color:#1A7917\"><b>Vous pouvez utiliser ce courriel qui n'existe pas encore</b> donc ce courriel est libre</span>'";
    Jusqu'au ici tout va bien... Mais je vais ajouter une autre fonctionnalité : lorsque le courriel est existe, il faut que mon bouton devienne inactif (disabled)... Comment peux-je faire ?

    voici ce que j'ai ajouté dans mon bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      <input type="submit"  name="submit" id="submit" value="Envoyer"  <?php 
     
    include"mabase_d.php";
    $rslt = mysql_query("SELECT colone_email FROM $table_db WHERE colone_email='".$_GET["email"]."'");
    if(mysql_num_rows($rslt)>=1)
    {
            echo 'disabled="disabled"';
    }
    else
    {
    // rien
    }
     
    ?> />
    Mais mon bouton est toujours actif parce que je n'arrive pas récupérer la valeur du champ «*email*» par $_GET[«*email*»]
    alors que je dois faire ?

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 228
    Par défaut
    Bonsoir,
    je présumes que les transactions ce font en Ajax et que file est la fonction d'envoi.
    Quand traites tu le retour ?

    Un classique AJAX : utiliser les données au bon moment !

    Perso je ne ferais le test qu'à la soumission.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    Bonjour NoSmoking,

    Citation Envoyé par NoSmoking Voir le message
    ... les transactions ce font en Ajax ...
    Non, les transactions se font en php! Ajax c'est seulement pour la vérification de email....

    Citation Envoyé par NoSmoking Voir le message
    ...file est la fonction d'envoi.
    Pour faire la requête sql dans un fichier PHP

    Alors que je dois faire ?
    Merci

  4. #4
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    ne sachant pas ce que fait file, je dois avouer que je ne vois pas le problème.
    Tu utilises quoi pour faire l'AJAX ? une librairie ou un code perso ?

  5. #5
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 103
    Par défaut
    Petite remarque :
    je suis un pirate. Je veux me connecter sur ton site, et je tape une adresse qui existe déjà : le bouton se désactive. J'ouvre Firebug, je sélectionne le bouton, et je mets sa propriété disabled à false. Ceci met permet d'envoyer quand même la requête.

    Est-ce que ton code côté serveur prévoit ce genre de scénario ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Petite remarque :
    je suis un pirate.
    Tsss, j'en étais sur...

    ()

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    Citation Envoyé par Kaamo Voir le message
    ne sachant pas ce que fait file, je dois avouer que je ne vois pas le problème.
    Tu utilises quoi pour faire l'AJAX ? une librairie ou un code perso ?
    Même si tu sais le lien vers File... tu ne peux rien faire puisque c'est un fichier en php et que tu ne peux lire que le message...

    en outre, il n'y a qu'une requête pour voir si le courriel existe ou non avec le message....

    D'ailleurs je n'utilise AJAX qu'afficher le message aux les utilisateur en disant que ce courriel est existé ou non!!!

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Petite remarque :
    je suis un pirate. Je veux me connecter sur ton site, et je tape une adresse qui existe déjà : le bouton se désactive. J'ouvre Firebug, je sélectionne le bouton, et je mets sa propriété disabled à false. Ceci met permet d'envoyer quand même la requête.

    Est-ce que ton code côté serveur prévoit ce genre de scénario ?
    tu peux envoyer les informations en changeant la propriété de bouton (d'ailleurs c'est comme cela pour le moment) mais tu ne peux pas les enregistrer ces informations dans la BDD :

    dans mon 3e fichier en php il y a une condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if(mysql_num_rows($verification_email)<1)
    						{
    // enregistrer les données
     
    }
    						else
    						{
    							echo "<h2>D&eacute;sol&eacute;s, nous ne pouvons prendre en compte votre commande.</h2>";
     
     }

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    Donc comment peux-je le faire ???
    Pourquoi vais-je cela : c'est juste pour être un peu plus ergonomique : faire éviter une action inutile (un clic supplémentaire) aux utilisateurs...

  10. #10
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    file est une fonction javascript qui doit implémenter l'objet 'AJAX' qui se charge d'envoyer à php la requête. Selon ce que j'ai compris en tout cas.

    c'est pour cela que je voulais voir le code javascript qui se charge de faire tout ça. Peut-être y a t il un mauvais transfert de ce coté

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    Citation Envoyé par Kaamo Voir le message
    file est une fonction javascript qui doit implémenter l'objet 'AJAX' qui se charge d'envoyer à php la requête. Selon ce que j'ai compris en tout cas.

    c'est pour cela que je voulais voir le code javascript qui se charge de faire tout ça. Peut-être y a t il un mauvais transfert de ce coté

    En fait le code JavaScript (avec fonction file) ça marche puisque J'arrive afficher le message dans le div "divPourVrfEmail" : au fur et mesure que l'utilisateur tape son email

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      <label style="display: none;" class="error checked" generated="true" for="courriel">&nbsp;</label>
                  </p><div id="divPourVrfEmail"><span style="color: rgb(26, 121, 23);"><b>Vous pouvez utiliser ce courriel qui n'existe pas encore</b> donc ce courriel est libre</span>'</div>
    Mon code en PHP qui se trouve dans le bouton ne marche pas parce que je n'arrive pas capter la valeur d'email tapé par php...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      <input type="submit"  name="submit" id="submit" value="Envoyer"  <?php 
     
    include"mabase_d.php";
    $rslt = mysql_query("SELECT colone_email FROM $table_db WHERE colone_email='".$_GET["email"]."'");
    if(mysql_num_rows($rslt)>=1)
    {
            echo 'disabled="disabled"';
    }
    else
    {
    // rien
    }
     
    ?> />

  12. #12
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 228
    Par défaut
    En fait le code JavaScript (avec fonction file) ça marche puisque J'arrive afficher le message dans le div "divPourVrfEmail" : au fur et mesure que l'utilisateur tape son email
    ceci n'est pas une preuve

    Je constate que tu ne t'ai pas donné la peine de lire le lien que je t'ai mis....

    Explication , (tentative plutôt)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else if (texte = file('verification_email.php?email=' + escape(email)))
    ici tu affectes à texte la valeur en retour de file, c'est louable mais très moyen, lors du retour il y a belle burette que tu n'es plus dans la fonction verifCourriel, attendu que tu es en mode asynchrone, les frappes en cours laissant apparaître les modifications.

    Il te faut donc sur le RETOUR du serveur
    - remplir le champ suivant la réponse
    - disabled le bouton suivant la réponse

    Comprendre les mécanismes d'AJAX

    concernant cette partie !!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (texte == 1)
      writediv_vrf_email('+email+'); // tu écris juste "+email+"
    else if (texte == 2)
      writediv_vrf_email('+email+'); // tu écris juste "+email+"
    else
      writediv_vrf_email(texte);

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    ceci n'est pas une preuve

    Je constate que tu ne t'ai pas donné la peine de lire le lien que je t'ai mis....

    (...) attendu que tu es en mode asynchrone, les frappes en cours laissant apparaître les modifications.

    Il te faut donc sur le RETOUR du serveur
    - remplir le champ suivant la réponse
    - disabled le bouton suivant la réponse

    Comprendre les mécanismes d'AJAX
    (...)
    Je ne comprends pas du tout... alors donnes moi un peu de temps pour digérer tous cela... et ensuite je vais revenir...

    Merci et à bientôt... demain ?

  14. #14
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    de plus, à mon avis, tu n'as rien du tout dans $_GET["email"].
    Un ptit réflexe à avoir : faire un print_r($GET) pour voir ce qu'il y a dedans.

    et attention à
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $rslt = mysql_query("SELECT colone_email FROM $table_db WHERE colone_email='".$_GET["email"]."'");

    c'est open bar ce genre de chose. Après, je pense que tu le sais vu que tu échappes email de ta fonction javascript. (qui, entre nous, pourrait très bien être détourné)

  15. #15
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 103
    Par défaut
    Moi je vois ça comme ça, en gros :
    1. L'utilisateur tape un email ;
    2. A chaque (*) keyPress, tu fais un GET en Ajax vers ton serveur, qui fait à son tout un SELECT vers ta base de données ;
    3. Le serveur envoie la réponse, qui peut être un simple booléen ;
    4. Dans la fonction de rappel de ta requête Ajax (via JavaScript donc), tu désactives (ou réactives) le bouton, comme ceci :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      leBouton.disabled = true; // pour désactiver
      // ou
      leBouton.disabled = false; // pour réactiver


    (*) Pour ne pas envoyer « trop » de requêtes inutiles, on peut attendre que l'utilisateur fasse une petite pause avant d'interroger le serveur. Ceci peut se faire au moyen d'un simple timer, que l'on remet à zéro au début de la fonction keypress. Un délai de 0.5s me semble raisonnable.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    Bonjour tout le monde,
    Enfin, la vérification d'email marche :
    voici mon JavaScript avec Jquery

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    jQuery.noConflict(); 
     
     function div_verification_control_email(texte) {
    	document.getElementById('divPourVrfEmail').innerHTML = texte;
    }
     
     
    function verifCourriel(email) {
        if (email != '') {
            if (email.length < 0)
                div_verification_control_email('<span style="color:#cc0000"><b>' + email + ' :</b>trop court</span>');
            else if (email.length > 200)
               div_verification_control_email('<span style="color:#cc0000"><b>' + email + ' :</b>trop long</span>');
            else if (texte = file('verification_email.php?email=' + escape(email))) {
                if (texte == 1)
                    div_verification_control_email('+email+');
     
                else if (texte == 2)
                    div_verification_control_email('+email+');
     
                else
                    div_verification_control_email(texte);
     
            }
        }
     
    }
     
    // merci pour NoSmoking et Kaamoo 
    //implémenter l'objet 'AJAX'
    function file(fichier) {
        if (window.XMLHttpRequest) // FIREFOX
            xhr_object = new XMLHttpRequest();
        else if (window.ActiveXObject) // IE
            xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
        else
            return (false);
        xhr_object.open("GET", fichier, false);
        xhr_object.send(null);
        if (xhr_object.readyState == 4) return (xhr_object.responseText);
        else return (false);
    }
    et voici mon code html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <label>Votre email<span class="rose"><strong>*</strong></span> :
    <input name="email" type="text" id="email" onchange="verifCourriel(this.value)"  /></label>
    <!-- onkeypress="return valid_mail(event);"-->
    <label class="error checked" generated="true" for="email">&nbsp;</label>
    <div id="divPourVrfEmail"></div><input type="submit"  name="submit" id="submit" value="Envoyer" />
    tout va bien
    Alors pour le bouton, j'ai fait un autre fonction, et je l'ai ajouté dans mon javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function button_submit(email) {
        if (email != '') {
         	if (bouton_email = file('verification_email/vrf_submit.php?email=' + escape(email))) {
                 if (bouton_email == 1)
                    div_button_submit('+email+');
     
                else if (bouton_email == 2)
                    div_button_submit('+email+');
     
                else
                    div_button_submit(bouton_email);
     
     
            }
        }
     
    }
    dans mon fichier php, (vrf_submit.php), je désactive/réactive le bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(mysql_num_rows($result)>=1)
     
     
    echo '<input type="submit"  name="submit" id="submit" value="Envoyer" disabled="disabled"/>';
    else
    echo '<input type="submit"  name="submit" id="submit" value="Envoyer"/>';
    ensuit j'ai créé mon div, div_button_submit, :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="div_button_submit"></div>
    et j'ai ajouté mon appel au fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <label>Votre email<span class="rose"><strong>*</strong></span> :
    <input name="email" type="text" id="email" onchange="verifCourriel(this.value);button_submit(this.value)"  /></label>
    <label class="error checked" generated="true" for="email">&nbsp;</label>
    tout fonctionne...

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Par défaut
    Citation Envoyé par aspkiddy Voir le message
    (...)
    tout fonctionne...
    Est-ce que peut-on faire autrement, plus court que le mien ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. désactivé un bouton
    Par leo13 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/03/2005, 12h44
  2. Désactiver le bouton "fermer fomulaire"
    Par 973thom dans le forum IHM
    Réponses: 10
    Dernier message: 03/02/2005, 21h26
  3. Griser et désactiver un bouton
    Par skea dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/01/2005, 11h45
  4. [MFC] désactiver un bouton d'un CToolBar
    Par bigboomshakala dans le forum MFC
    Réponses: 4
    Dernier message: 22/11/2004, 15h31
  5. Désactiver un bouton
    Par nd25 dans le forum Flash
    Réponses: 3
    Dernier message: 06/10/2003, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo