IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Recuperation de checkbox


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut Recuperation de checkbox
    bonjour à tous,

    Voilà j'ai créé un formulaire pour ensuite l'envoyer par mail..

    donc j'ai un petit soucis, j'arrive a récupérer une fois les données o_O des checkbox seulement ... a chaque fois il me renvoit i... a comprendre pourtant avec le code ci dessous j'ai déjà réussi a récupérer des données sur d'autres checkbox

    Dans ce formulaire figure des checkbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type="checkbox" name="EpoqueBien[]" value="Ancien" id="ancien" /> <label for="ancien">Ancien</label>
    								<input type="checkbox" name="EpoqueBien[]" value="Recent" id="recent" /> <label for="recent">Récent</label>
    								<input type="checkbox" name="EpoqueBien[]" value="Indifferent" id="indifferent" /> <label for="indifferent">Indifférent</label>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $EpoqueBien=''; 
    				for ($i=0 ; $i<count($_POST['EpoqueBien']) ; $i++)
    				{
    					if(isset($_POST['EpoqueBien'][$i]))
    						{
    						$EpoqueBien .= $_POST['EpoqueBien'][$i].", "; //on rajoute une virgule après chaque élément coché...
    						}
    				}
    				$EpoqueBien=rtrim($EpoqueBien," ,"); // on suprime la dernière virgule de la chaine

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Si tu change la méthode en GET, tu devrais pouvoir voir dans l'URL ce qui est mis. Cela sera plus facile pour trouver l'erreur je pense (juste pour trouver l'erreur, après tu remet à POST).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut
    hmm

    ca ne change rien ...

    comment expliquer que ce code exactement mot pour mot est le m^me est qu'il fonctionne correctement et on rcupére bien dans notre mail les valeurs

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je ne comprend pas ce que tu dis. Déjà pour ton premier post j'ai essayer de deviner un petit peu mais je ne suis pas sûr d'avoir tout compris, il doit te manquer quelques mots dans tes phrases.


    Si je t'ai conseillé d'utiliser la méthode GET, c'est pour voir l'URL, ainsi tu pourra voir pour chacun des champs, son nom et sa valeur.

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Il faut savoir que s'il y a plusieurs checkbox, il sont indépendant les uns des autres.
    Ce qui par ailleurs est différent des boutons radios (on dit même : groupe de bouton radios)
    Or, ton code donne l'impression que tu souhaite quelles soient liées entre elles.


    Peut être faudrait il mettre des noms différents pour chaque type de paramètres (Ancien, Recent, Indifferent) pour récupérer indépendamment leur état (Oui ou Non).
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type="checkbox" name="ancien" value="1" id="ancien" />
    <input type="checkbox" name="recent" value="1" id="recent" />
    <input type="checkbox" name="indifferent" value="1" id="indifferent" />
    Ensuite il suffit de vérifier si chaque checkbox est retourné ou pas (pas besoin de boucle normalement).

    Un simple if (empty()) ... suffit pour savoir si c'est coché ou pas.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    if (!empty($_POST['ancien'])) {
        // Ok, "ancien" est Coché
    }
    else {
        // "ancien" pas coché
    }
     
    // Idem pour recent et indifferent
    ?>
    Par ailleurs, il faut avoir le réflexe de faire des print_r() (ou var_dump) sur $_POST (ou $_GET, etc ...) pour vérifier qu'est ce qui a été retourné par le formulaire, et aussi comment.
    Raison de plus s'il y a des données structurées en tableau.
    Sinon c'est quelque peu l'inconnu, donc on est bloqué.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    J'aurais une petite question, est-il possible de les nommer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <input type="checkbox" name="c[1]" value="1" id="c[1]" />
    <input type="checkbox" name="c[2]" value="1" id="c[2]" />
    <input type="checkbox" name="c[3]" value="1" id="c[3]" />
    Et de les récupérer comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for($i = 1; $i <= 3; $i++)
          if(isset($_POST['c[' . $i . ']')) .... ;
    Car j'ai l'impression que c'est ce que le PO voudrait faire.
    (Au pire les nommer c1, c2, c3)

    Parce que si on a 100 checkbox et qu'on veut compter le nombre de checkbox cochée, faire 100 if(isset()) à la main c'est un peu long...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut
    je serai sans doute plus clair :

    le code HTML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    <div id="formulaire">
    		<form method="post" action="TraitementConseilAchat.php">
    			<div id="Coordonne">
    				<fieldset class="Coordonne">
    					<legend>Vos coordonnées </legend>
    					<table align="center">
    						<tr>
    							<td>
    								<label for="nom">Nom </label>
    							</td>
    							<td width="40px"></td>
    							<td>
    								<input required type="text" name="nom" maxlength="35" size="22" id="ConseilNom" autofocus/><br />
    							</td>
    						</tr>
    						<tr>
    							<td>
    								<label for="prenom">Prenom </label>
    							</td>
    							<td width="40px"></td>
    							<td>
    								<input required type="text" name="prenom" maxlength="35" size="22" id="ConseilPrenom" /><br />
    							</td>
    						</tr>
    						<tr>
    							<td>
    								<label for="telephone">Telephone </label>
    							</td>
    							<td width="40px"></td>
    							<td>
    								<input required type="tel" name="tel" maxlength="20" size="22" id="ConseilTel"/>
    							</td>
    						</tr>	
    						<tr>
    							<td>
    								<label for="email">E-mail </label>
    							</td>
    							<td width="40px"></td>
    							<td>
    								<input required type="email" name="email" maxlength="50" size="22" id="ConseilMail" placeholder="mail@domaine.com"/>
    							</td>
    						</tr>
    						<tr>
    							<td>
    								<label for="ville">Ville </label>
    							</td>
    							<td width="40px"></td>
    							<td>
    								<input required type="texte" name="ville" maxlength="100" size="22" id="ConseilVille"/>
    							</td>
    						</tr>
    					</table>
    				</fieldset>
    			</div>
     
    			<div id="nature">
    				<fieldset class="nature">
    					<legend>Nature des biens recherchés </legend>
    					<table align="center">
    						<tr>
    							<td>
    								<input type="checkbox" name="nature[]" value="Maison" id="Maison" /> <label for="Maison">Maison</label>
    							</td>
    							<td>
    								<input type="checkbox" name="nature[]" value="Appartement" id="Appartement" /> <label for="Appartement">Appartement</label>
    							</td>
     
    							<td>
    								<input type="checkbox" name="nature[]" value="Bureaux" id="Bureaux" /> <label for="Bureaux">Bureaux / Locaux Commerciaux</label>
    							</td>
    						</tr>
    						<tr height="5px">
    							<td></td>
    						</tr>
    						<tr>
    							<td>
    								<input type="checkbox" name="nature[]" value="Garages" id="Garages" /> <label for="Garages">Garage</label>
    							</td>
    							<td>
    								<input type="checkbox" name="nature[]" value="TerrainBatir" id="TerrainBatir" /> <label for="TerrainBatir">Terrains à batir</label>
    							</td>
    							<td>
    								<input type="checkbox" name="nature[]" value="TerrainAgricole" id="TerrainAgricole" /> <label for="TerrainAgricole">Terrain Agricole</label>
    							</td>
    						</tr>
    					</table>
    				</fieldset>
    			</div>
     
    			<div id="EpoqueBien">
    				<fieldset class="EpoqueBien">
    					<legend>Epoque du bien </legend>
    					<table align="center">
    						<tr>
    							<td>
    								<input type="checkbox" name="EpoqueBien[]" value="Ancien" id="Ancien" /> <label for="ancien">Ancien</label>
    								<input type="checkbox" name="EpoqueBien[]" value="Recent" id="Recent" /> <label for="recent">Récent</label>
    								<input type="checkbox" name="EpoqueBien[]" value="Indifferent" id="Indifferent" /> <label for="indifferent">Indifférent</label>
    							</td>
    						</tr>			
    					</table>
    				</fieldset>
    			</div>
     
    			<div id="SecteurGeo">
    				<fieldset class="SecteurGeo">
    					<legend>Veuillez préciser le nom des communes / secteur géographique </legend>
    					<table align="center">
    						<tr>
    							<td>
    								<label for="surface">Surface habitable </label>
    							</td>
    							<td width="40px"></td>
    							<td>
    								<input required type="text" name="surface" maxlength="50" size="10" id="ConseilSurface"/>&nbsp;&nbsp;&nbsp;m<sup>2</sup>
    							</td>
    						</tr>
    						<tr>
    							<td>
    								<label for="budget">Budget </label>
    							</td>
    							<td width="40px"></td>
    							<td>
    								<input required type="text" name="budgetMin" maxlength="100" size="5" id="ConseilBudget"/>&nbsp;&nbsp;et
    								<input required type="text" name="budgetMax" maxlength="100" size="8" id="ConseilBudget"/>&nbsp;&nbsp;&nbsp;&euro;
    							</td>
    						</tr>
    						<tr>
    							<td>
    								<label for="secteur">Secteur géographique </label>
    							</td>
    							<td width="40px"></td>
    							<td>
    								<input required type="texte" name="secteur" maxlength="150"  size="22" id="ConseilSecteur"/>
    							</td>
    						</tr>
    					</table>
    				</fieldset>
    			</div>
     
    			<div id="critere">
    				<fieldset class="critere">
    					<legend>Autres critères incontournables </legend>
     
    					<input type="checkbox" name="critere[]" value="Renove" id="Renove" /> <label for="renove">A rénover</label><br />
    					<input type="checkbox" name="critere[]" value="Recent" id="Recent" /> <label for="recent">Absence de travaux autres que décoratifs</label><br />
    					<input type="checkbox" name="critere[]" value="Plainpied" id="Plainpied" /> <label for="plainpied">Plain pied</label><br />
    					<input type="checkbox" name="critere[]" value="Mitoyennete" id="Mitoyennete" /> <label for="mitoyennete">Absence de mitoyenneté</label><br />
    					<input type="checkbox" name="critere[]" value="Garage" id="Garage" /> <label for="garage">Garage</label><br />
    					<input type="checkbox" name="critere[]" value="Ascenseur" id="Ascenseur" /> <label for="ascenseur">Ascenseur</label><br /><br />
    					<label for="budget">Autres critères : </label>
    					<input type="text" name="autrecritere" maxlength="50" id="critere"/>
    				</fieldset>
    			</div>
    			<input style="margin-left:200px;margin-top:5px;" type="submit" value="Envoyer">
    		</form>	
    	</div>
    le php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <?php	 
     
    if (isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['tel']) && isset($_POST['ville']) 
    		&& isset($_POST['nature']) && isset($_POST['EpoqueBien']) && isset($_POST['surface']) && isset($_POST['budgetMin']) && isset($_POST['budgetMax'])
    			&& isset($_POST['secteur']) && isset($_POST['critere']))
    {	
     
     
    				$nature='';
    				for ($i=0 ; $i<count($_POST['nature']) ; $i++)
    				{
    					if(isset($_POST['nature'][$i]))
    						{
    						$nature .= $_POST['nature'][$i].", "; //on rajoute une virgule après chaque élément coché...
    						}
    				}
    				$nature=rtrim($nature," ,"); // on suprime la dernière virgule de la chaine 
    				echo $nature;
     
    				$EpoqueBien=''; 
    				for ($i=0 ; $i<count($_GET['EpoqueBien']) ; $i++)
    				{
    					if(isset($_GET['EpoqueBien'][$i]))
    						{
    						$EpoqueBien .= $_GET['EpoqueBien'][$i].", "; //on rajoute une virgule après chaque élément coché...
    						}
    				}
    				$EpoqueBien=rtrim($EpoqueBien," ,"); // on suprime la dernière virgule de la chaine 
    				echo $EpoqueBien;
     
    				$critere='';
    				for ($i=0 ; $i<count($_POST['critere']) ; $i++)
    				{
    					if(isset($_POST['critere'][$i]))
    						{
    						$critere .= $_POST['critere'][$i].", "; //on rajoute une virgule après chaque élément coché...
    						}
    				}
    				$critere=rtrim($critere," ,"); // on suprime la dernière virgule de la chaine 
    				echo $critere;
     
    		$destinataire = "gauthier.hornoy@gmail.com";
    		$sujet = "Formulaire Conseil Achat";
    		$message = 'Un message est arrivé \n
    					Nom : '.$_POST['nom'].'
    					Prenom : '.$_POST['prenom'].'
    					Email : '.$_POST['email'].'
    					Telephone : '.$_POST['tel'].'
    					ville : '.$_POST['ville'].'
    					Nature des biens recherchés : '.$nature.'
    					Epoque du bien :'. $EpoqueBien.'
    					Surface : '.$_POST['surface'].'
    					Budget Minimum : '.$_POST['budgetMin'].'
    					Budget Maximum : '.$_POST['budgetMax'].'
    					Secteur : '.$_POST['secteur'].'
    					Autres critères incontournables: '.$_POST['critere'].'
    					Critère supplémentaire: '.$_POST['autrecritere'].'
    					';
    		$entete = 'From '.$_POST['nom'].' \n Reply-To: Email : '.$_POST['email'].'	';
     
     
    		if(mail($destinataire, $sujet, $message, $entete))
    			{
    			echo "Le mail a bien été envoyé.";
    			}
    			else
    			{
    			echo "Vous n'avez pas remplis tous les champs";
    			}
    	}
     
     
    ?>
    En faites quand je vous dit que le code fonctionne c'est par rapport a nature ou il récupére bien tous

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Est-ce que tu peux nous montrer :

    - un imprim. écran (screen) de ton formulaire remplis ;
    - l'URL produite par ce formulaire une fois validée (méthode GET) ;
    - le résultat attendu ;
    - le résultat obtenu ?

  9. #9
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Il y a pas mal de données effectivement.

    Il y a plus simple pour récupérer les checkbox en les cumulant dans une chaine : la fonction implode()

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $EpoqueBien = '';
    if (!empty($_POST['EpoqueBien'])) $EpoqueBien = implode(',', $_POST['EpoqueBien']);
    print_r($EpoqueBien);
    ?>
    On obtient le ou les données séparées par une virgule sans boucle, sans devoir supprimer la dernière, implode() le gère.

    Si tu tiens à faire des boucles, alors utilise une boucle foreach() plus pratique que for().
    Par ailleurs, il n'est théoriquement pas nécessaire de vérifier si un élément du tableau retourné existe ou pas car le navigateur retourne uniquement les checkbox cochées.
    Donc les élément dans $_POST['EpoqueBien'] existent obligatoirement, et donc ont été cochés.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $EpoqueBien = '';
    if (!empty($_POST['EpoqueBien'])) {
        foreach ($_POST['EpoqueBien'] as $Epoque) {
            $EpoqueBien[] = $Epoque;
        }
        if (!empty($EpoqueBien)) $EpoqueBien = implode(', ', $EpoqueBien);
        print_r($EpoqueBien);
    }
    ?>
    Ce qui revient quasi au même que le 1er code ci-dessus en plus de code.


    Au passage, il n'y a pas lieu de changer de méthode POST par GET pour voir ce qu'il y a dans l'URL.
    Un simple print_r() (ou var_dump) sur $_POST ou $_POST['EpoqueBien'] me semble plus simple et plus efficace pour vérifier ce que ça contient et comment c'est structuré.


    En faites quand je vous dit que le code fonctionne c'est par rapport a nature ou il récupére bien tous
    Pige pas.
    Si le code fonctionne, il est ou le problème alors ?

Discussions similaires

  1. Recuperation de checkbox et nommage avec crochet
    Par arnogb69 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/11/2008, 09h12
  2. recupere un checkBox d'un selectManyCheckbox
    Par Esil2008 dans le forum JSF
    Réponses: 3
    Dernier message: 16/10/2008, 09h57
  3. Recuperer les checkboxes d'un form
    Par yoskater dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 14/02/2008, 10h13
  4. recuperer les checkbox cochés d'une arbre de checkbox
    Par 01211983 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 12/02/2008, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo