[RESOLU] Problème $_POST + Checkboxes

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 : [RESOLU] Problème $_POST + Checkboxes

Re: Problème $_POST + Checkboxes

par BJkGkh » 25 nov. 2013, 20:20

Oui, comme j'ai dit ça fait le job, en tout cas, merci pour les réponses de tout le monde, ça m'a quand même aidé et puis on prends un peu plus de connaissances au passage! :D

Re: Problème $_POST + Checkboxes

par franckm » 25 nov. 2013, 15:41

Donc le problème venait bien de ce que je te disais : tu créais une valeur targetId à chaque itération avec le même nom.
Il fallait construire un tableau.

Ca marche ? c'est le principal...

Re: Problème $_POST + Checkboxes

par BJkGkh » 25 nov. 2013, 07:08

Me revoilà, donc ça ne marche toujours pas, j'ai mis un petit "alert(d);" dans mon js et j'obtiens bien toutes les cases cochées:

http://www.upimg.fr/ih/uav6.jpg

Mais je n'arrive toujours pas à récupérer le truc complet (le bloc complet) pour l'explode avec la virgule en PHP après...


EDIT: Après avoir tenté un truc (Franchement, j'y croyais pas) Et bien ça fonctionne !!!!!!

J'ai juste ajouté et modifié ce qu'il y a d'encadré en rouge:

http://www.upimg.fr/ih/rz0x.jpg

Mon post ressemble à ça à la source: groupId=1&targetIds=636997%2C736925%2C524404%2C39755 et comme ça en parsé:
groupId:1
targetIds:636997,736925,524404,39755

un explode plus tard, j'obtiens, tada:

http://www.upimg.fr/ih/1wxg.jpg

Je sais pas si c'est propre mais ça fait le job!

Re: Problème $_POST + Checkboxes

par sirakawa » 23 nov. 2013, 13:45

un exemple:
<html>
<body>
<form method = "post" action= "agir.php">
	<table border ='1'>
		<tr>
			<td><input type="checkbox" name = "choisis[]" />
			<input type = "text" name ="noms[]" readonly ="readonly" value ="Toto" />
			<input type="hidden" name ="ids[]" value ="1" />   
			</td>
			<td><input type="checkbox" name = "choisis[]" />
			<input type = "text" name ="noms[]" readonly ="readonly" value ="Tonton" />
			<input type="hidden" name ="ids[]" value ="2" />   
			</td>			
			
		</tr>	
		<tr>
			<td><input type="checkbox" name = "choisis[]" />
			<input type = "text" name ="noms[]" readonly ="readonly" value ="Exvoto" />
			<input type="hidden" name ="ids[]" value ="3" />   
			</td>
			<td><input type="checkbox" name = "choisis[]" />
			<input type = "text" name ="noms[]" readonly ="readonly" value ="Grignotons" />
			<input type="hidden" name ="ids[]" value ="4" />   
			</td>			
		</tr>		
		<tr>
			<td><input type="checkbox" name = "choisis[]" />
			<input type = "text" name ="noms[]" readonly ="readonly" value =" Gabriel Exvoto" />
			<input type="hidden" name ="ids[]" value ="5" />   
			</td>
			<td><input type="checkbox" name = "choisis[]" />
			<input type = "text" name ="noms[]" readonly ="readonly" value ="Serge Grignotons" />
			<input type="hidden" name ="ids[]" value ="6" />   
			</td>			
		</tr>				<tr>
			<td><input type="checkbox" name = "choisis[]" />
			<input type = "text" name ="noms[]" readonly ="readonly" value ="Marc Exvoto" />
			<input type="hidden" name ="ids[]" value ="7" />   
			</td>
			<td><input type="checkbox" name = "choisis[]" />
			<input type = "text" name ="noms[]" readonly ="readonly" value ="Pierre Grignotons" />
			<input type="hidden" name ="ids[]" value ="8" />   
			</td>			
		</tr>
		<tr>
			<td><button name ="bouton" value ="1">Accepter</button></td>
			<td><button name ="bouton" value ="2">&Eacuteliminer</button></td>
			<td><button name ="bouton" value ="3">Refuser</button></td>
		</tr>			
	</table>

</form>
</body>
et
<?PHP

function traitement ($action, $choisis)
{
	$noms = $_POST['noms'];
	$ids = $_POST['ids'];
	print_r($choisis);
	$rang = 0;
	foreach ($choisis as $choisi)
	{
		var_dump ($choisi);
		if ($choisi == "on")
		{
			$id_a_traiter = $ids[$rang];
			$nom_a_traiter = $noms[$rang];	
	print "<br>$id_a_traiter $nom_a_traiter";		
		}
	$rang ++;
	}


}
$choisis = isset($_POST['choisis']) ? $_POST['choisis'] : false;
if ($choisis !== false)
{
	
	
	$action = $_POST['bouton'];
	$z = traitement($action, $choisis);
}
else 
{
	print "Aucun nomn'a été chosi";	
}
?>




</html>

Re: Problème $_POST + Checkboxes

par BJkGkh » 22 nov. 2013, 22:40

J'ai essayé aussi un var_dump, il me sort le groupId et le dernier targetIds, je vais retester en assignant un name à l'input et je ferais un petit retour si ça régle le soucis ;)

Sinon définitivement je vois pas comment régler ce soucis, et je vais faire autrement, je vous remercie donc tous pour m'avoir répondu, j'apprécie, je laisse le sujet ouvert quelques jours, au cas où quelqu'un aurait une réponse de derrière les fagots.

Re: Problème $_POST + Checkboxes

par sirakawa » 22 nov. 2013, 10:38

IL est simple de vérifier si le problème vient de php:
au début du script qui récupères les valeurs, tu mets:
var_dump($_POST); die(); //le die pour pouvoir lire sans être encombré
Par ailleurs, comme l'a déjà dit xtg, pour que des checkbox passent à un script php, il faut qu'ils aient tous le même attribut name sous forme de tableau.
On peut très bien donner un id (qui sert à javascript) Et un name

Re: Problème $_POST + Checkboxes

par BJkGkh » 22 nov. 2013, 03:55

J'ai déjà essayé cette manière mais impossible, je n'ai pas de name= dans mon input:

Code : Tout sélectionner

<input id="group-memberlist-m-".$userdata['id']."" type="checkbox""; if($membership['userid'] == $groupdata['ownerid'] || $membership['userid'] == USER_ID){ echo " disabled="disabled""; } echo " style="margin: 0; padding: 0; vertical-align: middle"/>
Le post est généré directement dans le .js en récupérant les ".$userdata['id']." (Voir: http://www.upimg.fr/ih/iplr.jpg)

Sur le .js, l'array est amorcée par d = []; mais comme j'ai dit, je suis sûr que le problème ne vient pas de l'Ajax mais vient du php (foreach?) dans la récupération des $_POST...

J'essaie en fait de reproduire ce qu'un autre site fait et sur ce site, ça fonctionne parfaitement malgré que le form envoie aussi la même chose (groupId=1&targetIds=524404&targetIds=694905&targetIds=39755&targetIds=671521), toutes les cases cochées sont bien traitées.

Pourquoi, ça fonctionnerait chez eux, et moi en ayant les mêmes .js (seul le php change) en ressortant la même chose il ne me prend que la dernière valeur. Est-ce que c'est le PHP qui recupére pas toutes les valeurs ? Le code est pas bon ? Je comprends pas trop pourquoi j'arrive pas à tout récupérer et que le site que j'essaie de reproduire prends tout les targetIds en compte.

Comme j'ai dit, j'ai essayé pleins de choses et rien n'a fonctionné, ainsi que vos réponses... Rhaaa c'est galère. Merci quand même :)

Re: Problème $_POST + Checkboxes

par franckm » 21 nov. 2013, 21:54

Mais c'est normal tous tes id ont le même nom !

$_POST['targetids'] n'est pas un tableau mais une simple chaîne et il prend la dernière valeur trouvée.

Si tu envoies un chaîne du genre : &ID=1&ID=2&ID=3&ID=4

Tu ne récupère qu'une seule valeur pour ID c'est la dernière (pas sûr, je pense qu'il prend la dernière mais même pas sûr) en tout cas ce qui est sûr c'est qu'il prend une seule valeur.

Le plus simple est de faire comme te dit xTg, d'utiliser des input avec [].

Ou sinon à vue de nez dans ton ajax il faut envoyer un tableau. Peut être du genre:
[javascript]
//A mettre en début de script
var targetids=new Array();
//dans l'ajax à la place de targetids = d en dessous de parameters
targetids.push(d)
[/javascript]

Mais je sais pas du tout ce que ça va ressortir. A essayer...

Re: Problème $_POST + Checkboxes

par xTG » 21 nov. 2013, 21:37

C'est un problème de requête HTTP, ou plus simplement d'url.
C'est un peu comme si tu avais deux boites rouges et que tu disais à ton copain d'ouvrir la boite rouge pour trouver le bonbon.
C'est laquelle de boite ? Donc disons que par défaut il prendra toujours celle de droite.
Bah le navigateur lui prendra toujours la dernière "boite". ;)

Utilises une notation tableau pour tes checkbox, ainsi ton url enverra un tableau.
<checkbox name="tableau[]" value="1" />
<checkbox name="tableau[]" value="2" />
<checkbox name="tableau[]" value="3" />

Code : Tout sélectionner

url?tableau[]=1&tableau[]=2&tableau[]=3
Ce qui donnera pour PHP :
array( 0 => 1,
1 => 2,
2 => 3)

Problème $_POST + Checkboxes

par BJkGkh » 21 nov. 2013, 20:53

Bonjour, je suis nouveau et je suis content d'avoir rejoint le forum, j'ai un problème donc comme le titre de ce sujet l'indique. J'ai essayé de trouver une réponse un peu partout sur le net sans succès. Voici donc mon problème que j'expose et j'espère que quelqu'un pourra m'aider à trouver la solution.

Pour résumer, J'essaie de récupérer des ID de personnes dont on a coché le nom pour ensuite les traiter (Refus, Acceptation) via PHP dans un foreach. Cependant, je n'arrive à récupérer qu'une seule valeur alors que toutes les valeurs semblent déclarées dans le $_POST de sortie, donc j'aimerais bien entendu récupérer toutes les valeurs cochées pour qu'elles soient traitées. Le $_POST passe par du Javascript/Ajax et quand je tente un alert dans le fichier .js directement, il me déclare bien les valeurs cochées séparées par une virgule (Normal vu que c'est un array). Mais je n'ai pas trouvé de solution pour récupérer TOUTES les valeurs.

Assez parlé, je pense que quelques captures d'écrans et quelques lignes de codes seront plus parlantes que mes explications (Moi je me comprends, c'est déjà bien haha).

Me voici donc, cochant 4 cases de personne à ne pas accepter dans un groupe:

http://www.upimg.fr/ih/3j3h.jpg

Après avoir cliqué sur Refuser, voici le bout de code Ajax qui gère ça:

http://www.upimg.fr/ih/iplr.jpg

Voici comment le $_POST ressort dans la console chrome (J'ai testé Firefox, c'est pareil):

http://www.upimg.fr/ih/rl2n.jpg

Ce qui a l'air normal, il me récupére bien tous les ID en sortie et je ne pense pas que l'erreur se trouve dans le .js, mais un echo en sortie de script me ressort qu'une seule valeur et la dernière valeur:

http://www.upimg.fr/ih/0e8m.jpg

Voici le bout de code PHP qui me sort ça:

http://www.upimg.fr/ih/wlyr.jpg

Voici quelques images complémentaires sur mon form:

PHP: http://www.upimg.fr/ih/cbfe.jpg
Sortie: http://www.upimg.fr/ih/wldc.jpg

Donc maintenant pourquoi il me sort que la dernière valeur ? C'est la question que je me pose depuis plusieurs jours, et dont je n'arrive à trouver aucune réponse, malgré les multiples heures passées à chercher, habituellement j'essaie de chercher une réponse par moi-même mais j'ai trop tourné en rond avec aucun résultat. C'est pour ça que je sollicite votre aide et j'espère que vous m'aiderez à trouver une solution à ce petit problème.

Si vous avez des questions, je ferais au mieux pour répondre le plus correctement possible :)

En vous remerciant d'avance!
PS: J'ai pas mis les images sous balise [img], car je pense que ça déformerait un peu tout le message.