8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

j'ai un formulaire généré par l'utilisateur, ce formulaire contient de nombreuses lignes dans lesquelles se trouvent des champs input avec un ID/name de type : nomchamp_i ou i est incrémenté à chaque ligne.

Le problème c'est que les lignes peuvent être supprimé, donc j'ai stocké dans un array la liste des numéro valide.
Par exemple s'il y a 4 lignes et que la première a été supprimé ça me donne (2,3,4).

Je voulais créer un input hidden afin d'y stocker mon tableau et y accéder avec la page php qui va traiter les données mais je ne sais pas du tout comment faire...

Merci d'avance pour les pistes que vous pourrez me donner.
Modifié par korxx (19 Jul 2010 - 15:57)
StudioTchio a écrit :
Bonjour

Regarde les fonctions serialize et unserialize qui permettent de transformer un array en string et inversément



Ce sont des fonctions php non ? ( mon Array est en javascript. )

J'ai trouvé sur le net des fonction serialize en javascript mais je sais pas ce que ca vaut...

Sinon je pense que mon topic a plus sa place dans le topic javascript, je l'ai donc recréé labas :

http://forum.alsacreations.com/topic-5-49970-1-Array-Javascript-et-formulaire-POST.html

Il faudrait supprimer celui-ci.
Modifié par korxx (19 Jul 2010 - 15:51)
Hello,

Perso je traiterais plus ce genre de trucs côté serveur, pasque je suis parano et qu'on peut, dans ce que tu veux, envoyer à php de mauvais champs à traiter.


Tu peux utiliser la fonction toString des tableaux Javascript.

<script type="text/javascript">

var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.write(fruits.toString()); // écrit: Banana,Orange,Apple,Mango
</script>


Donc, lors de la soumissions de ton formulaire, tu mets le contenu de ton tableau dans un input hidden :

var inp = document.getElementById('<id du input hidden>');
inp.value = tonTableauDeChamps.[url=http://www.w3schools.com/jsref/jsref_toString_array.asp]toString[/url]();


Voilà, ensuite côté serveur, si ta balise input hiddent avait comme name 'champs_a_valider' , tu la récupères comme suit :


/* ici tu fais des vérifications d'usage de sécurité */
$numChamps = [url=http://php.net/explode]explode[/url]( ',' , $_REQUEST['champs_a_valider'] );


voilà, comme ça ton tableau numChamps contient ça dans mon exemple :
Array
(
    [0] => Banana
    [1] => Orange
    [2] => Apple
    [3] => Mango
)


Mais dans ton exemple bien sur un aura ça :

Array
(
    [0] => 2
    [1] => 3
    [2] => 3
)


voilà !
Modifié par niahoo (19 Jul 2010 - 16:00)
niahoo a écrit :
Hello,

Perso je traiterais plus ce genre de trucs côté serveur, pasque je suis parano et qu'on peut, dans ce que tu veux, envoyer à php de mauvais champs à traiter.


Tu peux utiliser la fonction toString des tableaux Javascript.

<script type="text/javascript">

var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.write(fruits.toString()); // écrit: Banana,Orange,Apple,Mango
</script>


Donc, lors de la soumissions de ton formulaire, tu mets le contenu de ton tableau dans un input hidden :

var inp = document.getElementById('<id du input hidden>');
inp.value = tonTableauDeChamps.[url=http://www.w3schools.com/jsref/jsref_toString_array.asp]toString[/url]();


Voilà, ensuite côté serveur, si ta balise input hiddent avait comme name 'champs_a_valider' , tu la récupères comme suit :


/* ici tu fais des vérifications d'usage de sécurité */
$numChamps = [url=http://php.net/explode]explode[/url]( ',' , $_REQUEST['champs_a_valider'] );


voilà, comme ça ton tableau numChamps contient ça dans mon exemple :
Array
(
    [0] => Banana
    [1] => Orange
    [2] => Apple
    [3] => Mango
)


Mais dans ton exemple bien sur un aura ça :

Array
(
    [0] => 2
    [1] => 3
    [2] => 3
)


voilà !




Merci beaucoup !!

J'etais en train de voir quasi la même solution sauf qu'au lieu d'utiliser toString la personne utilisait une autre fonction (join)

delimiter = '^';
var myPostString = myArray.join(delimiter);

puis ensuite coté php de nouveau la fonction explode


Je sais pas laquelle est la mieux ça me semble kif kif, je vais utiliser ta solution Smiley smile

Merci encore Smiley cligne
c'est kif kif effectivement, (mais pas 100% équivalent), ici toString correspond à join(',').

Join peut donc te permettre d'utiliser autre chose que la virgule dans ta chaine pour faire explode avec ce même caractère. (utile si ton tableau javascript contient des chaînes avec des virgules. ici il ne contient que des chiffres, donc pas important )

@+
Salut,

Pourquoi ne pas utilisé de tableau pour le formulaire ?
<input name="mon_champ[1]" ... />

En php tu aura un tableau qui ressemble à
Array
(
	[mon_champ] =>
	(
		[1] => "la valeur"
	)
)


Il suffira d'utilisé foreach pour parcourir le tableau et récupéré la correspondance clé/valeur.
Remarque intéréssante mais dans mon cas je ne crois pas que ce soit possible...


en fait j'ai plusieurs types de ligne qui sont généré par l'utilisateur :

par exemple une ligne type 1 a 3 formulaire, un texte, un prix, une quantité
une ligne type 2 a 4 formulaire, un id_produit, un coeff, un prix, une quantité

Du coup je crois pas pouvoir m'en sortir avec un foreach vu que les index de tableau ne vont pas avancer en même temps selon les formulaires ?
Modifié par korxx (19 Jul 2010 - 16:28)
jo_link_noir a écrit :
Salut,

Pourquoi ne pas utilisé de tableau pour le formulaire ?
<input name="mon_champ[1]" ... />

En php tu aura un tableau qui ressemble à
Array
(
	[mon_champ] =>
	(
		[1] => "la valeur"
	)
)


Il suffira d'utilisé foreach pour parcourir le tableau et récupéré la correspondance clé/valeur.




Après un peu de recherche ce serait peut être possible en utilisant foreach sur le champ m'indiquant le type de ligne (il est donc présent à tous les coup) et ensuite gérer les autres champs grâce à next mais ça me semble tendu...
Une seul décalage au niveau du pointeur interne et j'ai mes données qui vont plus avoir ni queue ni tête...

edit :

C'est pas possible, si next tombe sur une valeur null ou égale à 0 il renvoi False...


Ceci dit la solution avec toString et explode marche parfaitement Smiley smile
Modifié par korxx (19 Jul 2010 - 17:00)
ben faut jouer avec les noms.

j'avais fait un truc du style pour une mairie y a un an, on pouvait cliquer pour ajouter des champs textes dans un formulaire, et en dessous de chacun de ces champs on pouvait cliquer un bouton pour créer des champs enfants.

Ce qui fait que mes champs enfants avaient une règle de nommage bien précise :

"nom-de-type-de-champ_<N° du champ>" pour les parents et "nom-de-type-de-champ_<N° du champ>_<N° du parent>" pour les enfants.

Les numéros étaient générés dynamiquement au fur et à mesure de l'ajout de champs, en partant de 0 (partir de 1 ça me fait des bugs Smiley bawling systématiquement)


n'oublies pas que grâce à la fonction explode tu peux découper le name d'un input, ce qui te permet donc de mettre tout plein d'infos dans cet attribut.


a écrit :
Ceci dit la solution avec toString et explode marche parfaitement


Yabon !
Modifié par niahoo (19 Jul 2010 - 17:04)