Page 1 sur 2

Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 00:36
par Thors
Bonsoir tous le monde,
Voila je suis actuellement en BTS informatique de gestion et voila j'ai un projet à réaliser et bien sur ... me voila bloqué.... j'aurais bien besoin de votre aide s'il vous plait.
En fait voila je dois établir un formulaire qui va stocké les résultat dans une Base de donnée mysql via phpmyadmin.
Sur 3 des informations à remplir je dois pouvoir laisser le choix entre "oui " ou "non" via des checkbox.
Mon probléme etant que je n'arrive pas à rentrer dans ma base de données si la case est cochée ou non a savoir que je ne dois pas pouvoir cocher les deux..
actuellement avec le code que je vais vous exposer si je rentre si je coche une case il me rentre comme valeur "0" dans ma base de donnée mais si je ne coche pas la case il me produit une erreur.

Voila le code html Puis php dans l'espoir que vous pourrez m'aider à résoudre mon probléme merci d'avance!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Formulaire de commande</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link rel="stylesheet" href="style.css" type="text/css" media="screen">
</head>

<body>

<h1>Formulaire de commande</h1>

<form method="POST" action="transfert.php">

<table>
<tr>

<td>Civilité</td>

<td><label><input type="radio" name="civilite" value="Mr." />Mr.</label><label><input type="radio" name="civilite" value="Mlle / Mme" />Mlle / Mme</label></td>
</tr>
<tr>

<td>Nom</td>

<td><input name="nom" type="text"/></td>
</tr>
<tr>


<td>Pr&eacute;nom</td>

<td><input name="prenom" type="text" /></td>
</tr>
<tr>

<td>N&deg; t&eacute;l&eacute;phone</td>

<td><input name="telephone" type="text" /></td>
</tr>
<tr>

<td>Email</td>

<td><input name="email" type="text" /></td>
</tr>
<tr>
<td colspan="2" height="40" valign="bottom"><b>Premi&egrave;re page 297&euro;*/ Page suivante 97&euro;*</b></td>
</tr>
<tr>

<td>Nombres de pages</td>

<td><input name="nbpages" type="text" size="3"/></td>
</tr>
<tr>

<td>Photos suppl&eacute;mentaires (270&euro;*)</td>

<td><input name="photosupp" type="text" size="3"/></td>
</tr>
<tr>

<td>Vid&eacute;o suppl&eacute;mentaire (147&euro;*)</td>

<td><input name="videosupp" type="text" size="3"/></td>
</tr>
<tr>
<td colspan="2">

<label><input name="recup_logo" type="checkbox" value="oui" />

oui 

  <input name="recup_logo2" type="checkbox" value="non" />

  non 

R&eacute;cup&eacute;ration logo (27&euro;*)</label>

  <br />

<label><input name="crea_logo" type="checkbox" value="oui" /> 

Cr&eacute;ation  logo (157&euro;*)</label>

<br />

<label><input name="newsletter" type="checkbox" value="oui" /> 

Newsletter (167&euro;*)</label>
</td>
</tr>
<tr>
<td colspan="2" height="40" valign="bottom"><b>Commentaires</b></td>

</tr>
<tr>
<td colspan="2"><textarea name="commentaire" rows="10"></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Envoyer"></td>
</tr>
</table>

<br />

<i>* Tous les prix afficher ci-dessus sont Hors-Taxe</i>
</form>
</body>
</html>

PHP maintenant
[23:34:36] BABACAR: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Formulaire de commande</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="style.css" type="text/css" media="screen">
</head>

<body>

<?php
$maconnexion=mysql_connect("localhost","root","") or die ("erreur de connexion de serveur");
if ( ! $maconnexion ) die ("Connexion impossible");
mysql_select_db("exo2btsig",$maconnexion) or die ("erreur de connexion à la base exo2btsig"); 

mysql_query("INSERT INTO `clients` VALUES (NULL , '".$_POST['civilite']."', '".$_POST['nom']."', '".$_POST['prenom']."', '".$_POST['telephone']."', '".$_POST['email']."', '".$_POST['nbpages']."', '".$_POST['photosupp']."', '".$_POST['videosupp']."', '".$_POST['recup_logo']."', '".$_POST['crea_logo']."', '".$_POST['newsletter']."', '".$_POST['commentaire']."')") or die ("Requête incorrecte");

echo "".$_POST['civilite']." ".$_POST['nom'].", votre commande a bien été prise en compte !";

mysql_close($maconnexion);
?>

</body>
</html>

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 00:52
par stealth35
hello,

2 solutions

1 : a coup de javascript tu simules un 0 (value="0" checked="checked")
2 : dans ton PHP tu fais une condition

sinon protege t'es valeur, n'utilise pas POST direct dans ta requete, utilise "exit" au lieu de "die", mysql_close ne sert pas dans le sens ou la connexion se ferme automatiquement a la fin du script (mais ta bien passé la ressource en parametre c'est un bon point)

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 00:54
par Thors
peux tu me donner plus de détail? car la je nage complétement dans le flou a vrai dire ... Je n'ai aucune connaissance en javascript.. je préfére donc rester en php, si tu pouvais m'expliquer avec plus de détail ca serait sympas stp merci

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 01:02
par stealth35
tu c'est preferable de creer des variables comme
$newsletter= $_POST['newsletter'];

if($newsletter != 'oui')
{
    $newsletter = 'non';
}

et sinon coté HTML, les &eacute et comagnie ca sert a rien, le content type va au dessus du title, et sinon c'est pas top d'utilisé les tableau pour la mise en page, mais c'est grave le reste c'est propre

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 01:03
par Thors
ok merci beaucoup je teste ca et je reviens te donner le résultat merci!

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 01:13
par Thors
je viens de tester en mettant le code donné au dessus de la connection à la base de données sans rien toucher au HTML,
Après essai cela ne change rien dans ma base de données cela me met toujours 0comme valeur.
Mais je me suis rendu compte que dans ma base de données mon champ 'clientnewzletter" je l'ai mis en type "int" et de taille "1" c'est peux être mon probléme non?

Ps: pourrais tu me réexpliquer ce que tu me disais à propos de la partie html?

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 01:18
par stealth35
je viens de tester en mettant le code donné au dessus de la connection à la base de données sans rien toucher au HTML,
Après essai cela ne change rien dans ma base de données cela me met toujours 0comme valeur.
Mais je me suis rendu compte que dans ma base de données mon champ 'clientnewzletter" je l'ai mis en type "int" et de taille "1" c'est peux être mon probléme non?

Ps: pourrais tu me réexpliquer ce que tu me disais à propos de la partie html?
ouai, mais c'est pas grave, dans ton HTML au lieu de oui ou non en value, tu met 0 ou 1,

et pour le html tu encodes les carateres ca sert pas a grand chose, ex: (prénom = p&ecutenom), si tes fichiers sont bien encode tu peu ecrire ca normalement

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 01:27
par Thors
oui j'ai changer l'encodage pour ca c'est modifier merci et pour les valeurs pareil mais aprés essai rien ne change pour mieux t'en rendre compte peux être ai-je commis une erreur de compréhenssion je vais copier mes fichier modifier.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>Formulaire de commande</title>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
  <link rel="stylesheet" href="style.css" type="text/css" media="screen">
 </head>

 <body>

  <h1>Formulaire de commande</h1>

  <form method="POST" action="transfert.php">

   <table>
    <tr>
     <td>Civilité</td>
     <td><label><input type="radio" name="civilite" value="Mr." />Mr.</label><label><input type="radio" name="civilite" value="Mlle / Mme" />Mlle / Mme</label></td>
    </tr>
    <tr>
     <td>Nom</td>
     <td><input name="nom" type="text"/></td>
    </tr>
    <tr>    
     <td>Prénom</td>
     <td><input name="prenom" type="text" /></td>
    </tr>
    <tr>
     <td>N° téléphone</td>
     <td><input name="telephone" type="text" /></td>
    </tr>
    <tr>
     <td>Email</td>
     <td><input name="email" type="text" /></td>
    </tr>
    <tr>
     <td colspan="2" height="40" valign="bottom"><b>Premiére page 297&euro;*/ Page suivante 97&euro;*</b></td>
    </tr>
    <tr>
     <td>Nombres de pages</td>
     <td><input name="nbpages" type="text" size="3"/></td>
    </tr>
    <tr>
     <td>Photos supplémentaires (270&euro;*)</td>
     <td><input name="photosupp" type="text" size="3"/></td>
    </tr>
    <tr>
     <td>Vidéo supplémentaire (147&euro;*)</td>
     <td><input name="videosupp" type="text" size="3"/></td>
    </tr>
    <tr>
     <td colspan="2">
      <label><input name="recup_logo" type="checkbox" value="0" />
      oui 
        <input name="recup_logo2" type="checkbox" value="0" />
        non 
      Récupération logo (27&euro;*)</label>
       <br />
      <label><input name="crea_logo" type="checkbox" value="0i" /> 
      Création  logo (157&euro;*)</label>
      <br />
      <label><input name="newsletter" type="checkbox" value="0" /> 
      Newsletter (167&euro;*)</label>
     </td>
    </tr> 
    <tr>
     <td colspan="2" height="40" valign="bottom"><b>Commentaires</b></td>     
    </tr> 
    <tr>
     <td colspan="2"><textarea name="commentaire" rows="10"></textarea></td>
    </tr>
    <tr>
     <td colspan="2"><input type="submit" value="Envoyer"></td>
    </tr>
   </table>
   
   <br />
   
   <i>* Tous les prix afficher ci-dessus sont Hors-Taxe</i>
  </form>
 </body>
</html>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>Formulaire de commande</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="stylesheet" href="style.css" type="text/css" media="screen">
 </head>

 <body>

 <?php 
$newsletter= $_POST['newsletter'];

if($newsletter != 'oui')
{
    $newsletter = 'non';
}
 $maconnexion=mysql_connect("localhost","root","") or die ("erreur de connexion de serveur");
 if ( ! $maconnexion ) die ("Connexion impossible");
 mysql_select_db("exo2btsig",$maconnexion) or die ("erreur de connexion à la base exo2btsig"); 

 mysql_query("INSERT INTO `clients` VALUES (NULL , '".$_POST['civilite']."', '".$_POST['nom']."', '".$_POST['prenom']."', '".$_POST['telephone']."', '".$_POST['email']."', '".$_POST['nbpages']."', '".$_POST['photosupp']."', '".$_POST['videosupp']."', '".$_POST['recup_logo']."', '".$_POST['crea_logo']."', '".$_POST['newsletter']."', '".$_POST['commentaire']."')") or die ("Requête incorrecte");
 
 echo "".$_POST['civilite']." ".$_POST['nom'].", votre commande a bien été prise en compte !";
 
 mysql_close($maconnexion); 
 ?>

 </body>
</html>

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 01:29
par Thors
dans ma requete ne dois-je pas remplacer le '".$_POST['newsletter'] par '$newsletter' ?

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 01:32
par stealth35
voila :wink:

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 01:33
par Thors
la réponse c'est ce que je viens de dire? lol je vais essayer merci par contre cela ne va t'il pas poser de probléme si je n'est pas citer mes champs de ma table les uns apres les autres au debut de la requete?



Ps je viens de tester en remplacant seulement ce que j'avais dit et cela ne suffit pas apperement si je ne coche pas la case il m'affiche le message la:
Notice: Undefined index: newsletter in C:\wamp\www\Exo2BTS\transfert.php on line 12
Mlle / Mme delassus, votre commande a bien été prise en compte !
Et si je la coche il reste quand même à 0 dans la base de donées ^^

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 01:40
par stealth35
la réponse c'est ce que je viens de dire? lol je vais essayer merci par contre cela ne va t'il pas poser de probléme si je n'est pas citer mes champs de ma table les uns apres les autres au debut de la requete?
tu fais la partie la plus chiante "la gestion de forumlaire", faut tester tout les valeurs avant, si elle n'existe pas dans ta requete POST php va pas comprendre non plus.

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 01:44
par Thors
désolé je n'ai pas compris ta réponse, visiblement c'est pas ma semaine ca fait deux jours que je m'arrache les cheveux avec ce probleme ...

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 01:48
par stealth35
si ton champs "prénom" n'est pas remplis $_POST['prenom'] n'exsite pas et tu auras une erreur PHP

Re: Prendre en compte une checkbox coché ou non dans ma BDD

Posté : 03 févr. 2010, 02:07
par Thors
si j'ai bien compris ces modifications que j'ai faites correspondent à ce que tu viens de me dire ou pas du tout?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>Formulaire de commande</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="stylesheet" href="style.css" type="text/css" media="screen">
 </head>

 <body>

 <?php 
$civilite=$_POST['civilite'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$tel=$_POST['telephone'];
$mail=$_POST['email'];
$nbpages=$_POST['nbpages'];
$phsup=$_POST['photosupp'];
$vidsup=$_POST['videosupp'];
$text=$_POST['commentaire'];
$recuplogo=$_POST['recup_logo'];
if($recuplogo != 'oui')
{
    $recuplogo = 'non';
}
$crealogo=$_POST['crea_logo'];
if($crealogo != 'oui')
{
    $crealogo = 'non';
}
$newsletter= $_POST['newsletter'];

if($newsletter != 'oui')
{
    $newsletter = 'non';
}
 $maconnexion=mysql_connect("localhost","root","") or die ("erreur de connexion de serveur");
 if ( ! $maconnexion ) die ("Connexion impossible");
 mysql_select_db("exo2btsig",$maconnexion) or die ("erreur de connexion à la base exo2btsig"); 

 mysql_query("INSERT INTO clients(ClientCivilite,ClientNom,ClientPrenom,ClientTelephone,ClientEmail,ClientPages,ClientPhotosSupp,ClientVideoSupp,ClientRecupLogo,ClientCreationLogo,ClientNewsletter,ClientCommentaire) VALUES ('$civilite', '$nom', '$prenom', '$tel', '$mail', '$nbpages', '$phsup', '$vidsup', '$recuplogo', '$crealogo', '$newsletter', '$text')") or die ("Requête incorrecte");
 
 echo "".$_POST['civilite']." ".$_POST['nom'].", votre commande a bien été prise en compte !";
 
 mysql_close($maconnexion); 
 ?>

 </body>
</html>


Malgrès ces modifications le probléme reste entier lorsque je ne clique pas sur la case il me renvoie une erreur et lorsque je coche la case il me renvoie la valeur 0 dans la base de donnée