erreur de fromulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : erreur de fromulaire

par d0m » 01 août 2007, 16:33

Merci ca fonctionne maintenant :D
ton formulaire s'appelle "form_creer_modele" et pas "formulaire" et la seconde c'est l'accès à un champ dont le nom comporte des crochets.:)
formulaire n'est pas le nom du formulaire, c'est le formulaire passé en paramètre à la fonction (this.form) pour éviter que plus rien ne marche si le formulaire change de nom. J'avais déjà utilisé cette méthode dans une autre page et ça fonctionnait sauf qu'il ne fallait pas mettre document. avant. Mais là bizarrement ça ne fonctionne pas.

par Ryle » 01 août 2007, 16:04

Alors deux choses qui ne vont pas.. la première c'est que ton formulaire s'appelle "form_creer_modele" et pas "formulaire" et la seconde c'est l'accès à un champ dont le nom comporte des crochets.

Je ne sais pas s'il y a un moyent plus simple, mais personnellement pour accéder à ce genre de champ, je passe par le tableau "elements" du formulaire en lui passant la chaine correspondant au nom de mon champ :

Code : Tout sélectionner

document.formulaire.elements['nomDuChamp[]'].value
Dans ton cas, il suffirait donc de rajouter dynamiquement l'id du champ dans la chaine :

Code : Tout sélectionner

document.formulaire.elements['nomDuChamp['+id+']'].value
Y a peut être plus simple, mais en tout cas, comme ça, ça fonctionne :)

par d0m » 01 août 2007, 09:38

voilà une partie du code source :
<html>
<head>
<title>
</title>
<LINK REL="stylesheet" TYPE="text/css" HREF="css/tableauBord.css">

<script language="JavaScript">
	
	function enregistrerModele(){
		if(confirm("Voulez vous vraiment enregistrer le modele ? ")){
			return true;
		}
		else return false;
	}
	
	function monter(formulaire,numeroOrdre){
		if(document.getElementById(numeroOrdre-1)){
			var contenu1 = document.getElementById(numeroOrdre).innerHTML;
			var contenu2 = document.getElementById(numeroOrdre-1).innerHTML;
			document.getElementById(numeroOrdre-1).innerHTML = contenu1;
			document.getElementById(numeroOrdre).innerHTML = contenu2;
			var tmp = numeroOrdre-1;
			alert(tmp + ';' + numeroOrdre);
			document.formulaire.ordre[tmp].value = contenu1;
			document.formulaire.ordre[numeroOrdre].value = contenu2;
		}
	}
	
	function descendre(formulaire,numeroOrdre){
		if(document.getElementById(numeroOrdre+1)){
			var contenu1 = document.getElementById(numeroOrdre).innerHTML;
			var contenu2 = document.getElementById(numeroOrdre+1).innerHTML;
			document.getElementById(numeroOrdre+1).innerHTML = contenu1;
			document.getElementById(numeroOrdre).innerHTML = contenu2;
			var tmp = numeroOrdre+1;
			alert(tmp + ';' + numeroOrdre);
			document.formulaire.ordre[tmp].value = contenu1;
			document.formulaire.ordre[numeroOrdre].value = contenu2;
		}
	}
</script>
<body>
<form name="form_creer_modele">
<table>
  <tr><td CLASS="intituleTableau" id="0" width="300">Les syst&egrave;mes d'exploitation</td>
      <td><IMG SRC="images/fleche_haut1.gif" onclick="monter(this.form,0)" CLASS="imageMonterDescendre"></td>
      <td><IMG SRC="images/fleche_bas1.gif" onclick="descendre(this.form,0)" CLASS="imageMonterDescendre"></td>
  </tr>
<INPUT TYPE="HIDDEN" name="ordre[0]" value="OS">
  <tr><td CLASS="intituleTableau" id="1" width="300">Les disponibilit&eacute;s</td>
      <td><IMG SRC="images/fleche_haut1.gif" onclick="monter(this.form,1)" CLASS="imageMonterDescendre"></td>
      <td><IMG SRC="images/fleche_bas1.gif" onclick="descendre(this.form,1)" CLASS="imageMonterDescendre"></td>
  </tr>
<INPUT TYPE="HIDDEN" name="ordre[1]" value="dispo">
  <tr><td CLASS="intituleTableau" id="2" width="300">Les liaisons Internet</td>
      <td><IMG SRC="images/fleche_haut1.gif" onclick="monter(this.form,2)" CLASS="imageMonterDescendre"></td>
      <td><IMG SRC="images/fleche_bas1.gif" onclick="descendre(this.form,2)" CLASS="imageMonterDescendre"></td>
  </tr>
<INPUT TYPE="HIDDEN" name="ordre[2]" value="liaisons_internet">
</table>
et l'erreur se produit en cliquant sur un des boutons monter/descendre de ln'importe quel élement

par Ryle » 31 juil. 2007, 23:31

Fais voir le code source qui est généré et dis nous quelles actions tu as fait pour avoir l'erreur :)

par d0m » 31 juil. 2007, 16:18

merci pour le cast, j'avais fais ca vite fait en solution de secours.

J'ai testé les valeurs et pour 3 élements cela reste bien entre 0 et 2 pour les 2 (tmp et numeroOrdre).

Et en affichant le tableau $_REQUEST['ordre'], j'ai bien un tableau avec comme index 0,1 et 2.
Bref la concordance d'index est bien là

par Ryle » 31 juil. 2007, 15:58

arf, pour le +1/-1 c'est parce c'est une chaine que tu passes en paramètre de la fonction et pas un nombre.. vire les apostrophes utilisée en javascript autour de $num_ordre, et tu n'auras plus le problème :) (bon par contre, faut obligatoirement une valeur numérique à $num_ordre, c'est à dire un 0 et pas vide)
Sinon tu peux aussi utiliser la fonction parseInt() de javascript pour convertir une chaine en sa valeur numérique :)

Pour l'alert c'est pas si le champ existe que je veux que tu testes (puisqu'il te fait une erreur en te disant qu'il n'existe pas), mais les valeurs de tes index pour savoir si jamais tu n'interroges pas la position 7 alors que tu n'as que 6 champs, ou là position -1 alors qu'elle n'existe pas.. :)

par d0m » 31 juil. 2007, 15:21

Colle une alert pour afficher les valeurs de tmp et numeroOrdre au moment ou tu modifies tes champs hidden.. à tout les coups c'est un index hors limites :)
j'ai collé déjà une alerte sur document.formulaire.ordre et il m'affiche undefined.
Et euh.... question bête : "numeroOrdre = num", c'est pas plus simple que "numeroOrdre = num-1+1;" ? ;)
Lol je sais j'ai un peu l'air d'un fou avec ça mais c'est une méthode pour forcer le type de numeroOrdre en entier, sinon à la ligne d'en dessous en faisant numerOrdre+1, il me concatene les 2 en chaine.

par Ryle » 31 juil. 2007, 15:12

Colle une alert pour afficher les valeurs de tmp et numeroOrdre au moment ou tu modifies tes champs hidden.. à tout les coups c'est un index hors limites :)

Et euh.... question bête : "numeroOrdre = num", c'est pas plus simple que "numeroOrdre = num-1+1;" ? ;)

erreur de fromulaire

par d0m » 31 juil. 2007, 15:08

Bonjour,

j'ai une erreur javascript au niveau de mon fomulaire simple :
foreach($elements as $num_ordre => $element){
  echo '<INPUT TYPE="HIDDEN" name="ordre['.$num_ordre.']" value="'.$element.'">'."\n";
  echo '<IMG SRC="..." onclick="monter(this.form,\''.$num_ordre.'\')">';
  echo '<IMG SRC="..." onclick="descendre(this.form,\''.$num_ordre.'\')">'; 
}
à "coté" de chacun de ses champs hidden, j'ai 2 boutons monter et descendre pour changer l'ordre des éléments par du javascript.

Voici le code javascript :

Code : Tout sélectionner

function monter(formulaire,numeroOrdre){ if(document.getElementById(numeroOrdre-1)){ var contenu1 = document.getElementById(numeroOrdre).innerHTML; var contenu2 = document.getElementById(numeroOrdre-1).innerHTML; document.getElementById(numeroOrdre-1).innerHTML = contenu1; document.getElementById(numeroOrdre).innerHTML = contenu2; var tmp = numeroOrdre-1; document.formulaire.ordre[tmp].value = contenu1; document.formulaire.ordre[numeroOrdre].value = contenu2; } } function descendre(formulaire,num){ var numeroOrdre = num-1+1; if(document.getElementById(numeroOrdre+1)){ var contenu1 = document.getElementById(numeroOrdre).innerHTML; var contenu2 = document.getElementById(numeroOrdre+1).innerHTML; document.getElementById(numeroOrdre+1).innerHTML = contenu1; document.getElementById(numeroOrdre).innerHTML = contenu2; var tmp = numeroOrdre+1; document.formulaire.ordre[tmp].value = contenu1; document.formulaire.ordre[numeroOrdre].value = contenu2; } }
en même temps, le contenu du div contenant le nom de l'element change en montant ou descendant. Ceci marche, par contre la valeur du champ hidden ne change pas, et j'ai cette erreur :

Code : Tout sélectionner

document.formulaire.ordre a la valeur Null ou n'est pas un objet...
C'est pourtant le bon nom des champs hidden...
je vois pas et vous?