Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/09/2011, 18h50   #1
Invité de passage
 
Femme
Webdesigner
Inscription : janvier 2010
Messages : 23
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24
Localisation : Maroc

Informations professionnelles :
Activité : Webdesigner
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2010
Messages : 23
Points : 3
Points : 3
Par défaut Insérer checkbox dans une BDD avec choix multiple

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 ??

code html:

Code :
1
2
<font class="textes" > Souhaitez-vous être rappelé :</font></div>
<input name="appel" type="checkbox" value="matin">Le matin <input name="appel" type="checkbox" value="apres_midi">Après midi <input name="appel" type="checkbox" value="soiree">Soirée (17h à 19h)</div>

code d'insertion php :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<?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 !<br />'.$sql.'<br />'.mysql_error());
header("location:conf_contact.php");
 
?>
honey87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 19h54   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Salut !!

Pour le moment c'est normal car tes checkbox ont toutes le même nom, c'est-à-dire appel.
Pour que appel puisse contenir plusieurs valeurs il faut le "transformer" en tableau en rajoutant des [] à chaque name.

Exemple :

Code :
1
2
<input type="checkbox" name="appel[]" value="matin">
...
Les valeurs cochées seront dans le *tableau* $_POST['appel'].
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 20h06   #3
Invité de passage
 
Femme
Webdesigner
Inscription : janvier 2010
Messages : 23
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24
Localisation : Maroc

Informations professionnelles :
Activité : Webdesigner
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2010
Messages : 23
Points : 3
Points : 3
Citation:
Envoyé par Séb. Voir le message
Salut !!

Pour le moment c'est normal car tes checkbox ont toutes le même nom, c'est-à-dire appel.
Pour que appel puisse contenir plusieurs valeurs il faut le "transformer" en tableau en rajoutant des [] à chaque name.

Exemple :

Code :
1
2
<input type="checkbox" name="appel[]" value="matin">
...
Les valeurs cochées seront dans le *tableau* $_POST['appel'].

j'ai fais comme ceci , mais rien n'apparait dans la base de données, même si j'ai coché tous les choix

Code :
<input name="appel[]" type="checkbox" value="matin">Le matin <input name="appel[]" type="checkbox" value="apres_midi">Après midi <input name="appel[]" type="checkbox" value="soiree">Soirée (17h à 19h)
honey87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 20h18   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Montre le traitement du *tableau* $_POST['appel'].
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 12h07   #5
Invité de passage
 
Femme
Webdesigner
Inscription : janvier 2010
Messages : 23
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24
Localisation : Maroc

Informations professionnelles :
Activité : Webdesigner
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2010
Messages : 23
Points : 3
Points : 3
Citation:
Envoyé par Séb. Voir le message
Montre le traitement du *tableau* $_POST['appel'].


je suis encore débutante , c pour cela je sais pas ou mettre ça (*tableau* $_POST['appel'])

ca sera très généreux de ta part si tu me montre ou le mettre exactement dans ma page d'insertion , voilà le code complet de la page :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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 !<br />'.$sql.'<br />'.mysql_error());
header("location:conf_contact.php");
 
?>
honey87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 20h41   #6
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
$_POST['appel'] est un tableau.

Càd que si tu fais :

echo $_POST['appel'][0] tu afficheras la valeur de la 1re case cochée.
Si tu fais $_POST['appel'][$i] tu afficheras la valeur de la $i-ème case cochée.
Si aucune case n'est cosée alors $_POST['appel'] n'existera pas. Tu peux vérifier cela avec la fonction PHP isset( ).

Si tu veux stocker dans ta BdD les valeurs cochées séparées par des virgules tu peux faire à la place de $appel=$_POST['appel']; ce qui suit :

Code :
1
2
3
4
5
6
if ( isset($_POST['appel']) && is_array($_POST['appel']) ) {
    // Arrivé ici $_POST['appel'] existe et est bien un tableau
    $appel = implode(', ', $_POST['appel']) ;
} else {
    $appel = '' ;
}
Doc sur implode( ) : http://fr.php.net/implode
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 17h59   #7
Invité de passage
 
Femme
Webdesigner
Inscription : janvier 2010
Messages : 23
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 24
Localisation : Maroc

Informations professionnelles :
Activité : Webdesigner
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2010
Messages : 23
Points : 3
Points : 3
Citation:
Envoyé par Séb. Voir le message
$_POST['appel'] est un tableau.

Càd que si tu fais :

echo $_POST['appel'][0] tu afficheras la valeur de la 1re case cochée.
Si tu fais $_POST['appel'][$i] tu afficheras la valeur de la $i-ème case cochée.
Si aucune case n'est cosée alors $_POST['appel'] n'existera pas. Tu peux vérifier cela avec la fonction PHP isset( ).

Si tu veux stocker dans ta BdD les valeurs cochées séparées par des virgules tu peux faire à la place de $appel=$_POST['appel']; ce qui suit :

Code :
1
2
3
4
5
6
if ( isset($_POST['appel']) && is_array($_POST['appel']) ) {
    // Arrivé ici $_POST['appel'] existe et est bien un tableau
    $appel = implode(', ', $_POST['appel']) ;
} else {
    $appel = '' ;
}
Doc sur implode( ) : http://fr.php.net/implode


j'ai fais ça : (en local ca marché très bien mais quand je l'ai mis en ligne j'ai des messages d'erreure qui s'affiche )


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
if(isset($_POST) && !empty($_POST)){
$base='academia';
$conn=mysql_connect("localhost", "root", "") or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$db=mysql_select_db($base) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
 
$appels='';
 
if(isset($_POST['appel']) && !empty($_POST['appel'])){
$tableau=array('matin','apres_midi','soiree');
 
  foreach($_POST['appel'] as $k => $appel){
    if (in_array($appel, $tableau, true)) {
    echo $appels.=$appel.' ';
    }else{
    }
  }  
 
}else{
//rien 
}
 
unset($_POST['appel']);
 
/*securition du postage*/
foreach($_POST as $k => $v){
$v=mysql_real_escape_string(strip_tags($v));
$_POST[$k]=$v;
}
 
    extract($_POST);
    echo $sql="
 
    insert into inscription VALUES (
    NULL,
    '".$civilite."',
    '".$nom."',
    '".$prenom."',
    '".$email."',
    '".$tel."',
    '".$formation."',
    '".$question."',
    '".$appels."',
    '".$naissance."',
    '".$lieu."',
    '".$adresse."',
    '".$situation."',
    '".$reference."',
    '".$autre_ref."',
    NOW()
    )
    ";
 
 
  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*/
  }
 
 
 
 
}else{
//rien de poster
}
?>
honey87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 21h32   #8
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Quelles erreurs ?
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h17.


 
 
 
 
Partenaires

Hébergement Web