Séparation des données venant du formulaire

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 : Séparation des données venant du formulaire

par AB » 29 sept. 2007, 19:59

Dans l'exemple montré plus haut $coatch retourne un tableau.

la fonction count() si tu veux connaitre le nombre d'élement d'un tableau

Ensuite foreach() par exemple pour lister les éléments d'un tableau

par Sebe » 29 sept. 2007, 09:50

Salut AB,

Grâce à ce que tu me mets ici, je me demande si je ne suis pas occupé à me planter !

Ne serait ce pas plus facile de stocker les différents 'username' plutôt que de m'amuser à essayer de récupérer l'id dans un champ caché !
Bien sûr, je devrais comparer les 'username' quand le moment sera venu de savoir si cet utilisateur est déclaré comme coach mais ce sera plus simple dans le traitement, non ?
Il y a quand même un truc qui me chiffonne, c'est que le nombre de coach n'est, au départ, pas connu.
$coatch[0] = //premier coatch
$coatch[1] = //second coatch
$coatch[2] = //troisième coatch
...
$coach[n] = //n ieme coach
Comment en déterminer le nombre ? Faudrait-il faire un décompte de clics ou de virgule (+1)?

Merci

par AB » 28 sept. 2007, 13:36

Si j'ai bien compris avec le code que je t'ai fait précédemment, tu vas récupérer le contenu de ton select dans l'input "affichage" et cette valeur sera constituée d'une serie de noms séparés par une virgule.

Tu pourras donc récupérer son contenu en php par
$liste_coatch = isset($_POST['affichage'])? $_POST['affichage'] : '';

//ensuite il te reste à faire 
$coatch = explode(',' , $liste_coatch);

//ce qui te permettras de récupérer un tableau contenant les différents coatchs
$coatch[0] = //premier coatch
$coatch[1] = //second coatch
$coatch[2] = //troisième coatch etc.
Si tu as supprimé la virgule et que tu l'a remplacée par un espace entre les différents noms
il te suffit de faire
$coatch = explode(' ' , $liste_coatch);

par Sebe » 28 sept. 2007, 11:36

Salut,

Je n'avais pas mis mon formulaire à dispo car j'ai déjà un post en cour et j'ai voulu traité les problèmes un à un (note les problèmes sont surtout du au fait que je ne suis pas programmeur et que j'apprends sur le tas donc à chaque fois de grandes découvertes).

Voici mon code html:
<form id="coaching" name="coaching" method="post" action="<?php //echo $_SERVER['PHP_SELF']?>">
<input type="text" name="affichage" id="coach" value="" readonly />
<input type="text" name="id_coach" id="id_coach"/> 
<input type="reset" name="Submit2" value="Réinitialiser" onClick="document.forms.coaching.reset()" />
<input name="submit2" type="submit" value ="ok" />
<select name="menu" size="5" onchange="input_fich(menu.options[selectedIndex].value)">
<option value="" disabled="disabled" selected="selected"></option>
<?php
	if ( count($coach) > 0 ){
	foreach ($coach as $coachlist){
?>
<option value="<?php echo $coachlist->username .',' .$coachlist->id;?>"><?php echo $coachlist->username;?></option>
<?php
	}// foreach
	}// if
?>
</select>
</form>
Et avec tout cela, je vais pouvoir enregistrer les coachs d'un utilisateur dans des tables qui viennent d'être modélisées sur ce site :roll:

Merci

par d0m » 28 sept. 2007, 11:29

tu fais bien l'appel à ta fonction javascript dans la liste déroulante?
<SELECT NAME="coach" onChange="changerCoach();">
......

par Sebe » 28 sept. 2007, 11:24

Salut,
Le regexp n'est pas utile pour la fonction split, un simple caractère suffit :
Voilà la fonction sera déjà un peu plus simple :lol:
Si le résultat n'est pas cohérent, vérfie dans le code source html généré que ta valeur est correcte :)
En faite, la sélection se fait correctement mais toujours avec un tour de retard ... je m'explique !
Je sélectionne dans ma liste George (64)
la réaction se fait mais les 2 'alert' qui s'affichent sont vides !
Maintenant, je sélectionne Edouard (42)
la réaction se fait mais le 1er alert m'affiche 'George' et le 2e '64' puis plus rien !
Maintenant, je sélectionne André (88)
la réaction se fait mais le 1er alert m'affiche 'George', le 2e '64', le 3e 'Edouard' et le 4e '42' et puis puis plus rien !
... jamais la dernière sélection !
Le but étant de faire un tri pour renvoyer dans le bon champ avant d'enregistrer le formulaire !

Merci

par Ryle » 28 sept. 2007, 11:09

Le regexp n'est pas utile pour la fonction split, un simple caractère suffit :
// pour récupérer la valeur d'un select en restant compatible avec n'importe quel navigateur
var content_coach = document.getElementById("coach").options[document.getElementById("coach").selectedIndex].value; 

var tableau = content_coach.split(','); 
  
alert ("Login : " + tableau[0]); 
alert ("Id : " + tableau[1]); 
Si le résultat n'est pas cohérent, vérfie dans le code source html généré que ta valeur est correcte :)

Séparation des données venant du formulaire

par Sebe » 28 sept. 2007, 10:47

Bonjour,

J'ai un petit soucis pour un renvois de données au bon endroit dans mon formulaire ... avec une méthode de sélection, je récupère un utilisateur et son id:
<option value="<?php echo $coachlist->username .',' .$coachlist->id;?>"><?php echo $coachlist->username;?></option>
et j'aimerai renvoyer l'username dans un champ visible et l'id dans un champ caché ... juste pour que ce soit propre !

Avec une fonction JS, j'arrive à virer la virgule mais pour séparer l'username et l'id cela devient n'importe quoi ... j'essaye d'afficher dans un 'alert' afin de voir si c'est correcte mais il n'y a jamais le dernier enregistrement ! Ce qui aussi très surprenant quand c'est le 1er !!!
J'en suis pas très loin:

Code : Tout sélectionner

var content_coach = document.getElementById("coach").value; var reg = new RegExp(","); //alert ("regle " + reg); var tableau = content_coach.split(reg); for (var i=0; i<tableau.length; i++) { alert (tableau[i]); }
et déjà n'importe quoi !

Quelqu'un peut-il m'aider sur ce coup ?
Merci