case a cocher choix multiples

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : case a cocher choix multiples

Re: case a cocher choix multiples

par sirakawa » 02 sept. 2013, 13:31

Vaudrait mieux repenser:
BDD
table Styles
id_style : entier, autoincrement, clef primaire
style : text
avec un formulaire de création de la table Styles,
et un formulaire de modification de cette table.
Essaie de faire ça en premier

table Clients
id_client : entier, autoincrement, clef primaire
Nom: text
Prenom: text
Naissance: date
Nationalite: char(2)
Pays_residence : char (2)
email :text
avec un formulaire de création d'un enregistrement dans cette table
(les pays sont dans un select, codés sur deux lettres)

quand cette partie fonctionne, on peut avancer...

Re: case a cocher choix multiples

par CARO9100 » 02 sept. 2013, 12:10

Merci beaucoup pour vos reponses

Comme suis encore debutante et j'avoue que ca me semble encore un peu compliqué à mon stade, du coup j'ai remplacé "case a cocher" par un type bouton 'radio' et un champs texte a coté, certes je n'aurai qu'une valeur mais bon au moins ca fonctionne :-)

Vais un peu plus plancher sur php :-))

Re: case a cocher choix multiples

par sirakawa » 02 sept. 2013, 11:42

Au cas où tu n'aurais pas compris moogli, je pose mon grain de sel:
Si un acheteur potentiel, Dupont, Gérard, a sélectionné trois maisons, tu vas avoir dans ta BDD:
Dupont, Gérard, Maison_1
Dupont, Gérard, Maison_2
Dupont, Gérard, Maison_3
Et si le même revient plus tard ou change d'avis, le résultat ne vas pas être triste:
Il faudrait avoir au moins trois tables:
Trucs_a_vendre
id :entier clef primaire autoincrement
nom de la chose: text
etc...
Acheteurs
id_acheteur: entier clef primaire autoincrement
Nom: text
Prénom: text
etc

Consultations
id_consulteur : integer; valeur prise dans la table Acheteurs
id_consulte: entier, valeur prise dans Trucs à vendre.

La mise à jour est alors une mise à jour de
Acheteurs si l'acheteur est nouveau
Trucs_a_vendre : si nouvau produit
Consultations : pour chaque consultation nouvelle.

Ca suppose é videmment de repenser aussi le formulaire (valeurs prises dans la BDD)...

Re: case a cocher choix multiples

par moogli » 02 sept. 2013, 11:23

Non toutes les cases a cocher qui sont cochée si biensur tu as bien employée la notation tableau.

Par contre tu as une ligne insérée par case cochée ce qui va a l'encontre d'une bonne modélisation ;)


@+

Re: case a cocher choix multiples

par CARO9100 » 02 sept. 2013, 09:51

Bonjour,

Merci pour vos réponses et pour votre aide


en mettant le code ci dessous, je récupère uniquement la dernière valeur cochée dans ma bdd ?

Merci

Code : Tout sélectionner

<?php $req = $bdd -> prepare('INSERT INTO news2(nom,prenom,naissance,nationalite,paysresidence,email,appartstyle,usagel) VALUES(?, ?, ?,?,?,?,?,?)'); foreach($_POST['appartstyle'] as $value){ $insert= $req -> execute (array ($_POST ['nom'], $_POST['prenom'], $_POST['naissance'], $_POST['nationalite'], $_POST['paysresidence'], $_POST['email'],$value, $_POST['usagel'])) ; if($insert ===false) echo "Erreur SQL: problème survenu lors de l'insertion"; } ?>

Re: case a cocher choix multiples

par sirakawa » 02 sept. 2013, 09:01

Parce que ton script php reçoit un tableau et que ce tableau ne peut pas être enregistré tel quel dans la base de données.
C''est pourquoi une façon de procéder est celle-ci:
$tableau = $_POST['nom_html'];
et soit tu te sers de foreach
foreach ($tableau as $element)
{
//utilisation de élément
}
soit tu te sers de while.

Mais il faudrait tenir compte de la remarque de moogli sur la conception de la BDD

Re: case a cocher choix multiples

par CARO9100 » 01 sept. 2013, 21:14

merci beaucoup pour ta réponse j'essaye des demain matin et te dis ce que ca me notifie
bonne soiree

Re: case a cocher choix multiples

par yann18 » 31 août 2013, 17:02

dans un premier temps il faut s'assurer que les données transmises par le formulaire sont bien reçues.pour ce faire on peut scruter le contenu de $_POST avec var_dump()
//à placer avant la requête d'insertion
var_dump($_POST);
Que retourne var_dump($_POST)?

penses aussi à activer la gestion d'erreurs pdo.

Re: case a cocher choix multiples

par CARO9100 » 31 août 2013, 16:00

Merci beaucoup Yann pour ton aide mais quand je mets ton code ça me notifie "array" dans ma bdd ?

Re: case a cocher choix multiples

par yann18 » 31 août 2013, 12:22

c'est possible d'utiliser la boucle en raison du choix multiple effectué par l'internaute ayant selectionné apparstyle(qui au demeurant est un tableau).
<?php
$req = $bdd -> prepare('INSERT INTO news2(nom,prenom,naissance,nationalite,paysresidence,email,appartstyle,usagel) VALUES(?, ?, ?,?,?,?,?,?)');
     foreach($_POST['appartstyle'] as $value){
   $insert=  $req -> execute (array ($_POST ['nom'], $_POST['prenom'], $_POST['naissance'], $_POST['nationalite'],
    $_POST['paysresidence'], $_POST['email'],$value, $_POST['usagel'])) ;
   if($insert ===false)
     echo "Erreur SQL: problème survenu lors de l'insertion";
   }
   

?>
Le code ci-dessus fonctionne bien, en revanche y a bien un problème de modélisation au niveau de ta bd car si une personne choisi 10 appartsyle il y aura aussi 1O insertions des données(nom,prenom,naissance...) de la même personne. Or la duplication des données doit être évité. Dans ton cas la modélisation de ton système d'information doit ressortir au minimum 4 entités voire 5 ou 6 entités:
-personne
-pays
-appartstyle
-personne-appartstyle

Re: case a cocher choix multiples

par CARO9100 » 31 août 2013, 11:08

On ne peut pas utiliser FOREACH ?

Merci.

Re: case a cocher choix multiples

par CARO9100 » 31 août 2013, 10:29

Bonjour,

Dans le code html j 'ai bien rajouter les crochets

Code : Tout sélectionner

<input type="checkbox" name="appartstyle[]" value="studio" /> <label for="studio">Studio</label><br /> <input type="checkbox" name="appartstyle[]" value="pieces" /> <label for="pieces">2 pièces</label><br /> <input type="checkbox" name="appartstyle[]" value="maison" /> <label for="maison">maison</label><br />
Par contre je comprends pas ce qu'il faut inserer et je ne sais pas ou insérer IMPLODE dans mon traitement php ? J'ai pas vu d'exemples concrets du coup suis perdue :-(

petite question, le type de valeur pour cela dans la BDD c 'est bien VARCHAR ou ENUM ?

Merci de ton aide

Re: case a cocher choix multiples

par CARO91002 » 30 août 2013, 20:46

merci beaucoup vais tester demain matin.

Bonne soiree

Re: case a cocher choix multiples

par moogli » 30 août 2013, 20:14

salut,

deux choses :
- si un nom d'élément de formulaire (input) n'est pas unique seul le dernier esr prit en compte.
- utilise la notation tableau pour nommer tes checkbox => name="appartstyle[]", dans cas $_POST['appartstyle'] est un tableau, tu peux utiliser implode pour tout mettre dans une seule colonne de sgbd si tu as quelque chose de dénormalisé.


@+

case a cocher choix multiples

par CARO91002 » 30 août 2013, 19:42

Bonjour,

Suis débutante :oops: et j'ai beau chercher je trouve pas la solution.

Si quelqu'un pouvait m'aider, merci beaucoup.

J'ai crée un formulaire et j 'arrive pas a récupérer les valeurs de cases a cocher multiples dans ma bdd ? J'ai juste la dernière case cochée uniquement qui s'affiche dans ma bdd

Voici mon code html:

Code : Tout sélectionner

<input type="checkbox" name="appartstyle" value="studio" /> <label for="studio">Studio</label><br /> <input type="checkbox" name="appartstyle" value="pieces" /> <label for="pieces">2 pièces</label><br /> <input type="checkbox" name="appartstyle" value="maison" /> <label for="maison">maison</label><br />
Voici mon cpde traitement php:

Code : Tout sélectionner

$req = $bdd -> prepare('INSERT INTO news2(nom,prenom,naissance,nationalite,paysresidence,email,appartstyle,usagel) VALUES(?, ?, ?,?,?,?,?,?)'); $req -> execute (array ($_POST ['nom'], $_POST['prenom'], $_POST['naissance'], $_POST['nationalite'], $_POST['paysresidence'], $_POST['email'],$_POST['appartstyle'], $_POST['usagel'])) or die (print_r($req->errorInfo())); Merci beaucoup