Insérer checkbox dans une BDD avec choix multiple

Signaler
Messages postés
119
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
9 novembre 2013
-
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
-
bonjour,

je suis entrain de créer un formulaire de contact, ou il ya un bouton checkbox avec trois choix, sachant qu'on peut cocher tous les trois, mais je n'ai qu'une seule valeur qui s’insère dans la base de donnée (la dernière)..
est ce qu'il ya une possibilité de les afficher tous ??


 Souhaitez-vous être rappelé :

Le matin Après midi Soirée (17h à 19h)



page d'insertion :

<?php
$base="academia";
$conn=mysql_connect("localhost", "root", "");
mysql_select_db($base);

$appel=$_POST['appel'];


$sql='insert into inscription VALUES("", "'.mysql_escape_string($appel).'")';

$req=mysql_query($sql) or die ('Erreur SQL !
'.$sql.'
'.mysql_error());
header("location:conf_contact.php");

?>




Merci d'avance

8 réponses

Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,


Tes noms d'input doivent être du style :
name="appel[]"

Tu récupéreras un tableau dans $_POST['appel'] côté serveur sur lequel il te suffira d'itérer (foreach())

Au passage :
- mysql_escape_string() est obsolète et génère une erreur (cf mysql_real_escape_string())
Par extension toutes les fonctions mysql_*() sont vieillottes et sont très avantageusement remplacées par mysqli() ou PDO

- tu devrais t'assurer que les variables que tu reçois du formulaire sont bien celles qui y sont définies. Tu attends "matin", "apres_midi" ou / et "soiree", pas "23 ans avant JC" qu'un plaisantin pourrait très facilement envoyer. Ca n'a peut être pas grand intérêt dans ce cas, mais c'est une bonne habitude à prendre.

-
or die ('Erreur SQL !
'.$sql.'
'.mysql_error());

=> à ne jamais faire en production car gros risque de sécurité en fournissant, avec mysql_error() et $sql, des informations importantes qui peuvent être utilisées pour pirater ton site.

-
header("location:conf_contact.php");

Il faut toujours faire suivre un header("L
ocation: ...) d'un exit(); pour ne pas que le script éventuellement présent plus bas ne soit transmis.


Cordialement,


Kohntark -
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
18
bonjour
deux exemples pour t'aider ...
ex1 ne fait rien ... pour te montrer le procédé
<form action="" method="post">
 Souhaitez-vous être rappelé :
Le matin 
Après midi 
Soirée (17h à 19h)

</form>
<?php


/*EN MODE DEBUG*/
$sql='';
if(isset($_POST['appel']) && !empty($_POST['appel'])){
//echo $c=count($_POST['appel']);
$base="academia";
$conn=mysql_connect("localhost", "root", "") or die ('Erreur SQL !
'.$sql.'
'.mysql_error());
$db=mysql_select_db($base) or die ('Erreur SQL !
'.$sql.'
'.mysql_error());
  
  foreach($_POST['appel'] as $k => $appel){
  $appel=mysql_real_escape_string(strip_tags($appel));
  
    /*que les valeurs autorisées*/
    $tableau=array('matin','apres_midi','soiree');
    if (in_array($appel, $tableau, true)) {
    echo $sql.='insert into inscription VALUES("", "'.$appel.'")';
    //$req=mysql_query($sql) or die ('Erreur SQL !
'.$sql.'
'.mysql_error());
    }else{
    }
  
  }

//header('Location: conf_contact.php');exit;
}else{
//rien 
echo 'Choisir une période ?';
}
?>


ex2
<form action="" method="post">
 Souhaitez-vous être rappelé :
Le matin 
Après midi 
Soirée (17h à 19h)

</form>
<?php


/*EN MODE DEBUG*/
$sql='';
if(isset($_POST['appel']) && !empty($_POST['appel'])){
//echo $c=count($_POST['appel']);
$base="academia";
$conn=mysql_connect("localhost", "root", "") or die ('Erreur SQL !
'.$sql.'
'.mysql_error());
$db=mysql_select_db($base) or die ('Erreur SQL !
'.$sql.'
'.mysql_error());
  
  foreach($_POST['appel'] as $k => $appel){
  $appel=mysql_real_escape_string(strip_tags($appel));
  
    /*que les valeurs autorisées*/
    $tableau=array('matin','apres_midi','soiree');
    if (in_array($appel, $tableau, true)) {
    $sql='insert into inscription VALUES("", "'.$appel.'")';
    $req=mysql_query($sql) or die ('Erreur SQL !
'.$sql.'
'.mysql_error());
    }else{
    }
  
  }

mysql_close();
header('Location: conf_contact.php');exit;
}else{
//rien 
echo 'Choisir une période ?';
}
?>


Bonne programmation !
Messages postés
119
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
9 novembre 2013

Merci pour votre aide mais j'ai un message d'erreur dans la page d'insertion (sachant que je n'ai pas que cette valeur, j'ai d'autre champs) , peut être que j'ai fais une erreur sans faire attention

voilà la code complet de ma page d'insertion, ça ce très généreux de ta part si tu me le refais avec les autres champs que j'ai (je suis encore débutante ), c pour cela j'ai pas pu m’en sortir

code complet de la page d'insertion :
<?php
$base="academia";
$conn=mysql_connect("localhost", "root", "");
mysql_select_db($base);

$civilite=$_POST['civilite'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$email=$_POST['email'];
$tel=$_POST['tel'];
$formation=$_POST['formation'];
$question=$_POST['question'];
$appel=$_POST['appel'];
$naissance=$_POST['naissance'];
$lieu=$_POST['lieu'];
$adresse=$_POST['adresse'];
$situation =$_POST['situation'];
$reference=$_POST['reference'];
$autre_ref=$_POST['autre_ref'];
$date = date("d/m/Y - H:i:s");




$sql='insert into inscription VALUES("", "'.mysql_escape_string($civilite).'","'.mysql_escape_string($nom).'","'.mysql_escape_string($prenom).'","'.mysql_escape_string($email).'","'.mysql_escape_string($tel).'","'.mysql_escape_string($formation).'","'.mysql_escape_string($question).'","'.mysql_escape_string($appel).'","'.mysql_escape_string($naissance).'","'.mysql_escape_string($lieu).'","'.mysql_escape_string($adresse).'","'.mysql_escape_string($situation).'","'.mysql_escape_string($reference).'","'.mysql_escape_string($autre_ref).'","'.mysql_escape_string($date).'")';

$req=mysql_query($sql) or die ('Erreur SQL !
'.$sql.'
'.mysql_error());
header("location:conf_contact.php");

?>
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
18
comme j'ai pas le form complet ...
la table vite fait à refaire, enum exemple pour la civilité


CREATE TABLE IF NOT EXISTS `inscription` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`civilite` varchar(50) NOT NULL,
`nom` varchar(50) NOT NULL,
`prenom` varchar(50) NOT NULL,
`email` varchar(50) NOT NULL,
`tel` varchar(50) NOT NULL,
`formation` varchar(50) NOT NULL,
`question` varchar(50) NOT NULL,
`appel` varchar(50) NOT NULL,
`naissance` varchar(50) NOT NULL,
`lieu` varchar(50) NOT NULL,
`adresse` varchar(50) NOT NULL,
`situation` varchar(50) NOT NULL,
`reference` varchar(50) NOT NULL,
`autre_ref` varchar(50) NOT NULL,
`datejour` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
18
rermarque : il existe une fonction php serialize et unserialize si tu veux travailler avec des choix multiple et des tableaux de valeurs ...
http://php.net/manual/fr/function.unserialize.php

Bonne programmation !
Messages postés
119
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
9 novembre 2013

L'insertion marche mais mais quand je valide, il passe pas, il reste dans la page insertion avec ce message affiché :


[color=red]matin matin apres_midi matin apres_midi soiree insert into inscription VALUES ( NULL, 'mlle', 'aaaa', 'aaa', 'aaa', 'aaa', 'Technicienne', 'aaaa', 'matin apres_midi soiree ', 'aaa', 'aaa', 'aaa', 'Employée', 'Forum internet', 'aaa', NOW() ) /color


comment faire pour passer à une autre page de confirmation d'envoi de message
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
18
il faut changer comme ça
<?php
if($req=mysql_query($sql)){
  /*ca marche redirection*/
  //echo '<script>alert(\'insertion reussie\');</script>';
  header('Location: conf_contact.php');exit;
  }else{ 
  die('Erreur SQL !'); /*pas afficher l'erreur sql mysql_error() utilisable par un attaquant*/
  }
?>

Bonne programmation !
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
voilà la code complet de ma page d'insertion, ça ce très généreux de ta part si tu me le refais avec les autres champs que j'ai (je suis encore débutante ), c pour cela j'ai pas pu m’en sortir


Raison de plus, si tu es débutante, de chercher à le faire toi même, c'est comme cela qu'on apprend.
"Etre généreux" c'est aider et tenter de faire progresser, pas écrire du code à ta place.

Par ailleurs le point 9 du règlement dit ceci :
On ne demande pas un programme tout fait, on ne demande que de l'aide sur un problème concret.


Il dit également cela :
Inutile de demander du "code tout cuit", vous n'obtiendrez aucune réponse.

... malheureusement ça n'arrive que très rarement

Résultat :
Dans 90% des cas ça n'aide aucunement le débutant qui se contente de faire un copié / collé sans rien avoir compris au code.
Progression aide null

... tout porte à croire d'ailleurs que tu entres dans ces 90%.


Et pour éviter tout amalgame :
Si je tiens ce discours c'est pour toi et, par extension, pour les débutants, ... perso je m'en balance.



Cordialement,

Kohntark -