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

jQuery Discussion :

Contrôle d'un formulaire avec un nombre de champs variable


Sujet :

jQuery

  1. #41
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    l'erreur est généré par le "echo" que tu as mis, il ne faut pas que le fichier php contient un "echo" appart celle qui est a la fin, pourquoi tu as enlevé json_encode() ?

    json_encode est obligatoire par-ce que on a dit au serveur qu'on veux envoyer des données en format json.

    le code correcte est :
    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
     
    $retour=["erreur"=>[]];
    $data;
    $id_eleve;$note_eleve;
    if(isset($_POST['d'])){		
    	$data=$_POST['d'];
    	foreach($data as $key=>$v){
    		$id_eleve=$v['id_eleve'];
    		$note_eleve=$v['note_eleve'];
    		if(empty($id_eleve)||empty($note_eleve)){
    			if(empty($id_eleve)){
    				array_push($retour['erreur'],['id_eleve'=>'Un id élève est vide !']);
    			}
    			if(empty($note_eleve)){
    				array_push($retour['erreur'],['note_eleve'=>'Une note est vide !']);
    			}
    		}
    	}
    	$retour['data']=$data;
    }
     
    echo json_encode($retour);
    puis dans le success d'ajax le callback success devient :
    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
     
    success:function(s){
    	/*affiche le success dans la console*/
    	console.log('success :'+JSON.stringify(s));
     
    	if(s.erreur.length==0){//si y a pas d'erreur
    		/*parcourir le résultat*/
    		$.each(s.data,function(k,v){
    			console.log('id_eleve :'+v.id_eleve+", note_eleve :"+v.note_eleve);
    		});
    	}
    	else {//sinon s'il y a une erreur
    		$.each(s.erreur,function(k,v){
    			console.log(v);
    		});
    	}
    }

  2. #42
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2011
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Ok Toufik83 ! Je prends bien note de l'utilisation json_encode() !

    J'ai un autre souci et sa doit peut être bien être le dernier! Tu as surement remarqué la présence de champ caché dans mon formulaire au nombre de 5 qui sont:
    annee qui me permet de récupérer l'id de l'année scolaire,
    nmois qui me permet de récupérer l'id du mois,
    nclasse qui me permet de récupérer l'id de la classe,
    nmatiere qui me permet de récupérer l'id de la matière
    nbre qui me permet de récupérer l'effectif total des élèves

    Le blocage c'est comment récupérer les valeurs de ces champs cachés et je précise qu'ils ne contiennent pas la classe form-control

    J'ai essayé de bricoler le code mais sans succès!

  3. #43
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    ce n'est pas très compliquer, tu peux le faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var annee=$('[name="annee"]').val() //annee
         ,mois=$('[name="nmois"]').val() //mois
         ,classe=$('[name="nclasse"]').val() //classe
         ,matiere=$('[name="nmatiere"]').val() //matière
         ,nbr=$('[name="nbre"]').val() /* OU $('#nbre').val(), vu que tu as un id pour nbre*/;

  4. #44
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2011
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Mais est-ce que je pourrais les utilisés côté php avec ce même code:
    Surtout comment récupérer leurs valeurs
    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
     
     
    $retour=["erreur"=>[]];
    $data;
    $id_eleve;$note_eleve;
    if(isset($_POST['d'])){		
    	$data=$_POST['d'];
    	foreach($data as $key=>$v){
    		$id_eleve=$v['id_eleve'];
    		$note_eleve=$v['note_eleve'];
    		if(empty($id_eleve)||empty($note_eleve)){
    			if(empty($id_eleve)){
    				array_push($retour['erreur'],['id_eleve'=>'Un id élève est vide !']);
    			}
    			if(empty($note_eleve)){
    				array_push($retour['erreur'],['note_eleve'=>'Une note est vide !']);
    			}
    		}
    	}
    	$retour['data']=$data;
    }
     
    echo json_encode($retour);

  5. #45
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    bonjour,
    je t'ai donnée toutes les billes pour que tu puisse y arriver, maintenant c'est a toi de jouer, sinon tu n'apprendra jamais jQuery comme ça.

    il va falloir ajouter les variables dans "donnee" avec push, puis au niveau php, plus précisément dans la boucle foreach, il est nécessaire de vérifier si l'item courant contient des variables id_eleve,note_eleve ou non..., essaie de faire un teste et je t'aiderai si jamais tu n'arrives pas a le faire.

  6. #46
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2011
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Ok Toufik83 encore une fois merci pour l'effort que tu fournis pour moi!

    Voilà j'ai essayé ceci avec 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
     
    $(document).ready(function(){
    	$("#register_form1").on('keyup','.form-control',function(){
    			if(!$(this).val().match(/^[0-9.]{1,5}$/)){
    				$(this).css("border-color","#ff0000")
    				.next("span.error_note")
    				.css("color", "red").html("<img src='/appgesco/images/icons/warning.png' alt='Attention' class='erreur'>");
    				console.log($(this).index());
    			}
    			else{
    				$(this).css("border-color","green")
    				.next("span.error_note")
    				.css("color", "green").html("<img src='/appgesco/images/icons/ok24.png' alt='Attention'>");
    			}
    	});
     
    	var annee=$('[name="annee"]').val() //annee
         ,mois=$('[name="nmois"]').val() //mois
         ,classe=$('[name="nclasse"]').val() //classe
         ,matiere=$('[name="nmatiere"]').val() //matière
         ,nbr=$('[name="nbre"]').val() /* OU $('#nbre').val(), vu que tu as un id pour nbre*/;
     
    	var donnee=[]
    	,id
    	,note;
    	$('#register_form1').submit(function(e){
    		e.preventDefault();
     
    		donnee=[];//rénitialiser la table "donnee" a chaque submit
     
    		$(this).find('.form-control').each(function(){
    			id=$(this).prev('input').val();//récuperer l'id de l'élève
    			note=$(this).val();	//récuperer la note
    			annee=$(this).val(); //recupere l'id de l'annee
    			mois=$(this).val(); //recupere l'id du mois
    			classe=$(this).val(); //recupere l'id de la classe
    			matiere=$(this).val(); //recupere l'id de la matiere
    			nbr=$(this).val(); //recupere le nombre d'eleve
    			donnee.push({id_eleve:id,note_eleve:note,id_annee:annee,id_mois:mois,id_classe:classe,id_matiere:matiere,nbreeleve:nbr});//ajout des items dans la table "donnee"
    		});
     
    		$.ajax({
    			url:'/appgesco/scripts/php/verif_form_enr_note_classe.php',
    			method:'post',
    			data:{d:donnee},//important/
    			dataType:'json',//important
    			cache:false,
    			success:function(s){
    				/*affiche le success dans la console*/
    				console.log('success :'+JSON.stringify(s));
    				if(s.erreur.length==0){//si y a pas d'erreur
    					/*parcourir le résultat*/
    					$.each(s.data,function(k,v){
    						console.log('id_eleve :'+v.id_eleve+", note_eleve :"+v.note_eleve);
    					});
    				}
    				else {//sinon s'il y a une erreur
    					$.each(s.erreur,function(k,v){
    						console.log(v);
    					});
    				}
    			}
    		});
     
    	});
    });
    Et voici le code côté 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    	$retour=["erreur"=>[]];
    	$data;
    	$id_eleve; $note_eleve;
    	$annee; $idmois; $idclasse; $idmatiere; $nbreeleve;
    	if(isset($_POST['d'])){		
    		$data=$_POST['d'];
    		foreach($data as $key=>$v){
    			$id_eleve=$v['id_eleve'];
    			$note_eleve=$v['note_eleve'];
    			$annee=$v['id_annee'];
    			$idmois=$v['id_mois'];
                            $idclasse=$v['id_classe'];
    			$idmatiere=$v['id_matiere'];
    			$nbreeleve=$v['nbreeleve'];
    			if(empty($id_eleve)|| empty($note_eleve)){
    				if(empty($id_eleve)){
    					array_push($retour['erreur'],['id_eleve'=>'Un id élève est vide !']);
    				}
    				if(empty($note_eleve)){
    					array_push($retour['erreur'],['note_eleve'=>'Une note est vide !']);
    				}
    			}
    		}
    		$retour['data']=$data;
    	}
     
    	echo json_encode($retour);
    Et voici le résultat après exécution
    Nom : valeurerror.jpg
Affichages : 118
Taille : 43,1 Ko

    Comme vous pouvez le constater sur la capture d'écran, c'est la valeur de la note de l'élève qui est attribué aux variables des champs cachés ($annee, $idmois, $idmatiere, $idclasse, $nbreeleve)!

    Sinon voici la vraie valeur des champs cachés avant le submit du formulaire
    Nom : vraivaleurs.jpg
Affichages : 145
Taille : 69,2 Ko

  7. #47
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    , ça c'est faux !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    annee=$(this).val(); //recupere l'id de l'annee
    	mois=$(this).val(); //recupere l'id du mois
    	classe=$(this).val(); //recupere l'id de la classe
    	matiere=$(this).val(); //recupere l'id de la matiere
    	nbr=$(this).val(); //recupere le nombre d'eleve
    tu as déjà récupéré les valeurs de (annee,mois,classe,matiere et nbr),pourquoi tu met $(this).val() ?
    tu as déjà ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var annee=$('[name="annee"]').val() //annee
         ,mois=$('[name="nmois"]').val() //mois
         ,classe=$('[name="nclasse"]').val() //classe
         ,matiere=$('[name="nmatiere"]').val() //matière
         ,nbr=$('[name="nbre"]').val() /* OU $('#nbre').val(), vu que tu as un id pour nbre*/;
    donc, il faut mettre les valeurs que tu as récupéré.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $(this).find('.form-control').each(function(){
    	id=$(this).prev('input').val();//récuperer l'id de l'élève
    	note=$(this).val();	//récuperer la note
    	donnee.push({id_eleve:id,note_eleve:note});//ajout des items dans le tableau"donnee"
    });
    /*c'est ici qu'il faut ajouter (annee,mois...) pas dans la boucle each*/
    donnee.push({id_annee:annee,id_mois:mois,id_classe:classe,id_matiere:matiere,nbreeleve:nbr});

  8. #48
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2011
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Big Up à toi cher Toufik83 ! Tu es vraiment un As du JavaScript et je ne cesserais pas de te dire MERCI!

    Il ne me reste plus que des réglages genre comment récupérer la valeur d'une seule variable comme $annee, ou $idmois ou encore $idmatiere pour pouvoir les utilisées dans les requêtes!

    Voici le code js après correction

    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
     
    $(document).ready(function(){
    	$("#register_form1").on('keyup','.form-control',function(){
    			if(!$(this).val().match(/^[0-9.]{1,5}$/)){
    				$(this).css("border-color","#ff0000")
    				.next("span.error_note")
    				.css("color", "red").html("<img src='/appgesco/images/icons/warning.png' alt='Attention' class='erreur'>");
    				console.log($(this).index());
    			}
    			else{
    				$(this).css("border-color","green")
    				.next("span.error_note")
    				.css("color", "green").html("<img src='/appgesco/images/icons/ok24.png' alt='Attention'>");
    			}
    	});
     
    	var annee=$('[name="annee"]').val() //annee
         ,mois=$('[name="nmois"]').val() //mois
         ,classe=$('[name="nclasse"]').val() //classe
         ,matiere=$('[name="nmatiere"]').val() //matière
         ,nbr=$('[name="nbre"]').val() /* OU $('#nbre').val(), vu que tu as un id pour nbre*/;
     
    	var donnee=[]
    	,id
    	,note;
    	$('#register_form1').submit(function(e){
    		e.preventDefault();
     
    		donnee=[];//rénitialiser la table "donnee" a chaque submit
     
    		$(this).find('.form-control').each(function(){
    			id=$(this).prev('input').val();//récuperer l'id de l'élève
    			note=$(this).val();	//récuperer la note
    			donnee.push({id_eleve:id,note_eleve:note,id_annee:annee,id_mois:mois,id_classe:classe,id_matiere:matiere,nbreeleve:nbr});//ajout des items dans la table "donnee"
    		});
     
    		$.ajax({
    			url:'/appgesco/scripts/php/verif_form_enr_note_classe.php',
    			method:'post',
    			data:{d:donnee},//important/
    			dataType:'json',//important
    			cache:false,
    			success:function(s){
    				/*affiche le success dans la console*/
    				console.log('success :'+JSON.stringify(s));
    				if(s.erreur.length==0){//si y a pas d'erreur
    					/*parcourir le résultat*/
    					$.each(s.data,function(k,v){
    						console.log('id_eleve :'+v.id_eleve+", note_eleve :"+v.note_eleve);
    					});
    				}
    				else {//sinon s'il y a une erreur
    					$.each(s.erreur,function(k,v){
    						console.log(v);
    					});
    				}
    			}
    		});
     
    	});
    });
    Et voici le code 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    	$retour=["erreur"=>[]];
    	$data;
    	$id_eleve; $note_eleve;
    	$annee; $idmois; $idclasse; $idmatiere; $nbreeleve;
    	if(isset($_POST['d'])){		
    		$data=$_POST['d'];
    		foreach($data as $key=>$v){
    			$id_eleve=$v['id_eleve'];
    			$note_eleve=$v['note_eleve'];
    			$annee=$v['id_annee'];
    			$idmois=$v['id_mois'];
    			$idmatiere=$v['id_matiere'];
    			$nbreeleve=$v['nbreeleve'];
    			if(empty($id_eleve)|| empty($note_eleve)){
    				if(empty($id_eleve)){
    					array_push($retour['erreur'],['id_eleve'=>'Un id élève est vide !']);
    				}
    				if(empty($note_eleve)){
    					array_push($retour['erreur'],['note_eleve'=>'Une note est vide !']);
    				}
    			}
    		}
    		$retour['data']=$data;
    	}
     
    	echo json_encode($retour);
    Sinon après les modifications apportées voici le résultat :
    Nom : resultat.jpg
Affichages : 156
Taille : 54,8 Ko

  9. #49
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    tu as ajouté les variables (annee,mois..) à l'intérieur de $.each(), c'est pour ça que tu vois des répétitions (id_annee,id_mois...) dans chaque item de s.data, pourtant je t'avais dis de les ajouter à l'extérieur.

    c'est pas grave le script fonctionne toujours mais si on parle de la qualité de code, je te dis que c'est une mauvaise pratique.

    pour l'insertion des données, tout se passe dans le fichier php.

    il est nécessaire de vérifier que la longueur de la variable $retour["erreur"] égale à 0.
    Pour cela tu peux utiliser sizeof.

    il ne faut pas que la requête ajax soit lancée si les notes ne sont pas des chiffres ou vides, y compris les autres variables que t'utiliseras dans la requête, donc tu es obliger de vérifier ça en javascript et aussi en php, sinon tu auras des erreurs.

    je te laisse réfléchir comment tu va procéder

  10. #50
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2011
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par Toufik83 Voir le message
    tu as ajouté les variables (annee,mois..) à l'intérieur de $.each(), c'est pour ça que tu vois des répétitions (id_annee,id_mois...) dans chaque item de s.data, pourtant je t'avais dis de les ajouter à l'extérieur.
    Bonjour Toufik83, je n'ai pas pretter attention sur l'ajout des variables (annee, mois, ...) à l'extérieur de la boucle each() a cause de la fatigue !

    Mais bon, chose faite avec quelques changements sur le code 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
    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
    71
    72
    73
     
    $(document).ready(function(){
    	$("#sauvegarder").attr("disabled",true);
    	$("#register_form1").on('keyup','.form-control',function(){
    			if(!$(this).val().match(/^[0-9.]{1,5}$/)){
    				$(this).css("border-color","#ff0000")
    				.next("span.error_note")
    				.css("color", "red").html("<img src='/appgesco/images/icons/warning.png' alt='Attention' class='erreur'>");
    				$("#sauvegarder").attr("disabled",true);
    				console.log($(this).index());
    			}
    			else if(($(this).val()<0) || ($(this).val()>20) || ($(this).val()=="")){
    				$(this).css("border-color","#ff0000")
    				.next("span.error_note")
    				.css("color", "red").html("<img src='/appgesco/images/icons/warning.png' alt='Attention' class='erreur'>");
    				$("#sauvegarder").attr("disabled",true);
    				console.log($(this).index());
    			}
    			else{
    				$(this).css("border-color","green")
    				.next("span.error_note")
    				.css("color", "green").html("<img src='/appgesco/images/icons/ok24.png' alt='Attention'>");
    				$("#sauvegarder").attr("disabled",false);
    			}
    	});
     
    	var annee=$('[name="annee"]').val() //annee
         ,mois=$('[name="nmois"]').val() //mois
         ,classe=$('[name="nclasse"]').val() //classe
         ,matiere=$('[name="nmatiere"]').val() //matière
         ,nbr=$('[name="nbre"]').val() /* OU $('#nbre').val(), vu que tu as un id pour nbre*/;
     
    	var donnee=[]
    	,id
    	,note;
    	$('#register_form1').submit(function(e){
    		e.preventDefault();
     
    		donnee=[];//rénitialiser la table "donnee" a chaque submit
     
    		$(this).find('.form-control').each(function(){
    			id=$(this).prev('input').val();//récuperer l'id de l'élève
    			note=$(this).val();	//récuperer la note
    			donnee.push({id_eleve:id,note_eleve:note});//ajout des items dans la table "donnee"
    		});
    		/*c'est ici qu'il faut ajouter (annee,mois...) pas dans la boucle each*/
    		donnee.push({id_annee:annee,id_mois:mois,id_classe:classe,id_matiere:matiere,nbreeleve:nbr});
     
    		$.ajax({
    			url:'/appgesco/scripts/php/verif_form_enr_note_classe.php',
    			method:'post',
    			data:{d:donnee},//important/
    			dataType:'json',//important
    			cache:false,
    			success:function(s){
    				/*affiche le success dans la console*/
    				console.log('success :'+JSON.stringify(s));
    				if(s.erreur.length==0){//si y a pas d'erreur
    					/*parcourir le résultat*/
    					$.each(s.data,function(k,v){
    						console.log('id_eleve :'+v.id_eleve+", note_eleve :"+v.note_eleve);
    					});
    				}
    				else {//sinon s'il y a une erreur
    					$.each(s.erreur,function(k,v){
    						console.log(v);
    					});
    				}
    			}
    		});
     
    	});
    });
    j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("#sauvegarder").attr("disabled",true);
    pour empêcher l'utilisateur de soumettre le formulaire en désactivant le bouton sauvegarder quand un champ est mal rempli ! Et je ne pense pas que sa soit la bonne méthode par ce que j'ai vérifié et quand un seul champ est correcte le bouton sauvegardé s'active même si les autres champs sont vides !

    En plus, après l'ajout des variables (annee, mois, classe, ...) le code php affiche des erreurs

    Code 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    	$retour=["erreur"=>[]];
    	$data;
    	$id_eleve; $note_eleve;
    	$annee; $idmois; $idclasse; $idmatiere; $nbreeleve;
    	if(isset($_POST['d'])){		
    		$data=$_POST['d'];
    		foreach($data as $key=>$v){
    			$id_eleve=$v['id_eleve'];
    			$note_eleve=$v['note_eleve'];
    			if(empty($id_eleve)|| empty($note_eleve)){
    				if(empty($id_eleve)){
    					array_push($retour['erreur'],['id_eleve'=>'Un id élève est vide !']);
    				}
    				if(empty($note_eleve)){
    					array_push($retour['erreur'],['note_eleve'=>'Une note est vide !']);
    				}
    			}
    		}
    		$annee=$v['id_annee'];
    		$idmois=$v['id_mois'];
    		$idmatiere=$v['id_matiere'];
    		$idclasse=$v['id_classe'];
    		$nbreeleve=$v['nbreeleve'];
     
    		$retour['data']=$data;
    	}
    	echo json_encode($retour);
    Capture d'écran
    Nom : erreurphp.jpg
Affichages : 148
Taille : 85,2 Ko

  11. #51
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    le bouton d'enregistrement ne doit pas être activer sauf si tout les inputs sont valides, donc il faut parcourir les inputs avec $.each.
    en plus, il te faut une expression régulière qui gère les inputs dans les cas suivants :
    - valeur=xxx. => ne pas autoriser une note qui contient 3 chiffres avant le point (virgule).
    - valeur=xx.x.x => ne pas autoriser une note qui contient plus qu'un point.
    - valeur=.xx => ne pas autoriser une note qui commence avec un point.
    - valeur=xxx. => ne pas autoriser une note qui termine avec un point .

    concernant le Php, ça t'affiche l'erreur par-ce qu'il ne trouve pas les variables $v['id_eleve'] et $v['note_eleve'] dans la clé {id_annee:'',id_mois:''...}, et c'est logique.

    pour éviter l'erreur il faut s'assurer de l'existence de ces deux variables avec isset(), donc le fichier php doit être modifier en ajoutant un isset dans la boucle foreach.
    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
     
    foreach($data as $key=>$v){
    	if(isset($v['id_eleve']) && isset($v['note_eleve'])){
    		$id_eleve=$v['id_eleve'];
    		$note_eleve=$v['note_eleve'];
    		if(empty($id_eleve)||empty($note_eleve)){
    			if(empty($id_eleve)){
    				array_push($retour['erreur'],['id_eleve'=>'Un id élève est vide !']);
    			}
    			if(empty($note_eleve)){
    				array_push($retour['erreur'],['note_eleve'=>'Une note est vide !']);
    			}
     
    		}
    	}
    }

  12. #52
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2011
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Bonjour la communauté,

    Je sais suis resté longtemps sans apporter de réponse pour la suite de la discussion!

    Bon finalement j'ai opté pour une solution PHP en utilisant un formulaire auto invoquant, mais j'ai tout de même utiliser le JavaScript pour guider l'utilisateur lors de la saisie côté client dont voici le code:
    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
     
    $(document).ready(function(){
    		//$("#sauvegarder").attr("disabled",true);
    	$("#register_form1").on('keyup','.form-control',function(){
    		if(!$(this).val().match(/^[0-9.]{1,5}$/)){
    			$(this).css("border-color","#ff0000")
    			.next("span.error_note")
    			.css("color", "red").html("<img src='/appgesco/images/icons/warning.png' alt='Attention' class='erreur'>xx.xx");
    			$("#sauvegarder").attr("disabled",true);
    			console.log($(this).index());
    		}
    		else if(($(this).val()<0) || ($(this).val()>20)){
    			$(this).css("border-color","#ff0000")
    			.next("span.error_note")
    			.css("color", "red").html("<img src='/appgesco/images/icons/warning.png' alt='Attention' class='erreur'>xx.xx");
    			$("#sauvegarder").attr("disabled",true);
    			console.log($(this).index());
    		}
    		else{
    			$(this).css("border-color","green")
    			.next("span.error_note")
    			.css("color", "green").html("<img src='/appgesco/images/icons/ok24.png' alt='Attention'>");
    			$("#sauvegarder").attr("disabled",false);
     
    		}
    	}); 
    });
    Voici le code de mon formulaire qui contient du code PHP mais c'est juste pour guider les futures lecteurs de cette discussion:

    Code HTML : 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
     
    	<div class="row">
    								<div class="col-sm-12 col-md-10 col-lg-8">
    									<?php
                                                                                    require_once("../scripts/php/verif_form_enr_note_classe.php");
                                                                            ?>
    									<form name="fiche" method="POST" action="" id="register_form1">
    									<table class='table' align="center" width=80%>
    										<thead><tr><th></th><th>Matricule</th><th>Prénoms et Noms</th><th>Notes</th></tr></thead>
    										<tbody><?php
                                                                                            while($replcl=$lcl->fetch_assoc()){ $idelev=$replcl['id_elev'];                                                                                                                                 ?>
    												<tr><td><?php echo $n++; ?></td>
    													<td><?php 
                                                                                                                    $sqlpn=$connexion->query("SELECT num_mat_elev, prenom_elev, nom_fam_elev FROM eleves WHERE id_elev='".$idelev."'");
                                                                                                                    if(!$sqlpn){ ?>
    															<script type="text/javascript">
                                                                                                                                    $("#error-info").css("color","#ffffff").html("<div class='col-md-12 alert-danger text-center'><h4><i class='glyphicon glyphicon-warning-sign'></i> Une erreur interne s'est produite! Code : note247</h4></div>"); 
                                                                                                                            </script><?php
                                                                                                                    }else{
                                                                                                                            if(mysqli_num_rows($sqlpn)>=1){ 
                                                                                                                                    while($repsqlpn=$sqlpn->fetch_assoc()){ $matricule=$repsqlpn['num_mat_elev']; $prenom=$repsqlpn['prenom_elev']; $nom=$repsqlpn['nom_fam_elev']; echo $matricule;        }                                                                                                                               
                                                                                                                            }
                                                                                                                            elseif(mysqli_num_rows($sqlpn)==0){ echo'Liste vide'; }
                                                                                                                    } ?></td>
    													<!-- Prénoms et Noms de l'élève -->
    													<td><?php 
                                                                                                                    echo $prenom.' '.$nom;
                                                                                                                      ?>
    													</td>
    													<!-- Note -->
    													<td width=100>
    														<input type="hidden" name="ide<?php echo $j++; ?>" value="<?php echo $idelev; ?>">
    														<input  type="text" class="form-control" id="note" name="note<?php echo $k++; ?>" value="" placeholder="Note">
    														<span id="error_note<?php //echo $l++; ?>" class="error_note"></span>
    													</td>
    												</tr><?php
                                                                                            } ?>
     
    										</tbody>
    									</table>
    										<input type="hidden" name="annee" value="<?php echo $anant; ?>">
    										<input type="hidden" name="nmois" value="<?php echo $nmois; ?>">
    										<input type="hidden" name="nclasse" value="<?php echo $classe; ?>">
    										<input type="hidden" name="nmatiere" value="<?php echo $nmatiere; ?>">
    										<input type="hidden" name="nbre" value="<?php echo $nbre; ?>" id="nbre">
    										<input type="submit" name="sauvegarder" value="Enregistrer" id="sauvegarder" class="btn btn-primary pull-right">
    										<img id="charge" src="/images/animee/chargeur1.gif"/>
    									</form>
    								</div>
    							</div>

    Mes excuses pour la présence du code PHP dans une discussion Jquery voilà pourquoi je vous épargne le reste du code PHP que j'ai utilisé pour le traitement et qui est vraiment du lourd !

    Merci à vous pour vos différentes réponses !

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/04/2018, 02h12
  2. [MySQL] Insertion de données en bdd avec un nombre de champs variables
    Par spawns dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 22/05/2015, 16h52
  3. Récupérer les données d'un formulaire avec un nombre de champs similaires évolutifs
    Par jimmyneutron dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/03/2012, 23h14
  4. Peupler un formulaire avec un nombre de checkbox variables
    Par la_praline dans le forum Struts 1
    Réponses: 1
    Dernier message: 29/12/2011, 09h45
  5. Interface avec un nombre de champs variable
    Par vladvad dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/06/2007, 11h19

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