Bonjour,
Je souhaiterais insérer le résultat de mes checkboxes dans ma base de données.
Voisci le code checkbox :
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-primary active">
<input type="checkbox" name="taille[]" checked value="s">S
</label>
<label class="btn btn-primary">
<input type="checkbox" name="taille[]" value="m">M
</label>
<label class="btn btn-primary">
<input type="checkbox" name="taille[]" value="l">L
</label>
<label class="btn btn-primary">
<input type="checkbox" name="taille[]" value="xl">XL
</label>
</div>
Ma base table products est construite comme cela :
Champ ID
Champ sex
Champ name
Champ ts
Champ tm
Champ tl
Champ txl
description
image
comment puis je à partir de mon formulaire insérer le choix dans ma table ?
merci
Il faudrait que tu regardes comment gérer les requetes préparées. La tu le fais qu'a moitié (http://php.net/manual/fr/pdo.prepare.php)
Remplace ta requete par ça, ça devrait le faire:
$req = $bdd->prepare("INSERT INTO products(name,description,sex,priceJ,priceA,image,ts,tm,tl,txl) VALUES (:name, :description, :sex, :priceJ, :priceA, :image, :ts, :tm, :tl, :txl)");
$req->execute(array(
"name" => $name,
"description" => $description,
"sex" => $sex,
"priceJ" => $priceJ,
"priceA" => $priceA,
"image" => $userPic,
"ts" => $tailles['s'],
"tm" => $tailles['m'],
"tl" => $tailles['l'],
"txl" => $tailles['xl']
));
Pour le savoir tu peut déboguer ton code en faisant un var_dump($_POST)
tu saura les valeurs que tu récupère, et comment les traités !
ça c'est fait mais je ne vois pas comment traiter les valeurs dans ma requête ? sachant qu'ils auront la même valeur, et comment insérer les différente valeurs ?
Hello,
Tu as vraiment plein de façon de le faire, en voilà une, en imaginant que tes champs soit des booléen :
Code html de ton formulaire
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-primary active">
<input type="checkbox" name="taille[s]" checked value="1">S
</label>
<label class="btn btn-primary">
<input type="checkbox" name="taille[m]" value="1">M
</label>
<label class="btn btn-primary">
<input type="checkbox" name="taille[l]" value="1">L
</label>
<label class="btn btn-primary">
<input type="checkbox" name="taille[xl]" value="1">XL
</label>
</div>
Code PHP pour traiter les données
<?php
// On créer les variables par défaut (pas besoin si tu a déjà mis 0 par defaut dans ta bdd)
$tailles = array('s' => 0, 'm' => 0, 'l' => 0, 'xl' => 0);
// On attribue la variable correspondante
foreach($_POST['taille'] as $taille => $value){
if($value == 1){
$tailles[$taille] = 1;
}
}
// On insert dans la bdd
?>
bonjour,
Pour la requête INSERT INTO peux tu me mettre sur la voix ?
merci
Je cherche mais je ne trouve rien qui ressemble à ce que je souhaite.
Salut
Une petite idée de ce que tu vas de voir faire (ça fonctionne pas, c'est biensûr à adapter pour ton utilisation):
$sth = $dbh->prepare('INSERT INTO products VALUES (?, ?, ?, ?)');
$sth->execute(['Toto', $tailles['s'], $tailles['m']...]);
Préparer une requête pour insérer dans la table products, mettre les valeurs de tes checkboxs dans le tableau des paramètres.
Reviens vers nous si tu as besoin d'aide supplémentaire, mais avec au moins un bout de code de ton traitement PHP, on va quand même pas de fournir la solution toute faite :p
Que recherches-tu à faire en fait ?
Lors d'une commande, un utilisateur peut commander plusieurs tailles de t-shirt en une fois ? Ce comportement me semble assez particulier tout de même, pourrais-tu tenter d'être explicite ?
je sais bien qu'il faut je cherche mais la je bloque sur ces fameuses checkbox.
Mon code est un peu plus complexe car je n'ai pas que les checkboxes.
Je vous mets le code complet vous allez comprendre :
<?php require 'inc/header.php'; ?>
<?php require_once 'bdd.php'; ?>
<?php
$upload_Dir = '../img/produits/' ; // dossier de sauvegarde de la photo principale
$upload_Min = '../img/min/' ; // dossier de sauvegarde de la miniature
if (isset($_POST['ajouter'])) {
$name = $_POST['name'];
$description = $_POST['description'];
$sex = $_POST['sex'];
$priceJ = $_POST['priceJ'];
$priceA = $_POST['priceA'];
$imgName = $_FILES['image']['name'];
$imgTmp = $_FILES['image']['tmp_name'];
$imgSize = $_FILES['image']['size'];
if (empty($name)) {
$error = 'Renseigner le nom du produit';
}elseif (empty($description)) {
$error = 'mettre une description du produit';
}elseif (empty($sex)) {
$error = 'Indiquer une catégorie';
}elseif (empty($priceJ)) {
$error = 'Renseigner un prix enfant';
}elseif (empty($priceA)) {
$error = 'Renseigner un prix Adulte';
}elseif (empty($imgName)) {
$error = 'Choisir une photo';
}else{
// récupérer l'extension de l'image
$imgExt = strtolower(pathinfo($imgName, PATHINFO_EXTENSION));
// Extension autorisé
$allowExt = array('jpeg', 'jpg', 'png', 'gif');
// nom de l'image
$userPic = $_FILES['image']['name']; // nom de l'image principale
require 'imgClass.php'; // appel de la class qui gère la génération des miniatures
if ($imgSize > 500000) {
$error = 'Votre image est trop lourde !!';
}elseif (in_array($imgExt, $allowExt)) {
move_uploaded_file($imgTmp, $upload_Dir.$userPic);
Img::creerMin($upload_Dir.$userPic,$upload_Min,$userPic,120,150); // création de la miniature
$success = "l'image a bien été téléchargé !!";
}else{
$error = 'Merci de choisir une photo valide';
}
}
if (!isset($error)) {
$req = $bdd->prepare("INSERT INTO products(name,description,sex,priceJ,priceA,image) VALUES ('".$name."','".$description."','".$sex."','".$priceJ."','".$priceA."','".$userPic."')");
$req->execute(array(
"name" => $name,
"description" => $description,
"sex" => $sex,
"priceJ" => $priceJ,
"priceA" => $priceA,
"image" => $userPic
));
if ($req) {
$success = 'Enregistrement réussi dans la base produits';
}else{
$error = 'Error'.mysqli_error($bdd);
}
}
}
var_dump($_POST);
?>
<div class="wrapper">
<div class="container">
<div class="row">
<div class="col-lg-3"></div>
<div class="col-lg-6">
<h2>Ajouter un nouveau produit</h2>
<form action="ajouter.php" method="post" enctype="multipart/form-data">
<div class="form-group">
<input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
<label class="control-label col-lg-12">Téléchargement d'image extensions autorisées (png, jpeg, jpg, gif).</label>
<input type="file" name="image" class="btn-upload">
</div>
<div class="form-group">
<label>Nom du produit</label>
<input type="text" name="name" id="name" class="form-control">
</div>
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-primary active">
<input type="checkbox" name="taille[]" checked value="s">S
</label>
<label class="btn btn-primary">
<input type="checkbox" name="taille[]" value="m">M
</label>
<label class="btn btn-primary">
<input type="checkbox" name="taille[]" value="l">L
</label>
<label class="btn btn-primary">
<input type="checkbox" name="taille[]" value="xl">XL
</label>
</div>
<div class="form-group">
<label>Description du produit</label>
<textarea name="description" id="description" class="form-control" rows="3"></textarea>
</div>
<div class="form-group">
<label>Sexe (Homme - Femme - Enfant)</label>
<input name="sex" id="sex" class="form-control">
</div>
<div class="form-group">
<label>Prix du produit Junior</label>
<input type="text" name="priceJ" id="priceJ" class="form-control"><br>
</div>
<div class="form-group">
<label>Prix du produit Adulte</label>
<input type="text" name="priceA" id="priceA" class="form-control"><br>
</div>
<input type="submit" class="btn btn-primary" id="ajouter" name="ajouter" value="Ajouter">
</form>
<?php if (isset($error)) { ?>
<div class="alert alert-danger">
<span class="glyphicon glyphicon-info"></span>
<strong><?php echo $error; ?></strong>
</div>
<?php } ?>
<?php if (isset($success)) { ?>
<div class="alert alert-success">
<span class="glyphicon glyphicon-info"></span>
<strong><?php echo $success; ?></strong>
</div>
<?php } ?>
</div>
<div class="col-lg-3"></div>
</div>
</div>
</div>
<?php require'inc/footer.php'; ?>
merci
ce que je veux faire :
j'ai un backoffice qui gère la mise en ligne des produits.
J'ai une page ajouter qui me premet comme son nom l'indique de mettre un nouveau produit dans ma base products c'est le code que je viens de mettre.
Je souhaite par la suite proposer la selection des tailles à l'utilisateur dans le front office, evidement il ne choisira qu'une seul taille.
j'espère avoir été clair !
Juste en dessous de if (!isset($error)) {
tu ajotues le code de Blinker puis tu modifies la requête comme je t'ai montré en ajoutant les variables $tailles['XX'] dans ton execute. Et ça devrait le faire.
Je viens de modifier mon code comme cela :
if (!isset($error)) {
// On créer les variables par défaut (pas besoin si tu a déjà mis 0 par defaut dans ta bdd)
$tailles = array('s' => 0, 'm' => 0, 'l' => 0, 'xl' => 0);
// On attribue la variable correspondante
foreach($_POST['taille'] as $taille => $value){
if($value == 1){
$tailles[$taille] = 1;
}
}
$req = $bdd->prepare("INSERT INTO products(name,description,sex,priceJ,priceA,image,ts,tm,tl,txl) VALUES ('".$name."','".$description."','".$sex."','".$priceJ."','".$priceA."','".$userPic."','".$tailles."')");
$req->execute(array(
"name" => $name,
"description" => $description,
"sex" => $sex,
"priceJ" => $priceJ,
"priceA" => $priceA,
"image" => $userPic,
"ts" => $tailles['s'],
"tm" => $tailles['m'],
"tl" => $tailles['l'],
"txl" => $tailles['xl']
));
if ($req) {
$success = 'Enregistrement réussi dans la base produits';
}else{
$error = 'Error'.mysqli_error($bdd);
}
}
}
?>
mais j'ai cette erreur :
PHP Notice: Array to string conversion in /Applications/MAMP/htdocs/panier/admin/ajouter.php on line 64
et la ligne 64 est ma requête.
Ok comme ça ça fonctionne merci, mais juste une petite chose je comprends que ça me mets dans ma bdd 1 quand c'est selectionné et 0 quand ça ne l'ai pas. Mais si je dois récupérer la valeur S ou M ou L ou XL pour les afficher, depuis la base de données ça va me donner des 1 et des 0 ?
Salut
Si tu mets XL dans le colonne XL il y aura un petit probleme de logique je pense. Stocker un boolean semble mieux
Le mieux serait de faire lors de l'affichage par exemple:
<b>Taille XL :</b> <?php echo $product['txl'] == 1 ? 'Oui' : 'Non'; ?>