Souci avec formulaire, renvoi ARRAY [Résolu/Fermé]

Messages postés
14
Date d'inscription
lundi 20 mai 2013
Statut
Membre
Dernière intervention
30 mai 2015
- - Dernière réponse : cmoiahmed
Messages postés
14
Date d'inscription
lundi 20 mai 2013
Statut
Membre
Dernière intervention
30 mai 2015
- 28 mai 2013 à 20:32
Bonjour,

J'ai un formulaire avec des checkbox, lorsque je valide pour l'envoyer par mail, il m'affiche "ARRAY" comme récupération de valeurs cochées.


J'ai trouvé une solution pour qu'il me renvoi les données en les passant dans implode mais maintenant il m'affiche une erreur lorsque je valide le formulaire

Warning: implode(): Invalid arguments passed in.....



Voila le code :


  if(($_POST['materiaux']) === ' ') {   // si aucune cases cochées
	$materiauxErreur = '<b>type de matériaux</b> est un choix requis.'; 
		$siErreur = true; // pour afficher ailleurs le message dans une div
            } 

       else {
                // la variable "article" récupère la valeur des cases cochés
                   article = $_POST['materiaux'];
             
                // la variable "text " permet d'afficher les données dans le mail
                   $text = implode(",", $article);
          }





le message dans une div :

<?php if( isset($constructionErreur) ||  isset($materiauxErreur) ){ ?>
      
          <div class="bloc_erreur">

		<span class="Erreur"><?php echo $constructionErreur ?></span> <br />	
		 <span class="Erreur"><?php echo $materiauxErreur ?></span> <br />	
        
         </div>

<?php } ?>






Merci de votre aide....


Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
866
1
Merci
salut,

le fait de mettre dans l'input type ckecbox name="materiaux[] renvoie $_POST['materiaux'] sous forme d'un array lorsque l'on poste le formulaire, mais si rien n'est coché, l'array $_POST['materiaux'] n'existe pas donc tu as une erreur sur l'argument inexistant de la fct implode

il faut donc que tu fasses

if(isset($_POST['materiaux'])){
echo implode(.....
}else{
echo 'aucune case cochée';
}

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63277 internautes nous ont dit merci ce mois-ci

jeremy.s
Messages postés
1227
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
67 -
+1 pour le if(isset($_POST['materieux'])) ;-)
Ensuite je rajouterai un foreach($_POST['materiaux'] as $m) pour parcourir les checkbox cochées
Alain_42
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
866 -
oui c'est sur qu'avec une boucle foreach c'est mieux, mais je répondait à son erreur sur implode
Messages postés
3026
Date d'inscription
mercredi 7 septembre 2005
Statut
Contributeur
Dernière intervention
1 décembre 2013
435
0
Merci
Bonjour.

Ta déclaration de variable est incorrecte : tu as oublié le "$" devant "article" dans ton else.

Essaie déjà comme ça ! :-)

A+
Messages postés
14
Date d'inscription
lundi 20 mai 2013
Statut
Membre
Dernière intervention
30 mai 2015
0
Merci
oups mal recopier, il y a bien "$" devant "article" dans mon else, l'erreur ne vient pas de la.


j'oubli de préciser que l'erreur se fait lorsque le formulaire est valider sans avoir rempli les champs et cocher les cases.

j'ai un beau message :
Warning: implode(): Invalid arguments passed in.....



mais lorsque le formulaire est compléter correctement je reçois toutes les données
cmoiahmed
Messages postés
14
Date d'inscription
lundi 20 mai 2013
Statut
Membre
Dernière intervention
30 mai 2015
-
j'ai simplifié le code :

else {
             
    // la variable "text " permet d'afficher les données dans le mail
                   $text = implode(",", $_POST['materiaux']);
          }



je récupère bien les données mais quand les checkbox ne sont pas cochés et que je valide le formulaire, je reçois toujours l'erreur

Warning: implode(): Invalid arguments passed in.....





et le message d'erreur est vide, j'ai regardé dans firebug et je vois ceci:

<span class="Erreur">   </span> <br />
dcanl
Messages postés
3026
Date d'inscription
mercredi 7 septembre 2005
Statut
Contributeur
Dernière intervention
1 décembre 2013
435 -
Salut.

Que contient ta variable $_POST['materiaux'] dans ce cas ?

Tu mets une chaîne espace ' ', mais est-ce bien cela ?

Le problème ici, c'est ton test dans le if. Car d'après ce que je comprends, quel que soit le cas, tu passe dans le else (formulaire rempli ou pas), ton test est donc à revoir.

Si tu n'y arrives pas, je pourrai regarder de mon côté pour reproduire le cas.

A+
cmoiahmed
Messages postés
14
Date d'inscription
lundi 20 mai 2013
Statut
Membre
Dernière intervention
30 mai 2015
-
la variable
 $_POST['materiaux'] 
contient un tableau si je ne me trompe pas


<li> 
<input type="checkbox"id="materiaux" name="materiaux[]"  class="element checkbox" value="Traditionnel (parpaing)" />
<label class="choice" for="materiaux">Brique</label>
</li>


Pour ce qui est de la chaîne espace ' ', je ne vois la voit pas, si c'est dans
 implode
, c'est une virgule pour séparer les données récupérer :
$text = implode(",", $_POST['materiaux']);


Par contre si c'st pour la vérification, je ne sais pas quoi mettre
if(($_POST['materiaux']) === ' ') { 


Je tourne en rond, je récupère bien les données mais j'ai toujours ce message d'erreur
Warning: implode(): Invalid arguments passed in.....


Et je remarque que si je rajoute
 trim


if (trim($_POST['materiaux']) === ' ' ) {


je reçois toujours les données et j'ai bien mon message d'erreur qui s'affiche correctement si la case n'est pas cochée mais cette fois j'ai un nouveau message d'erreur
trim() expects parameter 1 to be string, array given
cmoiahmed
Messages postés
14
Date d'inscription
lundi 20 mai 2013
Statut
Membre
Dernière intervention
30 mai 2015
-
bon il suffisait de mettre comment paramètre pour vérifier si la case est cochée:
false


if ($_POST['materiaux'] == false) {


Dernier souci pour ce qui est des
radio 
(choix unique)

comment faire pour que lorsque on clique sur le label, cela valide le choix.

car j'ai toujours le premiers choix qui se rempli

je sais pas si je suis clair....
dcanl
Messages postés
3026
Date d'inscription
mercredi 7 septembre 2005
Statut
Contributeur
Dernière intervention
1 décembre 2013
435 -
Salut.

Ravi que tu aies pu trouver la solution pour ton test.

Pour que cela valide le choix lorsque tu cliques sur le label, il faut que tu utilises la balise HTML label justement.

Regarde ici : http://www.editeurjavascript.com/trucs/16,utilisation_de_la_balise_dans_un_formulaire.php

A+
Messages postés
14
Date d'inscription
lundi 20 mai 2013
Statut
Membre
Dernière intervention
30 mai 2015
0
Merci
merci, mais j'avais déjà trouvé la solution pour les
radio 
(choix unique) et c'est bien ce que j'ai fait