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 :

Récupération de la valeur d'un champ pour en incrémenter un autre


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 88
    Par défaut Récupération de la valeur d'un champ pour en incrémenter un autre
    Bonjour,

    Je commence à m'intéresser au Javascript et à l'Ajax, et j'aurais besoin de votre aide précieuse.

    j'ai un formulaire pour créer un employé, je veux que quand l'utilisateur renseigne un nom et un prénom, il puisse cliquer sur un bouton, qui va générer un login, et l'afficher dans un champ.
    Je veux vérifier que ce login n'existe pas dans ma BDD, s'il existe, je lui ajoute un chiffre.

    Mon problème, c'est qu'il ne se passe rien lorsque je clique sur le bouton générer....

    voici ma page avec le code html et JS :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    <script type="text/javascript">
     
     
    function request(callback) {
      var xhr = getXMLHttpRequest();
     
      xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
          callback(xhr.responseText);
        }
      };
     
      var nom = encodeURIComponent(document.getElementById("inputFirstname").value);
      var prenom = encodeURIComponent(document.getElementById("inputLastname").value);
      var login=prenom.substring(0,1)+nom; //concatenation du nom et prénom avec juste la première lettre du prénom
     
    // envoie de la variable login a la page de traitement php avec la methode post
    xhr.open("POST", "esp_Rh/create_login.php", true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send("login=" + login);
    }
     
    function readData(oData) {
      var nodes   = oData.getElementsByTagName("item"); // récuperer  les infos au format xml dans la page de traitement php
      document.getElementById('inputIdentifiant').value=nodes; //donner la valeur contenu dans nodes à mon input identifiant
    }
     
    </script>
     
     
    <form method="post" action="esp_Rh/addUser.php" id="formulaire">
     
        <div class="form-row">
          <div class="form-group col-md-6">
            <label><b>Nom</b></label>
            <input type="text" class="form-control" id="inputFirstname" placeholder="Entrer le nom de l'utilisateur" name="firstname" required>
          </div>
          <div class="form-group col-md-6">
            <label><b>Prénom</b></label>
            <input type="text" class="form-control" id="inputLastname" placeholder="Entrer le prénom de l'utilisateur" name="lastname" required>
          </div>
     
        </div>
     
      <div class="form-row">
        <div class="form-group col-md-6">
          <label><b>Email</b></label>
          <input type="email" class="form-control" id="inputEmail" placeholder="exemple@mail.fr" name="email">
        </div>
        <div class="form-group col-md-6">
          <label ><b>Confirmer l'Email</b></label>
          <input type="email" class="form-control" id="inputEmail2" placeholder="exemple@mail.fr" name="email2">
         </div>
         </div>
        <div class="form-row">
         <div class="form-group col-md-6">
          <label><b>Mot de passe</b></label>
          <input type='text' class="form-control" id='res' value='' readonly="readonly" name="password" required>
          <input type="button" class="btn" onclick="generatepwd()" value = "generation" />
        </div>
        <div class="form-group col-md-6">
            <label><b>Identifiant</b></label>
            <input type="text" class="form-control" id="inputIdentifiant" value='' readonly="readonly" name="username"  required>
            <input type="button" class="btn" onclick="request(readData);" value = "generation" />
        </div>
      </div>
     
     
    </form>
    Voici ma page de traitement :
    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
    43
    44
    45
    46
     
    <?php 
     
    header("Content-Type: text/xml");
    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
    echo "<list>";
     
    $login = (isset($_POST["login"])) ? htmlentities($_POST["login"]) : NULL;
     
    function check_statut () //fonction pour vérifier que le login n'exsite pas dans la BDD
    	{
     
    	$requete = "SELECT count(*) FROM users where 
                  login = '".$login."'  ";
        $bdd = include '../db_mysql.php';
        $exec_requete = $bdd->query($requete);
        $reponse = $exec_requete->fetch(PDO::FETCH_ASSOC);
        $resultat = $reponse['count(*)'];
     
        return $resultat;
    }
     
    function return_login () 
    	{
     
     
    	if($login) { //on verifie que notre variable ne soit pas vide
     
    		if ($result_log !=0) // si la fonction nous retour un count différent de 0 c'est que le login existe
    		{
    			$login = 'patate'; // du coup ici on change le login
    			check_statut(return_login); // ici on boucle jusqu'a ce que le login ne soit pas dans la BDD
    	 		echo "<item id=\"" . $login . "\" name=\"" . $login . "\" />";
    		}
    		else {
    			echo "<item id=\"" . $login . "\" name=\"" . $login . "\" />";
    		}
     
    	}else {
    			echo "<item id=\" vide \" name=\"vide\" />";
    		}
    }
    return_login();
    echo "</list>";
     
    ?>
    Si quelqu'un a une idée.. Merci

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    cela ne nous suffit pas pour vous aider, merci d'indiquer à chaque fois :
    1. ce que vous avez mis en place
    2. le résultat que vous obtenez avec l'affichage des variables qui ne contiennent pas l'information prévue
    3. le résultat que vous auriez souhaité


    pour suivre les appels AJAX, vous pouvez utiliser l'onglet "Réseau" de la console de développement de votre navigateur.
    par exemple avec Firefox, faites Ctrl + Maj + E
    https://developer.mozilla.org/fr/doc...ur_r%C3%A9seau

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 88
    Par défaut
    Bonjour Mathieu,

    1) ce que j'ai mis en place?... C'est à dire?
    2) Le résultat que j'obtiens il me semble l'avoir dit, il ne se passe rien... C'est comme si il n'y avait pas de javascript.
    3) Le résultat que j'aurais souhaité je l'ai dis aussi il me semble, je veux générer un login quand l'utilisateur clique sur un bouton.
    4) voici ce que j'obtiens: Nom : RESEAU.PNG
Affichages : 277
Taille : 35,8 Ko
    Je me suis peut-être mal exprimé mais j'ai expliqué tout ce que vous me demander ^^

  4. #4
    Membre chevronné
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Par défaut
    Bonjour,

    Je n'ai regardé que la partie PHP:

    La variable $login n'est pas accessible dans vos 2 fonctions car elle est déclarée à l'extérieur.

    Déclarer la variable en global ("php.net::global") à l'intérieur de vos fonctions (même si ce n'est pas forcément une bonne pratique).

    Je vous invite également à sécuriser vos requêtes SQL grâce aux requêtes préparées faciles d'accès avec PDO. Pour ce faire, je vous invite à consulter l'excellent tuto: https://fmaz.developpez.com/tutoriel...omprendre-pdo/

    Dernière chose: ligne 32 l'appel à la fonction check_statut() est à revoir notamment le paramètre envoyé [return_login] qui sort de nulle part.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 88
    Par défaut
    Bonjour Valaendra,

    1) MERCI, je ne savais pas que les variables globales n'étais pas accessible dans les fonctions.
    2) C'est vrai que j'ai fais la requête à la va vite, je vais la refaire mais elle devrait fonctionner quand même non?
    3) Comment fait on pour appeler une fonction du coup? je voulais appeler check_statut qui elle même appelle return_login.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ton "fichier de traitement" est un ramassis d'inepties...

    Essaie ça :
    Code php : 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
    <?php 
    header('Content-type:application/json; charset=UTF-8');	// encodage UTF-8
     
    $bdd = include '../db_mysql.php';
     
    $login = (isset($_POST["login"])) ? htmlentities($_POST["login"]) : '';
     
    function check_statut( $login ) //fonction pour vérifier que le login n'existe pas dans la BDD
    {
    	global $bdd;
    	$requete = "SELECT count(*) as total FROM users WHERE login = ? ";
    	$exec_requete = $bdd->prepare($requete);
    	$exec_requete->execute( array($login) );
    	$reponse = $exec_requete->fetch(PDO::FETCH_ASSOC);
    	$total = $reponse['total'];
     
    	return $total;
    }
     
    if( !empty($login) )  //on verifie que notre variable ne soit pas vide
    {
    	$ii = 1;
    	$login_check = $login;
    	while( check_statut( $login_check ) > 0 ) // si la fonction nous retour un count différent de 0 c'est que le login existe
    	{
    		$login_check = $login . $ii; // du coup ici on change le login
    		$ii++;
    	}
    	$login = $login_check;
    }
     
    echo json_encode($login);
    Et ça, ce n'est QUE la partie PHP !!

    Pour Ajax, je t'invite à LIRE et à FAIRE L'EXERCICE de :


  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 88
    Par défaut
    Bonjour,

    Ah oui tu m'as quasiment tout changé... Mon "fichier de traitement" était si horrible que ça?

    Pour la partie AJAX, j'avais suivi un cour en ligne sur un autre site mais visiblement je ne suis pas au niveau, je vais faire l'exercice que tu m'as donné!

    Merci beaucoup, je reposte quand j'aurais réussi

  8. #8
    Invité
    Invité(e)
    Par défaut
    ASTUCE : Tu peux TESTER ton fichier de traitement, en l'affichant directement dans la barre d'adresse.

    Pour tester un login, il suffit d'écrire APRES la ligne 6 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $login = 'toto'; // OU un login DEJA existant (pour voir si ça affiche bien l'incrémentation)

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

Discussions similaires

  1. Réponses: 22
    Dernier message: 04/09/2006, 12h53
  2. Réponses: 2
    Dernier message: 14/02/2006, 14h59
  3. valeur d'un champ pour l'utiliser dans une requete
    Par bachilbouzouk dans le forum ASP
    Réponses: 4
    Dernier message: 08/04/2005, 16h58
  4. Récupération de la valeur d'un champ au nom variable
    Par Oluha dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/02/2005, 15h13

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