Comment envoyé valeur checkbox mêm si aucune est coché

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 : Comment envoyé valeur checkbox mêm si aucune est coché

par Davee » 15 févr. 2007, 19:58

Cool en effet ça marche en enlevant la condition if.
ça rend le code plus claire. enfin pour moi.

Merci encore
David.

par AB » 15 févr. 2007, 18:57

Bonjour,

Effectivement en suivant les conseils de Ryle tu devrais pouvoir éviter le test à l'intérieur de ta fonction.

EDIT après vérif, tu peux. Ton code optimisé devrait donc ressembler à
$check = (isset($_POST["check"]) && is_array($_POST["check"]))? $_POST["check"] : array() ; 
   
function reConcatenCheck ($rcc){  
    $rescheck="";  
  
    foreach ($rcc as $f) {  
        $rescheck .= splitchars ($f,3);  
        }

     return $rescheck;  
    } 
je te conseille la syntaxe ci-dessus car elle permet de t'assurer que $_POST["check"] est un tableau, donc aucun risque de générer une erreur dans ta boucle dans le cas contraire.

par Ryle » 15 févr. 2007, 18:57

Il me semble... c'est à vérifier, je ne sais plus comment se comporte le foreach devant un tableau vide. Mais en théorie tu devrais pouvoir te passer du test dans la fonction (en fait, c'est implicitement le test du foreach qui vérifie si le prochain élément du tableau existe, qui devrait être effectué) :)

par Invité » 15 févr. 2007, 18:47

Merci Ryle, merci AB,

Donc Ryle si je te suis bien je pourrais en utilisant l'expression "$check=array();" , il serait possible d'enlever la condition "if" de la fonction?

David.

par Ryle » 15 févr. 2007, 13:12

Ou tu dois aussi simplement pouvoir mettre un tableau vide en valeur par défaut :)
$check = array();
if (isset ($_POST["check"]))
    $check=$_POST["check"]; 
si $_POST est renseigné, $check contiendra sa valeur, sinon ce sera un tableau vide et tu ne rentreras normalemebt pas dans le foreach. La solution d'AB fonctionne également, mais je pense qu'il vaut mieux prendre l'habitude de respecter les types de variables (même si php s'en moque) et ne pas mélanger tableau et chaine ;)

par AB » 15 févr. 2007, 03:04

Bonjour,

On ne peut guère faire plus simple, mais si tu souhaites avoir une valeur par défaut pour $check, ce qui est recommandé dans la plupart des cas:

en considérant que si $_POST["check"] existe, c'est un tableau (d'après ce que j'ai compris de ton code):
$check = (isset($_POST["check"]) && is_array($_POST["check"]))? $_POST["check"] : '';
  
function reConcatenCheck ($rcc){ 
    $rescheck=""; 
    if (!empty($rcc)){ 
    foreach ($rcc as $f) { 
        $rescheck .= splitchars ($f,3); 
        }} 
     return $rescheck; 
    } 
ainsi ta boucle ne devrait plus renvoyer d'erreur même si $_POST["check"] n'existe pas.

par Davee » 14 févr. 2007, 17:49

Merci Ryle

POur la valeur par défaut de check j'eu un petit problem,
car j'utilise un peu plus loin cette valeur avec foreach dans une fonction,
et comme ilm'indiquait une erreur à la ligne même du foreach,
j'ai fait l'essai sans donner de valeur par défaut et de mettre un isset avec l'instruction if dans la fonction et ça marche.
c'est pas très honête mais ça marche.
if (isset ($_POST["check"])){
	$check=$_POST["check"];
	}
function reConcatenCheck ($rcc){
	$rescheck="";
	if (isset ($rcc)){
	foreach ($rcc as $f) {
    	$rescheck .= splitchars ($f,3);
		}}
 	return $rescheck;
	}
	
si quelqu'un avait une idée pour simplifié ce que j'ai fait. je serais enchanté comme Merlin.

Merci David.

par Ryle » 14 févr. 2007, 16:45

Si la case n'est pas cochée, elle n'est pas envoyée.. si tu l'envoi quand même, comment sauras tu si elle a été cochée ou pas ? :)

Ce qu'il faut faire, c'set simplement tester si la valeur a été envoyée :
if(isSet($_POST["check"])) // la valeur existe on l'utilise
  $check = $_POST['check'];
else // sinon
  $check = ''; // on peut coller une valeur par défaut.
la même chose sous forme ternaire (ce qui prend moins de place quand tu as 15 champs ;)) :
$check = (isSet($_POST["check"])) ? $_POST['check'] : '';

Comment envoyé valeur checkbox mêm si aucune est coché

par Davee » 14 févr. 2007, 15:38

J'ai essayé 'être cours et précis dans le titre j'espère que c'est bon
However...

J'ai un petit problem de checkbox. sur une première page j'ai une boucle qui génère des checkbox.
	for ($men2=0;$men2<$numlines;++$men2){
		echo '<dd class="block"><input type="checkbox" name="check[]" value="'.$tabmenu[$men2].'">' . $tabmenu[$men2]. '</dd>';
		}
à l'envoie du formulaire il transmet les données à:
$check=$_POST["check"];
jusque là tout est normale, Mais si aucun checkbox n'est coché il renvoie automatiquement un message d'erreur genre undefined index: check patati patata ligne tant.
Comment est-il possible d'incrémenter la variable check par défault. ou un truc comme ça ???

Merci
D'avance. :)