Checkbox envoie dans ma bdd

Ce topic a été résolu
laurent09

laurent09 Le 30 mai 2017 à 14:39 (Édité le 25 janvier 2019 à 17:53)

bonjour

voila je voudrais créer dans mon édition de profils une checkbox avec plusieurs choix a cocher.
seulement je voudrais que ces choix rentre dans une colonne "horaire" de ma table "user".

j'ai réussi a a créer ma form :
    <form  method="post">
        <div class="info-lib"><h6>horaire disponible:</h6></div>
        <div class="info-value">
            <input type="checkbox" name="horaire[]" value="Matin">Matin</input>
            <input type="checkbox" name="horaire[]" value="Apres-midi">Apres-midi</input>
            <input type="checkbox" name="horaire[]" value="Apres-midi">Soir</input>
        </div>
        <br><br>
        <input type="submit" value="insert" name="envoi_horaire"></input>
    </form>
Mais je n'arrive pas créer la section php
je sais qu'il faut utiliser la fonction implode.

quelqu'un pourrai m'aider ?

merci
Balatharas

Balatharas Le 31 mai 2017 à 14:26

Ta oublié de changer l'attribut value de la troisième checkbox (Apres-midi ---> Soir)
Pourquoi tu ne met pas un nom différent à chaque name="" des checkbox ?
Quand c'est fait ton PHP ressemble à ça:
if(isset($_POST['horaire[1]'], $_POST['horaire[2]'], $_POST['horaire[3]'])) {
   $horaire1 = $_POST['horaire[1]'];
   $horaire2 = $_POST['horaire[2]'];
   $horaire3 = $_POST['horaire[3]'];
}
Ensuite si tu veux enregistrer les valeurs dans une seule colonne tu fais ça:
// Dans la condition plus haut
$complet = $horaire1.";".$horaire2.";".$horaire3;
Ce qui donne: "Matin;Apres-midi;Soir"
Maintenant pour obtenir chaque option individuellement:
var_dump(explode(';', $complet));
Là c'est sous forme de tableau donc:
$expl = explode(';', $complet);
echo $expl[0];
echo '<br />';
echo $expl[1];
echo '<br />';
echo $expl[2];
Voilà ^^
laurent09

laurent09 Le 31 mai 2017 à 21:42

ok merci pour tes infos.

Du coup voila mon code 

<?php
      if(isset($_POST['horaire[1]'], $_POST['horaire[2]'], $_POST['horaire[3]'])) {
      $horaire1 = $_POST['horaire[1]'];
      $horaire2 = $_POST['horaire[2]'];
      $horaire3 = $_POST['horaire[3]'];
      $complet = $horaire1.";".$horaire2.";".$horaire3;
           $ins = $bdd->prepare('INSERT INTO user(horaire) VALUES(?)');
           $ins->execute(array($complet));
                                                                    
?>
      <form method="POST">
           <div class="info-lib"><h6>horraire disponnible:</h6></div>
           <div class="info-value">
                <input type="checkbox" name="horaire[1]" value="Matin">Matin</input>
                <input type="checkbox" name="horaire[2]" value="Apres-midi">Apres-midi</input>
                <input type="checkbox" name="horaire[3]" value="Soir">Soir</input>
           </div>
           <br><br>
           <input type="submit" value="insert" name="submit"></input>
      </form>

je ne sais pas si c'est bon car ce ne marche pas rien ne va dans la colonne de ma bdd.

avec cette technique il est possible de cocher 1 case sur 3 ? ou 2 case sur 3 ? par exemple 
Balatharas

Balatharas Le 1 juin 2017 à 20:31 (Édité le 1 juin 2017 à 20:34)

Remplace
$horaire1 = $_POST['horaire[1]'];
$horaire2 = $_POST['horaire[2]'];
$horaire3 = $_POST['horaire[3]'];
Par ca
if(isset($_POST['horaire[1]'])) {
     $horaire1 = $_POST['horaire[1]'];
} else {
     $horaire1 = '';
}

if(isset($_POST['horaire[2]'])) {
     $horaire2 = $_POST['horaire[2]'];
} else {
     $horaire2 = '';
}

if(isset($_POST['horaire[3]'])) {
     $horaire3 = $_POST['horaire[3]'];
} else {
     $horaire3 = '';
}
Par contre je te laisse faire le code pour changer la var $complet selon le nbr de cases cochées c'est a dire d'enlever les points virgule si une var est = '';
Zbuu

Zbuu Le 4 juin 2017 à 02:20

Bonjour

Pourquoi ne pas plutôt vérifier que le tableau horaire ne soit pas vide et d'utiliser la fonction implode pour retourné les valeurs ?
if (!empty($_POST['horaire'])) {
   $complet = implode(';', $_POST['horaire']);
}
La par exemple si tu coche Apres-midi et Soir alors la variable complet retournera : 
Apres-midi;Soir
C'est plus simple que de faire des conditions pour chaque cas 

Ensuite pourquoi dans ton code tu ferme les balises input ? c'est inutile  

En reprenant ton code et ce que j'ai mis juste au dessus çà donne  : 
<?php  
if (!empty($_POST['horaire'])) {   
   $complet = implode(';', $_POST['horaire']);
   $ins = $bdd->prepare("INSERT INTO user(horaire) VALUES(?)");
   $ins->execute(array($complet));
}
?>
<form method="post">
   <div class="info-lib"><h6>Horraire disponible</h6></div>
   <div class="info-value">
      <input type="checkbox" name="horaire[]" value="Matin">Matin
      <input type="checkbox" name="horaire[]" value="Apres-midi">Apres-midi
      <input type="checkbox" name="horaire[]" value="Soir">Soir
   </div>
   <br><br>
   <input type="submit" value="insert" name="submit">
</form>
je ne sais pas si c'est bon car ce ne marche pas rien ne va dans la colonne de ma bdd. 
Si le code que tu nous montre est complet alors je dirais que peut être tu as oublier la connexion à ta base de donnée ? 

avec cette technique il est possible de cocher 1 case sur 3 ? ou 2 case sur 3 ? par exemple  
C'est à ça que servent les checkbox  dans mon exemple, tu fais un insert dans ta base de donnée (n'oublie pas de faire la connexion )
tant qu'il il y a au moins une checkbox de coché. Si aucune n'est coché alors il ne ce passe rien tout simplement 

J'espère que mon message soit assez clair (ouai c'est pas mon fort ) sinon je laisse quelqu'un d'autre mieux ré-expliquer
laurent09

laurent09 Le 7 juin 2017 à 10:30

désolé pour le retard j'était absent ^^
merci beaucoup a vous deux j'y suis arrivé grâce a vous .
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte