Souci avec formulaire, renvoi ARRAY

Résolu/Fermé
cmoiahmed Messages postés 14 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 30 mai 2015 - 20 mai 2013 à 08:21
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....


4 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 27/05/2013 à 18:39
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';
}
1
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
27 mai 2013 à 20:21
+1 pour le if(isset($_POST['materieux'])) ;-)
Ensuite je rajouterai un foreach($_POST['materiaux'] as $m) pour parcourir les checkbox cochées
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 mai 2013 à 11:29
oui c'est sur qu'avec une boucle foreach c'est mieux, mais je répondait à son erreur sur implode
0
dcanl Messages postés 2999 Date d'inscription mercredi 7 septembre 2005 Statut Contributeur Dernière intervention 3 juin 2013 470
20 mai 2013 à 09:38
Bonjour.

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

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

A+
0
cmoiahmed Messages postés 14 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 30 mai 2015
Modifié par cmoiahmed le 20/05/2013 à 19:13
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
0
cmoiahmed Messages postés 14 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 30 mai 2015
20 mai 2013 à 22:52
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 />
0
dcanl Messages postés 2999 Date d'inscription mercredi 7 septembre 2005 Statut Contributeur Dernière intervention 3 juin 2013 470
21 mai 2013 à 08:36
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+
0
cmoiahmed Messages postés 14 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 30 mai 2015
21 mai 2013 à 14:08
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
0
cmoiahmed Messages postés 14 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 30 mai 2015
Modifié par cmoiahmed le 21/05/2013 à 23:52
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....
0
dcanl Messages postés 2999 Date d'inscription mercredi 7 septembre 2005 Statut Contributeur Dernière intervention 3 juin 2013 470
27 mai 2013 à 16:23
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+
0
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
merci, mais j'avais déjà trouvé la solution pour les
radio 
(choix unique) et c'est bien ce que j'ai fait
0