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

AJAX Discussion :

[AJAX] Mémoriser les valeurs d'un formulaire avant validation


Sujet :

AJAX

  1. #1
    Membre habitué Avatar de Baldy
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 223
    Points : 128
    Points
    128
    Par défaut [AJAX] Mémoriser les valeurs d'un formulaire avant validation
    Bonjour
    (j'espère ne pas me tromper de section ...)

    Je suis en train de réaliser un formulaire servant de fiche de suivi d'élève pour un établissement scolaire.

    Je souhaite que ces derniers ajoutent leurs notes de la semaine mais SANS valider le formulaire à chaque fois.
    Il faudrait donc pouvoir entrer la note, choisir la matière et ensuite valider le choix pour passer à la note suivante.
    Cette action ne validerais pas le formulaire mais stockerais la note en mémoire (pourquoi pas l'afficher dans un DIV). Et à la validation du formulaire, toutes les notes données seraient ensuite envoyées dans la BDD.

    Si vous avez une idée sur le script à écrire pour réaliser cela ...

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Janvier 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut
    Le principe avec les technologies AJAX c'est que tu peux soumettre le formulaire sans que cela se voit. Tu peux donc enregistrer la note dans la base et vider les champs pour laisser entrer la première note.

    Sinon si tu tiens absolument à ne faire qu'une requête dans la base, tu peux simplement masquer les champs et en ajouter de nouveaux à chaque fois que tu entres une note.
    Ou alors tu peux aussi ajouter les notes une par une dans un élément comme DIV et à la validation du formulaire, il faudra que tu récupères le contenu de cet élément.

  3. #3
    Membre habitué Avatar de Baldy
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 223
    Points : 128
    Points
    128
    Par défaut
    Tout ça parait censé. Tes diverses solutions ont l'air toutes plus intéressantes les unes que les autres.

    Le soucis c'est que je ne sais pas comment procéder ...

    Le principe avec les technologies AJAX c'est que tu peux soumettre le formulaire sans que cela se voit. Tu peux donc enregistrer la note dans la base et vider les champs pour laisser entrer la première note.
    Comment faire pour enregistrer une note sans pour autant recharger la page?

    Sinon si tu tiens absolument à ne faire qu'une requête dans la base, tu peux simplement masquer les champs et en ajouter de nouveaux à chaque fois que tu entres une note.
    Masquer le champ ça devrait pouvoir se faire. Mais en ajouter un nouveau ... et surtout comment récupérer les X champs? Comment savoir combien il y en a? et comment ils se nomment?

    Ou alors tu peux aussi ajouter les notes une par une dans un élément comme DIV et à la validation du formulaire, il faudra que tu récupères le contenu de cet élément.
    Oui je voit ce que tu veux dire. Si je ne me trompe pas on doit pouvoir utiliser le innerHtml du Javascript pour modifier le contenu d'un DIV. Mais comment récupérer ensuite ses données à la soumission du formulaire?

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Janvier 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 81
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par Baldy Voir le message
    Comment faire pour enregistrer une note sans pour autant recharger la page?
    Avec Javascript et l'objet XMLHttpRequest tu peux envoyer des données à un script PHP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function sauvegardeNote()
    {
    /* On récupère la note */
    var valeurNote = document.getElementById("champNote").value ;
    /* On crée l'objet XMLHttpRequest / la fonction getHTTPObject est à créer
     */
    var xmlhttp = getHTTPObject();
    /* Préparation d'une requête asynchrone de type POST : */
    xmlhttp.open("POST", "/sauvegardeNote.php",true);
    /* Effectue la requête en envoyant les données : */
    xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    xmlhttp.send("note=valeurNote");
    }
    Tu pourras alors récupérer la note avec $_POST['note'] dans sauvegardeNote.php.

    Citation Envoyé par Baldy Voir le message
    Masquer le champ ça devrait pouvoir se faire. Mais en ajouter un nouveau ... et surtout comment récupérer les X champs? Comment savoir combien il y en a? et comment ils se nomment?
    Encore une fois avec Javascript tu peux ajouter des champs par exemple avec la fonction appendChild(). Je te conseille de lire ceci :

    appendChild()
    Ajoute un nœud nouvellement créé auparavant à la structure de nœuds existante, et cela de façon à ce qu'il soit inséré comme dernier nœud enfant d'un nœud à mentionner.
    Exemple:

    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
    <html><head><title>Test</title></head>
    <body>
    <ol id="Liste">
    <li>Element</li>
    </ol>
    <script language="JavaScript" type="text/javascript">
    <!--
    document.getElementById("Liste").removeChild(document.getElementById("Liste").firstChild);
     
    for(var i = 0; i < 10; i++) {
      var nouveauLI = document.createElement("li");
      var numeroli = i + 1;
      var nouveautexteli = document.createTextNode("C'est l'élément de liste numéro " + numeroli);
      document.getElementById("Liste").appendChild(nouveauLI);
      document.getElementsByTagName("li")[i].appendChild(nouveautexteli);
    }
    //-->
    </script>
    </body></html>
    Explication:

    L'exemple remplit automatiquement une liste numérotée avec des données. Tout de suite après la liste numérotée suit un passage JavaScript. Tout d'abord, l'élément de liste existant est supprimé avec la méthode vers le bas removeChild() . Ensuite est notée une Autre page d'information boucle for qui est parcourue 10 fois. À chaque tour de boucle, est créé dans un premier temps un nouvel élément du type li avec Autre page d'information document.createElement(). Ensuite une variable numeroli est fixée sur une valeur qui est supérieure de 1 au compteur de boucle i. Cette variable est utilisée dans l'instruction suivante, dans laquelle un nouveau nœud texte est créé avec Autre page d'information document.createTextNode(). Enfin suivent - toujours dans la boucle for - deux appels d' appendChild(). La première de ces instructions accède avec document.getElementById("Liste") à l'élément ol et fait en sorte qu'un nouvel élément enfant soit inséré à la fin. Est ajouté le nœud élément nouveauLI venant d'être créé et qui sauvegarde un nouvel élément li. La deuxième de ces instructions utilise le compteur de boucle i pour accéder avec document.getElementsByTagName("li")[i] à l'élément li venant d'être créé. À ce dernier est ajouté avec appendChild() le nœud texte créé auparavant comme élément enfant. De cette manière la liste se remplit à chaque tour de boucle d'un nouvel élément li y compris le contenu de caractères.
    Pour savoir combien il y en a tu peux créer une variable "cpt" qui va compter pour toi. Au moment d'ajouter un nouveau champ, tu feras "cpt++". Ainsi tu auras la valeur stocké. Ou bien, si tu lis un peu plus dans le lien que je t'ai donné, tu verras que tu peux compter le nombre d'enfant dans un noeud.

    Citation Envoyé par Baldy Voir le message
    Oui je voit ce que tu veux dire. Si je ne me trompe pas on doit pouvoir utiliser le innerHtml du Javascript pour modifier le contenu d'un DIV. Mais comment récupérer ensuite ses données à la soumission du formulaire?
    innerHTML peut être utilisé en lecture ou en écriture.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var value = eltID.innerHTML ; // lecture
    eltID.innerHTML = newValue ; // écriture

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/05/2017, 21h45
  2. [AJAX] Garder les valeurs des champ d'un formulaire en mémoire
    Par joss91 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/04/2008, 09h56
  3. [AJAX] Tester les champs d'un formulaire avant de pouvoir l'envoyer
    Par italiasky dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/05/2007, 12h25
  4. Réponses: 1
    Dernier message: 04/06/2006, 00h35
  5. [Struts] Comment initialiser les valeurs d'un formulaire
    Par Sniper37 dans le forum Struts 1
    Réponses: 2
    Dernier message: 08/04/2005, 15h02

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