checkbox dans une page contact

Petit nouveau ! | 3 Messages

20 juin 2011, 11:16

Bonjour

Très grand débutant en php, je me heurte à un souci de checkbox dans une page contact.
Dans le formulaire, j'ai 5 lignes de ce type

Code : Tout sélectionner

<input type="checkbox" name="Niveau[]" value="Bon" size="30" <?php if ($_POST['Niveau']=='Bon') { echo 'checked="checked"'; } ?> />Bon
Ensuite, plus bas j'ai

Code : Tout sélectionner

$message.= "Niveau : "; foreach ($_POST['Niveau'] as $niveau) { $message.= " ".$niveau; } if (empty($niveau)) { echo "<p class='alerte'>Vous n'avez pas précisé votre niveau.</p>"; $erreur=1; }
Si une case est cochée, pas de souci.
Mais si aucune case n'est cochée, j'ai bien le message d'alerte mais j'ai aussi ce message d'erreur :

Warning: Invalid argument supplied for foreach() in /webdata/academie/escal/ecrire/public.php(174) : eval()'d code on line 140

Comment corriger cette erreur ?

Eléphant du PHP | 209 Messages

20 juin 2011, 12:49

Tu dois d'abord vérifier que la clé 'Niveau' du tableau $_POST n'est pas vide.
Ensuite, tu peux l'utiliser.
if (empty($_POST['Niveau'] )) {
    echo "<p class='alerte'>Vous n'avez pas précisé votre niveau.</p>";
    $erreur=1;
  } else {
foreach ($_POST['Niveau'] as $niveau) {
       $message.= " ".$niveau;
    }
}
  
--
Eric

Petit nouveau ! | 3 Messages

20 juin 2011, 13:38

Merci c'est déjà mieux.
Mais je voudrais que dans le mail, si 2 cases sont cochées, on obtienne par exemple
Niveau : Bon Correct
ou encore mieux
Niveau : Bon - Correct
alors que là j'ai
Bon Correct

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 juin 2011, 15:05

c'est une simple concaténation il faut ajouter le mot niveau à la variable message, et le tiret a chaque fois
<?php
if (empty($_POST['Niveau'] )) {
    echo "<p class='alerte'>Vous n'avez pas précisé votre niveau.</p>";
    $erreur=1;
  } else {
// je suppose que niveau est déclarée avant !
$message .= 'Niveau ';
foreach ($_POST['Niveau'] as $niveau) {
       $message.= $niveau .' - ';;
    }
// il faut supprimer les 3 derniers caractères avec la fonction substr. 
// a la limite il serait p'tet plus intéressant de tester dans la boucle si l'on est au dernier element du tableaux ou pas pour ajouter ou non le ' - ' !
}
?>
@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 209 Messages

20 juin 2011, 16:35

Un peu plus propre :
if (empty($_POST['Niveau'] )) {
    echo "<p class='alerte'>Vous n'avez pas précisé votre niveau.</p>";
    $erreur=1;
  } else {
echo "Niveau ". implode('-',$_POST['Niveau']);
}
--
Eric

Petit nouveau ! | 3 Messages

20 juin 2011, 19:54

grâce à votre aide, je suis arrivé à ça

Code : Tout sélectionner

if (empty($_POST['Niveau'] )) { echo "<p class='alerte'><:escal:contact_alerte_checkbox:></p>"; $erreur=1; } else { $message.= "Niveau : "; $message.= implode('-',$_POST['Niveau']); }
Et c'est parfait !

Merci beaucoup.