Erreur de validation name="value[]" (POST tableaux)

Résolu/Fermé
Xidy Messages postés 82 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 19 juillet 2014 - 11 déc. 2012 à 10:30
Xidy Messages postés 82 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 19 juillet 2014 - 13 déc. 2012 à 15:00
Bonjour,

Je tente désespérément de résoudre mon problème de validation jQuery lorsque j'ai un name="value[]" (pour passer des tableaux en POST )

Je reçoit de mon plugin (le jquery.validationEngine) un unrecognized expression [name=envois[]]

Une idée pour obtenir ma validation correctement? (petite précision, elle marche lorsque je fais des POST classiques comme name="nom"

Merci ;-)


4 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 déc. 2012 à 10:47
en javascript on ne peut pas mettre de name="xxxx[]"

les crochets ont d'autres fonctionnalités en javascript.
0
Xidy Messages postés 82 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 19 juillet 2014 3
Modifié par Xidy le 11/12/2012 à 11:02
Le problème c'est que j'ai besoin de ces crochets.

J'ai un tableau généré depuis une requête mysql ou je peux modifier chaque case (tableau d'adition ligne par ligne) et je récupère le tout avec un POST.

Puis je fais un foreach sur par exemple "envois" si j'ai name="envois[]"

Maintenant si je peux réaliser la même chose avec mon post sans utiliser [] je suis preneur mais jusque là je n'ai rien trouvé. J'ai même tenté des trucs farfelus du style {} ou... et si je ne mets rien (name="envois") alors mon

foreach ($_POST['envois'] as $envoi => $value)
{
array_push ($tabenvoi, $value);
}

ne marche pas.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 déc. 2012 à 13:37
une solution en utilisant les id qui doivent être différents pour chaque input
en javascript sans utiliser jQuery
<html>
<head>
<script type="text/javascript">

function verif_champs(){
	//verif champ nom
	var nom=document.getElementById('nom');
	if(nom.value ==""){
		alert("Vous devez remplir le champ nom");
		nom.focus();
		return false; //empeche l'envoi du formulaire
	}
	//verif champ prenom
	var prenom=document.getElementById('prenom');
	if(prenom.value ==""){
		alert("Vous devez remplir le champ prenom");
		prenom.focus();
		return false;
	}
	//verif des champs envoi
//lecture du nombre dans le champ caché
	var nb_envoi=document.getElementById('nb_envoi').value;
	for(i=1;i<=nb_envoi;i++){
		var champ=document.getElementById('envoi_'+i);
		if(champ.value==""){
			alert("Vous devez remplir tous les champs envoi");
			champ.focus();
			return false;
		}
	}
	//si on est arrivé la c'est que tout et ok
	return true;
}

</script>
</head>
<form name="form1" id="form1" action="..." method="post" onsubmit="return verif_champs();" >
<input type="text" name="nom" id="nom" value="" />
<input type="text" name="prenom" id="prenom" value="" />
<input type="text" name="envoi[]" id="envoi_1" value="" />
<input type="text" name="envoi[]" id="envoi_2" value="" />
<input type="text" name="envoi[]" id="envoi_3" value="" />
<input type="text" name="envoi[]" id="envoi_4" value="" />
<input type="text" name="envoi[]" id="envoi_5" value="" />
<input type="hidden" name="nb_envoi[]" id="nb_envoi" value="<?php echo $nbr; ?>" />
<!-- ci dessus $nbr contient le nombre de lignes envoi tu dois pouvoir le trouver au moment de la generation des input depuis ta BDD (un compteur ou autre)-->

<input type="submit" name="envoyer" value="Envoyer" />
</form>

</html>
0
Xidy Messages postés 82 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 19 juillet 2014 3
13 déc. 2012 à 15:00
Re, oui en effet c'est la solution, passer par des id, j'ai modifié le jquery.validation pour utiliser les id et c'est bon (reste un ou 2 détails à régler mais c'est exploitable^^)

Par contre je me retrouve avec des

class="validate[required,custom[onlyNumberDecimalAllowed]] text-input nb"

et W3C n'apprécie pas les [ ] je suppose que ça je ne peux pas l'éviter? (sans rechanger tout le js de validation).

Merci!
0