Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
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 09/05/2007, 00h14   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 87
Points : 10
Points : 10
Par défaut probleme checkbox et mysql

bonsoir voila j'ai fais un formulaire en html et il y a des checkbox dont la valeur est stocké dans une base de donnée, enfin c'est ce que je voudrais faire car je n'y arrive pas voici mon code:

<input type="checkbox" name="interets" value="Tracteur" />Tracteur<select name="quantite">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>


<input type="checkbox" name="interets" value="Camion" />Camion<select name="quantite2">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>

<input type="checkbox" name="interets" value="Voiture" />Voiture<select name="">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
faucon54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 13h29   #2
Membre habitué
 
Inscription : mai 2006
Messages : 139
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2006
Messages : 139
Points : 137
Points : 137
Tes cases à cocher portent toutes le même nom (attribut name). Une "checkbox" ne fonctionne pas comme un "radio", il faut que tu donnes un nom différent à chacune d'elle :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<input type="checkbox" name="interets_tracteur" value="Tracteur" />Tracteur<select name="quantite">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>

<input type="checkbox" name="interets_camion" value="Camion" />Camion<select name="quantite2">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>

<input type="checkbox" name="interets_voiture" value="Voiture" />Voiture<select name="">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
Le champ value te permet uniquement de redéfinir la valeur envoyée à la page cible (par défaut "on"). Si la case n'est pas cochée, le champ ne sera pas envoyée.
gk14fire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 13h44   #3
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 87
Points : 10
Points : 10
merci pour ta réponse mais j'avais essayé cette version mais lorsque que par exemple je cliquais sur 2 catégorie et pas la 3emes alors mysql me retournais une erreur du style qu'une variable n'avait pas été renseignée du coup je suis obligé de cocher les trois cases sinon je n'accede pas à ma page de réponse savez vous pourquoi ce phénomene? je rappel que mon formulaire enregistre les données en mysql et puis elles sont transmises dans un pdf grace à fpdf, voila merci d'avance pour votre réponse.
faucon54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 13h53   #4
Membre habitué
 
Inscription : mai 2006
Messages : 139
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2006
Messages : 139
Points : 137
Points : 137
Dans ta page qui réceptionne les données, il faut que tu fasses le test pour savoir si la variable a été postée ou non.
Code :
1
2
3
4
5
6
7
8
9
<?php
IF (isset($_POST['interets_voiture']) && $_POST['interets_voiture'] == "Voiture") {
   // La case a été cochée
   ...
} else {
   // La case n'a pas été cochée
   ...
}
?>
Il faut que tu répètes ce test pour chaque case à cocher.
Si ton nombre de cases est dynamique, le plus simple est de les données sous forme de tableau :
Code :
1
2
3
4
5
6
 
<input type="checkbox" name="interets[tracteur]" />
...
<input type="checkbox" name="interets[camion]" />
...
<input type="checkbox" name="interets[voiture]" />
Du coup ton le code PHP de réception des informations, tu boucles sur les éléments de la variable POST "interets" qui est un tableau.
gk14fire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 14h05   #5
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 87
Points : 10
Points : 10
merci pour cette réponse mais faut que j'utilise les deux script ou juste un des deux?
faucon54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 14h22   #6
Membre habitué
 
Inscription : mai 2006
Messages : 139
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2006
Messages : 139
Points : 137
Points : 137
Ca dépend de tes besoins.

Pour la première solution, chaque checkbox a un nom, et tu codes le test que je t'ai mis dans mon post précédent pour chaque checkbox. C'est facile à faire mais un peu répétitif, et surtout pas très évolutif.

La deuxième solution (avec un tableau) est un poil plus embêtante à mettre en place, mais au moins tu pourras ajouter des centres d'intérêts sans avoir à coder le test correspondant dans la page de traitement. Ce sera fait de façon dynamique puisque tu traiteras un tableau de centres d'intérêts.
gk14fire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 14h22   #7
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 87
Points : 10
Points : 10
dans mon fichier formulaire j'ais mis ca:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<input type="checkbox" name="interets_tracteur" value="Tracteur" />Tracteur<SELECT name="quantite">
<OPTION value="1">1</option>
<OPTION value="2">2</option>
<OPTION value="3">3</option>
</select>
 
<input type="checkbox" name="interets_camion" value="Camion" />Camion<SELECT name="quantite2">
<OPTION value="1">1</option>
<OPTION value="2">2</option>
<OPTION value="3">3</option>
</select>
 
<input type="checkbox" name="interets_voiture" value="Voiture" />Voiture<SELECT name="">
<OPTION value="1">1</option>
<OPTION value="2">2</option>
<OPTION value="3">3</option>
</select>
dans mon fichier qui récupere les données j'ai mis comme ca je sais que j'ai mal placé votre code mais en vrai je ne sais pas ou le placer car de tte facon j'ai une erreur:
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
<?php 
session_start(); 
 
include('connection.inc.php'); 
$query = "INSERT INTO contact
 
(idcontact,adress_client,code_postal,civilite,ville,pays,interets_tracteur,nom,quantite,quantite2,inter
 
ets_camion,date,interets_voiture) VALUES('','".$_POST['adress_client']."','".$_POST
 
['code_postal']."','".$_POST['civilite']."','".$_POST['ville']."','".$_POST['pays']."','".$_POST
 
['interets_tracteur']."','".$_POST['nom']."','".$_POST['quantite']."','".$_POST
 
['quantite2']."','".$_POST['interets_camion']."','".$_POST['date']."','".$_POST
 
['interets_voiture']."')";
 
IF (isset($_POST['interets_tracteur']) && $_POST['interets_tracteur'] == "tracteur") {
   // La case a été cochée
IF (isset($_POST['interets_camion']) && $_POST['interets_camion'] == "camion") {
   // La case a été cochée
IF (isset($_POST['interets_voiture']) && $_POST['interets_voiture'] == "Voiture") {
   // La case a été cochée
   ...
} else {
   // La case n'a pas été cochée
   ...
 
 
$result = mysql_query($query) or die ('Erreur SQL !<br>'.mysql_error()); 
 
$sql="SELECT idcontact FROM contact WHERE nom = '".$_POST['nom']."'"; 
 
$soluce = mysql_query($sql); 
$row = mysql_fetch_array($soluce); 
 
$_SESSION['idcontact'] = $row['idcontact']; 
 
header('location: test.php'); 
 
?>
voila merci
faucon54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 14h30   #8
Membre habitué
 
Inscription : mai 2006
Messages : 139
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2006
Messages : 139
Points : 137
Points : 137
Par rapport à ce que tu as fait, il faut que tu mettes les tests avant l'insertion. Dans ce que tu as fait, tu fais le test après l'insertion, donc ça plante.

isset($variable) te permet de savoir si une variable existe ou non.

Voici ton code corrigé :
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
<?php
session_start();
 
include('connection.inc.php');
 
// Test si les VARIABLES existent
IF (isset($_POST['interets_tracteur']) && $_POST['interets_tracteur'] == "Tracteur") {
   $tracteur = $_POST['interets_tracteur'];
} else {
   $tracteur = "";
}
IF (isset($_POST['interets_voiture']) && $_POST['interets_voiture'] == "Voiture") {
   $voiture = $_POST['interets_voiture'];
} else {
   $voiture = "";
}
IF (isset($_POST['interets_camion']) && $_POST['interets_camion'] == "Camion") {
   $camion = $_POST['interets_camion'];
} else {
   $camion = "";
}
 
$query = "INSERT INTO contact (idcontact,adress_client,code_postal,civilite,ville,pays,interets_tracteur,nom,quantite,quantite2,interets_camion,date,interets_voiture) VALUES('','".$_POST['adress_client']."','".$_POST['code_postal']."','".$_POST['civilite']."','".$_POST['ville']."','".$_POST['pays']."','".$tracteur."','".$_POST['nom']."','".$_POST['quantite']."','".$_POST['quantite2']."','".$camion."','".$_POST['date']."','".$voiture."')";
 
$result = mysql_query($query) OR die ('Erreur SQL !<br>'.mysql_error()); 
 
$sql="SELECT idcontact FROM contact WHERE nom = '".$_POST['nom']."'"; 
 
$soluce = mysql_query($sql); 
$row = mysql_fetch_array($soluce); 
 
$_SESSION['idcontact'] = $row['idcontact']; 
 
header('location: test.php'); 
 
?>
gk14fire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 14h32   #9
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 87
Points : 10
Points : 10
j'ai essayer l'autre version avec les tableau mais ma la valeur que je récuperer est "array" et non tracteur ou voiture ou camion: voici comment j'ai mis:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<input type="checkbox" name="interets[tracteur]" />
Tracteur<SELECT name="quantite">
<OPTION value="1">1</option>
<OPTION value="2">2</option>
<OPTION value="3">3</option>
</select>
 
<input type="checkbox" name="interets[camion]" />Camion<SELECT name="quantite2">
<OPTION value="1">1</option>
<OPTION value="2">2</option>
<OPTION value="3">3</option>
</select>
 
<input type="checkbox" name="interets[voiture]" />Voiture<SELECT name="">
<OPTION value="1">1</option>
<OPTION value="2">2</option>
<OPTION value="3">3</option>
</select>
après dans mon traitemen j'ai mis:
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
<?php 
session_start(); 
 
include('connection.inc.php'); 
$query = "INSERT INTO contact
 
(idcontact,adress_client,code_postal,civilite,ville,pays,nom,quantite,quantite2,date,interets) VALUES
 
('','".$_POST['adress_client']."','".$_POST['code_postal']."','".$_POST['civilite']."','".$_POST
 
['ville']."','".$_POST['pays']."','".$_POST['nom']."','".$_POST['quantite']."','".$_POST
 
['quantite2']."','".$_POST['date']."','".$_POST['interets']."')";
 
 
$result = mysql_query($query) OR die ('Erreur SQL !<br>'.mysql_error()); 
 
$sql="SELECT idcontact FROM contact WHERE nom = '".$_POST['nom']."'"; 
 
$soluce = mysql_query($sql); 
$row = mysql_fetch_array($soluce); 
 
$_SESSION['idcontact'] = $row['idcontact']; 
 
header('location: test.php'); 
 
?>
et puis dans mon code fpdf:
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
<?php
ob_start(); 
session_start();
// (c) Xavier Nicolay
// Exemple de génération de devis/facture PDF
 
define('FPDF_FONTPATH','font/');
include("connection.inc.php");
require('invoice.php');
 
//SELECT the Products you want TO SHOW IN your PDF file 
$result=mysql_query("select 
 
adress_client,code_postal,civilite,ville,pays,nom,quantite,quantite2,date,interets from contact WHERE 
 
idcontact='".$_SESSION['idcontact']."' ORDER BY nom"); 
$number_of_contact = mysql_numrows($result); 
 
 
 
 
//FOR each row, ADD the FIELD TO the corresponding COLUMN 
while($row = mysql_fetch_array($result)) 
{ 
    $adress_client = $row["adress_client"];
    $code_postal 
= $row["code_postal"];
    $civilite 
= $row["civilite"];
    $ville = $row["ville"];
    $pays 
= $row["pays"];
    $nom = $row["nom"];
    $quantite = $row["quantite"];
    $quantite2 = $row["quantite2"];
    $date 
= $row["date"];
    $interets 
= $row["interets"];
} 
mysql_close(); ect...
faucon54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2007, 15h25   #10
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 87
Points : 10
Points : 10
merci beaucoup, le code corrigé que vous m'avez fait fonctionne bien, le seul truc( eh oui!) c'est que les données que je récupere je voudrais qu'elles s'affichent l'une après l'autre, je m'explique:

lorque que la personne selectionne tracteur + voiture ces données je les insere dans un colonne nommé désignation, mais mon probleme c'est comme on a pas sélectionné camion il y a un trou entre tracteur et voiture ca veut dire si l'on avait pas sélectionné tracteur ni camion il y aurait deux espace blanc au dessu ce qui n'est pas très esthetique, étant donné que ma liste définitive sera grande je n'aimerais pas qu'il y ai un trou béant, j'ai cherché mais sans réponse avez vous peut etre une idée?
faucon54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 21h04   #11
Membre habitué
 
Avatar de Giantrick
 
Inscription : janvier 2007
Messages : 269
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : janvier 2007
Messages : 269
Points : 146
Points : 146
Citation:
Envoyé par faucon54
lorque que la personne selectionne tracteur + voiture ces données je les insere dans un colonne nommé désignation, mais mon probleme c'est comme on a pas sélectionné camion il y a un trou entre tracteur et voiture ca veut dire si l'on avait pas sélectionné tracteur ni camion il y aurait deux espace blanc au dessu ce qui n'est pas très esthetique, étant donné que ma liste définitive sera grande je n'aimerais pas qu'il y ai un trou béant, j'ai cherché mais sans réponse avez vous peut etre une idée?

Dans ton code de génération de ton fichier pdf (si c'est là qu'est le tableau récap dont tu parles ci-dessus) tu dois insérer des conditions en fonction des variables présentes ou non.

Tu peux utiliser isset($variable) te permet de savoir si une variable existe ou non. (comme te l'a mentionné gk14fire plus haut).

Du genre :
Code :
1
2
3
4
5
6
7
8
9
 
IF ((isset($tracteur!="") OR (isset($camion!="") OR (isset($voiture!=""))
   {
   // tu inserts la partie de ton tableau avec les valeurs à afficher
}
Else
{
// tu inserts un retour de tableau uniquement afin de ne pas afficher de ligne vide.
}
Tu poses ce code dans la boucle de lecture WHILE de requête SQL et tu devrais avoir un tableau propre en fonction des choix de l'utilisateur.

Si cela ne fonctionne pas il faudra que tu me fournisses ton code d'affichage qui pose problème et je te donnerai la solution (enfin normalement)

A plus
__________________
-----------------------------------------------------
- Etre clair dans sa demande, facilite les réponses.
- Organiser son travail et sa programmation est indispensable à une rapide évolution.
- Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

Le géant du sud-ouest...
Giantrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web