Petits soucis avec la récuperation de pls valeurs checkbox

Résolu
Bonjour,
j'ai un petit souci avec la récupération des valeurs de mon checkbox. Il y a quelques propositions que j'ai trouvée sur d'anciennes questions et je m'en suis inspiré, mais plutôt que d'avoir les réponses je reçois un simple "Array".

Voila ce que j'ai fait...

Ceci pour collé chaque valeur du tableau avec des ";" entre chaque valeur.
$modele=implode(';', $_POST['modele']);


Pour l'associer dans un tableau, j'ai fait ça.
$fields = array();
	$fields{"modele"} = "\nModèle";


Et voici mes checkbox.
<fieldset>
						  <legend>Veuillez sélectionner vos modèles</legend>
							<div>
							  <input type="checkbox" id="tshirt" name="modele[]" value="tshirt">
							  <label for="tshirt">T-shirt</label>
							</div>
							<div>
							  <input type="checkbox" id="polo" name="modele[]" value="polo">
							  <label for="polo">Polo</label>
							</div>
							<div>
							  <input type="checkbox" id="sweatshirt" name="modele[]" value="sweatshirt">
							  <label for="sweatshirt">Sweatshirt</label>
							</div>
							<div>
							  <input type="checkbox" id="hoodie" name="modele[]" value="hoodie">
							  <label for="hoodie">Hoodie</label>
							</div>
							<div>
							  <input type="checkbox" id="chemise" name="modele[]" value="chemise">
							  <label for="chemise">Chemise</label>
							</div>
							<div>
							  <input type="checkbox" id="veste" name="modele[]" value="veste">
							  <label for="veste">Veste</label>
							</div>
							<div>
							  <input type="checkbox" id="softshell" name="modele[]" value="softshell">
							  <label for="softshell">Softshell</label>
							</div>
							<div>
							  <input type="checkbox" id="polaire" name="modele[]" value="polaire">
							  <label for="polaire">Polaire</label>
							</div>
							<div>
							  <input type="checkbox" id="pantalon" name="modele[]" value="pantalon">
							  <label for="pantalon">Pantalon</label>
							</div>
							<div>
							  <input type="checkbox" id="casquette" name="modele[]" value="casquette">
							  <label for="casquette">Casquette</label>
							</div>
							<div>
							  <input type="checkbox" id="bonnet" name="modele[]" value="bonnet">
							  <label for="bonnet">Bonnet</label>
							</div>
							<div>
							  <input type="checkbox" id="sac" name="modele[]" value="sac">
							  <label for="sac">Sac</label>
							</div>
							<div>
							  <input type="checkbox" id="totebag" name="modele[]" value="totebag">
							  <label for="totebag">Totebag</label>
							</div>
					</fieldset>


Merci d'avance.

5 réponses

  1. Modérateur
    Mais non... Il faut le mettre a la place de la boucle que tu as déjà..
    1
    1. Help please :')
      0
      1. Contributeur
        bonjour,
        ne manque-t-il pas une partie de ton code php?
        0
    2. Modérateur
      Bonjour,

      Question pas très claire...
      Donc..
      ceci:
      $modele=implode(';', $_POST['modele']);
      

      OK !
      Si tu fais un var_dump de cette variable, tu devrais voir une string qui contient chaque modèle selectionnés, séparés par un point virgule.

      Par contre, tes deux autres lignes de codes... heu.. why ??
      Que veux tu en faire ??
      Qu'est-ce que cette variable $fields ?? A quoi doit elle te servir ?
      Pourquoi veux tu transformer ton array de modeles en string ?

      Si c'est pour stocker en bdd, il est préférable d'ajouter une table d'association plutôt que de tout vouloir stocker dans un champ de la table existante... ( ne serait-ce que pour faciliter les recherches)

      Si c'est pour essayer de faire du JSON .. il n'y à pas besoin de faire du bricolage.. il existe des fonctions php pour transformer un array en json directement ..

      Bref.. il faut détailler ton besoin de façon la plus claire possible

      0
      1. En fait les $fields c'est pour envoyer dans le mail toutes les infos du formulaire que l'utilisateur à sélectionner.
        0
    3. Si, c'est vrai que j'ai envoyé seulement quelques parties.

      Voici tout le code php

      <?php
      	//Code php
      	//On démarre une nouvelle session
         session_start();
       
         //Si on appuie sur le bouton "Envoyer"
         if(isset($_POST['suivant'])){
      	   
      	 //On récupère les données dans $_POST  
      	 
      	 //foreach($_POST['modele'] as $modele);
      	 $modele=implode(';', $_POST['modele']);
      	 $marque=htmlspecialchars($_POST['marque'], ENT_QUOTES);
      	 $reference=htmlspecialchars($_POST['reference'], ENT_QUOTES);
           $couleur=$_POST['couleur'];
           $quantite=$_POST['quantite'];
      	 $qualite=$_POST['qualite'];
           $emplacement=$_POST['emplacement'];
           $impression=$_POST['impression'];
      	 $prenom=htmlspecialchars($_POST['prenom'], ENT_QUOTES);
           $nom=htmlspecialchars($_POST['nom'], ENT_QUOTES);
      	 $societe=htmlspecialchars($_POST['societe'], ENT_QUOTES);
      	 $tva=htmlspecialchars($_POST['tva'], ENT_QUOTES);
           $email=htmlspecialchars($_POST['email'], ENT_QUOTES);
           $telephone=htmlspecialchars($_POST['telephone'], ENT_QUOTES);
      	 $adresse=htmlspecialchars($_POST['adresse'], ENT_QUOTES);
           $precision=htmlspecialchars($_POST['precision'], ENT_QUOTES);
      	 
      	 //On définit des variables de session
           $_SESSION['modele'] = $modele;
      	 $_SESSION['marque'] = $marque;
      	 $_SESSION['reference'] = $reference;
           $_SESSION['couleur'] = $couleur;
           $_SESSION['quantite'] = $quantite;
      	 $_SESSION['qualite'] = $qualite;
           $_SESSION['emplacement'] = $emplacement;
           $_SESSION['impression'] = $impression;
      	 $_SESSION['prenom'] = $prenom;
           $_SESSION['nom'] = $nom;
      	 $_SESSION['societe'] = $societe;
      	 $_SESSION['tva'] = $tva;
           $_SESSION['email'] = $email;
           $_SESSION['telephone'] = $telephone;
      	 $_SESSION['adresse'] = $adresse;
           $_SESSION['precison'] = $precision;
      	 
      	 // associer un label à chaque donnée récupérée du formulaire dans un tableau 
      	$fields = array();
      	$fields{"modele"} = "\nModèle";
      	$fields{"marque"} = "\nMarque";
      	$fields{"reference"} = "\nRéférence";
      	$fields{"couleur"} = "\nCouleur";
      	$fields{"quantite"} = "\nQuantité";
      	$fields{"qualite"} = "\nQualité";
      	$fields{"emplacement"} = "\nEmplacement";
      	$fields{"impression"} = "\nTechnique d'impression";
      	$fields{"prenom"} = "\nPrenom";
      	$fields{"nom"} = "\nNom";
      	$fields{"societe"} = "\nNom de Société";
      	$fields{"tva"} = "\nTva";
      	$fields{"email"} = "\nEmail";
      	$fields{"telephone"} = "\nTéléphone";
      	$fields{"adresse"} = "\nAdresse";
      	$fields{"precision"} = "\nDescription du projet";
      
      		 //Envoi du fichier
      	 /* variables à modifier */
      $taillemax = 1000000; // taille max d'un fichier (multiple de 1024)
      $filetype = "/jpeg|pdf|png|gif/i"; // types de fichiers acceptés, séparés par |
      $nametype = "/\.jpeg|\.jpg|\.pdf|\png|\.gif/i"; // extensions correspondantes
      $rep = "uploads/"; // répertoire de destination
      $maxfichier = 10; // nombre maximal de fichiers
      /* fin des modifications */
      
      // fichier courant (URI absolue) : formulaire récursif
      $PHP_SELF = basename($_SERVER['PHP_SELF']);
      
      if($_POST) {
      	$msg = array(); // message
      	$fichier = $_FILES['fichier']; // simplication du tableau $_FILES
      	for($i=0; $i<count($fichier['name']); $i++) {
      		// nom du fichier original = nom par défaut
      		$nom = $fichier['name'][$i];
      		// test existence fichier
      		if(!strlen($nom)) {
      			$msg[] = "Aucun fichier !";
      			continue;
      		}
      		// si un nouveau nom est renseigné (avec extension correcte)
      		if(preg_match($nametype, $_POST['lenom'][$i]))
      			$nom = $_POST['lenom'][$i];
      		// répertoire de destination
      		$destination = $rep.$nom;
      		// test erreur (PHP 4.3)
      		if($fichier['error'][$i]) {
      			switch($fichier['error'][$i]) {
      				// dépassement de upload_max_filesize dans php.ini
      				case UPLOAD_ERR_INI_SIZE:
      				  $msg[] = "Fichier trop volumineux !"; break;
      				// dépassement de MAX_FILE_SIZE dans le formulaire
      				case UPLOAD_ERR_FORM_SIZE:
      				  $msg[] = "Fichier trop volumineux (supérieur à ".(INT)($taillemax/1024)." Mo)"; break;
      				// autres erreurs
      				default:
      				  $msg[] = "Impossible d'uploader le fichier !";
      			}
      		}
      		// test taille fichier
      		elseif($fichier['size'][$i] > $taillemax)
      			$msg[] = "Fichier $nom trop volumineux : ".$fichier['size'][$i];
      		// test type fichier
      		elseif(!preg_match($filetype, $fichier['type'][$i]))
      			$msg[] = "Fichier $nom de type incorrect : ".$fichier['type'][$i];
      		// test upload sur serveur (rep. temporaire)
      		elseif(!@is_uploaded_file($fichier['tmp_name'][$i]))
      			$msg[] = "Impossible d'uploader $nom";
      		// test transfert du serveur au répertoire
      		elseif(!@move_uploaded_file($fichier['tmp_name'][$i], $destination))
      			$msg[] = "Problème de transfert avec $nom";
      		else
      			$msg[] = "Fichier <b>$nom</b> téléchargé avec succès !";
      	}
      	
      
      	// affichage confirmation
      	for($i=0; $i<=count($msg); $i++)
      		echo "<p>$msg[$i]</p>";
      }
      
      
      	
      	// To
      	$to = 'monadress@monadress.com';
      	
      	//From
      	$from = $_SESSION['email'];
      	 
      	// Subject
      	$subject = 'Formulaire de devis - Test Mail';
      	
      	$msg = $modele;
      	 
      	// clé aléatoire de limite
      	$boundary = md5(uniqid(microtime(), TRUE));
      	 
      	// Headers
      	$headers = "Reply-to: \"test\" <monadress@monadresse.com>\n"; 
      	$headers .= "From: \"test\"<monadress@monadresse.com>\n";
      	//NOTE: l'adresse email indiquée dans le header From doit etre l'adresse absolue du serveur qui envoie les messages,
      	//et peut etre differente de votre adresse de contact si vous etes par exemple sur un serveur dedié partagé.
      	$headers .= 'Mime-Version: 1.0'. 'Date: '. date('r') . "\r\n";
      	$headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
      	$headers .= "\r\n";
      	 
      	// Message
      	$msg = 'This is a multipart/mixed message.'."\r\n\r\n";
      	 
      	// Texte
      	$msg .= '--'.$boundary."\r\n";
      	$msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
      	$msg .= 'Content-transfer-encoding:8bit'."\r\n";
      	$msg .= 'Information de la commande:'."\r\n"; 
      	foreach($fields as $a => $b){ $msg .= sprintf("%20s: %s",$b,$_REQUEST[$a]) . "\r\n"; } 
      	
      	//indice de boucle permettant d'ajouter tous les fichiers joints
      	$i=0;
      
      	//Boucle permettant l'ajout de toutes les pieces jointes
      	while($i < sizeof($fichier))
      	{
      	
      	
      	//=====Lecture et mise en forme de la pièce jointe
      	$fichier1  = fopen($rep . $fichier['name'][$i], "rb" );
      	$attachement = fread($fichier1, filesize($rep . $fichier['name'][$i]));
      	$attachement = chunk_split(base64_encode($attachement));
      	fclose($fichier1);
      	
      	$msg .= '--'.$boundary."\r\n";
      	$msg .= 'Content-type:'.$filetype.';name='.$fichier['name'][$i]."\r\n";
      	$msg .= 'Content-transfer-encoding:base64'."\r\n";
      	$msg .= $attachement."\r\n";
      	
      	   
      	$i++;
      	}	
      
      	// Fin
      	$msg .= '--'.$boundary."\r\n";
      	 
      	function validateEmail($email) {
      	if(preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email))
      	  return true;
      	else
      	  return false;
      }
       
      		//envoie du formulaire
      		if(mail($to,$subject,$msg,$headers) && mail($from,$subject,$msg,$headers)){
      			//header('Location: #');
      			echo "<h6>Votre message a bien été envoyé !</h6>";
      			$_SESSION = array();
      			
      		}
      		else{ //non envoyer
      			//header('Location: #');
      			echo "<h6>Votre message n'a pas pu être envoyé !<h6>";
      			$_SESSION = array();
      		}
      		//supprimer les fichiers uploadés pour ne pas encombrer inutilement le serveur
      		unlink ("uploads/".$_FILES['fichier']['name']);
         }
      ?>
      0
      1. Modérateur
        Le problème ne vient pas du code que tu nous as montré .. mais du fait que tu n'utilises pas cette variable dans ta boucle !
        Tu boucles directement sur les données envoyées par ton formulaire ( à travers la variable $_REQUEST ... ce qui n'est pas conseillé au passage )
        foreach($fields as $a => $b){ $msg .= sprintf("%20s: %s",$b,$_REQUEST[$a]) . "\r\n"; } 
        

        A la limite ( je n'ai pas envie de passer 4h à te refaire un code propre... ) tu peux
        foreach($fields as $a => $b){ 
          // si la "clé" du field = modele alors ..
          if($a == 'modele'){
            $msg .= $modele;  // on affiche le contenu de ta variable $modele
          } else {
            // sinon on traite les autres données envoyées en $_POST via la variable $_REQUEST
            $msg .= sprintf("%20s: %s",$b,$_REQUEST[$a]) . "\r\n"; 
          } 
        }
        
        
        
        1
      2. @jordane45Et est-ce que je dois placer ça avec les autres $fields ?

        $fields = array();
        	$fields{"modele"} = "\nModèle";
        	foreach($fields as $a => $b){ 
        	  // si la "clé" du field = modele alors ..
        	  if($a == 'modele'){
        		$msg .= $modele;  // on affiche le contenu de ta variable $modele
        	  } else {
        		// sinon on traite les autres données envoyées en $_POST via la variable $_REQUEST
        		$msg .= sprintf("%20s: %s",$b,$_REQUEST[$a]) . "\r\n"; 
        	  } 
        	}
        	$fields{"marque"} = "\nMarque";
        	$fields{"reference"} = "\nRéférence";
        	$fields{"couleur"} = "\nCouleur";
        	$fields{"quantite"} = "\nQuantité";
        	$fields{"qualite"} = "\nQualité";
        	$fields{"emplacement"} = "\nEmplacement";
        	$fields{"impression"} = "\nTechnique d'impression";
        	$fields{"prenom"} = "\nPrenom";
        	$fields{"nom"} = "\nNom";
        	$fields{"societe"} = "\nNom de Société";
        	$fields{"tva"} = "\nTva";
        	$fields{"email"} = "\nEmail";
        	$fields{"telephone"} = "\nTéléphone";
        	$fields{"adresse"} = "\nAdresse";
        	$fields{"precision"} = "\nDescription du projet";
        0
      3. @fabi00Parce que quand je fais ça, j'ai toujours comme message "Array"...
        0
    4. Ahh oui juste, merci beaucoup !
      0