Insérer checkbox dans une BDD avec choix multiple

honey87 Messages postés 119 Date d'inscription jeudi 2 avril 2009 Statut Membre Dernière intervention 9 novembre 2013 - 5 sept. 2011 à 18:44
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 6 sept. 2011 à 19:29
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
A voir également:

8 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
5 sept. 2011 à 19:42
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 -
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
6 sept. 2011 à 09:48
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 !
0
honey87 Messages postés 119 Date d'inscription jeudi 2 avril 2009 Statut Membre Dernière intervention 9 novembre 2013
6 sept. 2011 à 12:05
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");

?>
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
6 sept. 2011 à 14:30
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 ;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
6 sept. 2011 à 14:33
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 !
0
honey87 Messages postés 119 Date d'inscription jeudi 2 avril 2009 Statut Membre Dernière intervention 9 novembre 2013
6 sept. 2011 à 16:54
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
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
6 sept. 2011 à 18:37
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 !
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
6 sept. 2011 à 19:29
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 -
0
Rejoignez-nous