Checkbox envoie dans ma bdd
- Accueil
- Forum
- Programmation
- PHP
- Checkbox envoie dans ma bdd
laurent09 Le 30 mai 2017 à 14:39 (Édité le 25 janvier 2019 à 17:53)
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 Le 31 mai 2017 à 14:26 (Édité le 1 janvier 1970 à 01:00)
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 Le 31 mai 2017 à 21:42 (Édité le 1 janvier 1970 à 01:00)
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 Le 1 juin 2017 à 20:31 (Édité le 1 juin 2017 à 20:34)
$horaire1 = $_POST['horaire[1]'];
$horaire2 = $_POST['horaire[2]'];
$horaire3 = $_POST['horaire[3]'];
Par caif(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 Le 4 juin 2017 à 02:20 (Édité le 1 janvier 1970 à 01:00)
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 exempleC'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 Le 7 juin 2017 à 10:30 (Édité le 1 janvier 1970 à 01:00)
merci beaucoup a vous deux j'y suis arrivé grâce a vous .