Page 1 sur 1

problème d'enregistrement checkbox

Posté : 13 juin 2006, 20:44
par artotal
Bonjour,
j'ai un problème pour enregistrer des cases à cocher dans ma table, je ne sais pas quoi prendre comme type, j'avais d'abord pris, enum puis tynyint(1), mais à l'enregistremnt des données aucne de ces façon ne fonctionne, voici le lien mais
http://creatif-web.be/projet/projet.php
le script en question est un peu long
 print <<<EOA
<form method="post" action="{$_SERVER['PHP_SELF']}">
<fieldset><legend>Projet</legend><p>
vous avez une idée ou un projet pour votre quartier ?<br />
merci de l’exprimer ci-dessous en quelques lignes :<br />
  <textarea name="leprojet" cols="40" rows="10" onmouseover="this.className='formaOver'" onmouseout="this.className='formaOut'"></textarea>   
</p><p>
Nous aimerions avoir quelques informations à votre sujet :
</p><p>
  Votre Prénom ou Pseudo :
  <input type="text" name="pseudo" onKeyUp="if(this.value!='') this.size=this.value.length" maxlength="70" minlength="30" onmouseover="this.className='formaOver'" onmouseout="this.className='formaOut'"
  />
  </p><p>
  <input name="sexe" type="radio" value="Homme" />Femme
  <input name="sexe" type="radio" value="Femme" />Homme
  </p><p>
  Votre âge :
  <input type="text" name="age" onKeyUp="if(this.value!='') this.size=this.value.length" maxlength="40" onmouseover="this.className='formaOver'" onmouseout="this.className='formaOut'"
  />
  </p>
  <p>
  Votre metier
  <input type="text" name="metier" onKeyUp="if(this.value!='') this.size=this.value.length" maxlength="70" minlength="30" onmouseover="this.className='formaOver'" onmouseout="this.className='formaOut'"
  />
  </p><p>
  Votre quartier
  <input type="text" name="quartier" onKeyUp="if(this.value!='') this.size=this.value.length" maxlength="70" minlength="30" onmouseover="this.className='formaOver'" onmouseout="this.className='formaOut'"
  />
  </p><p>
  Le ville auquel vous pensez :
  <input type="text" name="ville" onKeyUp="if(this.value!='') this.size=this.value.length" maxlength="70" minlength="30" onmouseover="this.className='formaOver'" onmouseout="this.className='formaOut'"
  />
  </p><p>
  Votre adress e-mail
  <input type="text" name="mail" onKeyUp="if(this.value!='') this.size=this.value.length" maxlength="70" minlength="30" onmouseover="this.className='formaOver'" onmouseout="this.className='formaOut'"
  />
  </p><p>
  <input type="hidden" name="date" onKeyUp="if(this.value!='') this.size=this.value.length" maxlength="70" minlength="30" onmouseover="this.className='formaOver'" onmouseout="this.className='formaOut'"
  />
  </p><p>
animaux<input name="animaux" type="checkbox" value="" />
arts & culture<input name="arts_culture" type="checkbox" value="" />
commerces<input name="commerces" type="checkbox" value="" />
embellissement du quartier<input name="embellissement_du_quartier" type="checkbox" value="" />
emploi & création activité<input name="emploi_creation_activite" type="checkbox" value="" />
enfants<input name="enfants" type="checkbox" value="" />
espaces verts & fêtes<input name="espaces_verts_fetes" type="checkbox" value="" />
handicap<input name="handicap" type="checkbox" value="" />
histoire & témoignages<input name="histoire_temoignages" type="checkbox" value="" />
loisirs<input name="loisirs" type="checkbox" value="" />
protection & environnement<input name="protection_environnement" type="checkbox" value="" />
solidarité<input name="solidarite" type="checkbox" value="" />
sports<input name="sports" type="checkbox" value="" />
transports<input name="transports" type="checkbox" value="" />
troisieme âge<input name="troisieme_age" type="checkbox" value="" />
adolescents<input name="adolescents" type="checkbox" value="" />
<input type="submit" value="Envoyer !" />
</fieldset> 
</form>
EOA;

$pseudo=mysql_real_escape_string($pseudo); //Protège les caractères spéciaux d'une commande SQL
$sexe=mysql_real_escape_string($sexe);
$age=mysql_real_escape_string($age);
$metier=mysql_real_escape_string($metier);
$ville=mysql_real_escape_string($ville);
$quartier=mysql_real_escape_string($quartier);
$mail=mysql_real_escape_string($mail);
$leprojet=mysql_real_escape_string($leprojet);
$animaux=mysql_real_escape_string($animaux);
$arts_culture=mysql_real_escape_string($arts_culture);
$commerces=mysql_real_escape_string($commerces);
$embellissement_du_quartier=mysql_real_escape_string($embellissement_du_quartier);
$emploi_creation_activite=mysql_real_escape_string($emploi_creation_activite);
$enfants=mysql_real_escape_string($enfants);
$espaces_verts_fetes=mysql_real_escape_string($espaces_verts_fetes);
$handicap=mysql_real_escape_string($handicap);
$histoire_temoignages=mysql_real_escape_string($histoire_temoignages);
$loisirs=mysql_real_escape_string($loisirs);
$protection_environnement=mysql_real_escape_string($protection_environnement);
$solidarite=mysql_real_escape_string($solidarite);
$sports=mysql_real_escape_string($sports);
$transports=mysql_real_escape_string($transports);
$troisieme_age=mysql_real_escape_string($troisieme_age);
$adolescents=mysql_real_escape_string($adolescents);

require ("inc/connexion.inc.php");
$lien=mysql_connect(SERVEUR, NOM, PASSE);
// test de connexion au serveur
if (!$lien) {
	echo "Désolé, connexion à " .SERVEUR ." impossible\n"; }
	echo "merci<br />";
// test de connexion à la base
if (!mysql_select_db(BASE, $lien)) {
	echo "Acces to base denied " .BASE ." impossible\n";
	}	else { echo "selection de la base ok<br />
	<p>j'enregistre ton ip :<span class=\"red\">".$_SERVER["REMOTE_ADDR"]."</span>, merci</p>"; }

if (!mysql_select_db(BASE, $lien)) {
	$erreurbdd=mysql_error();
	return false;
}
$requete="insert into eprojet (pseudo, sexe, age, metier, ville, quartier, mail, leprojet, animaux, arts_culture, commerces, embellissement_du_quartier, emploi_creation_activite, enfants, espaces_verts_fetes, handicap, histoire_temoignages, loisirs, protection_environnement, solidarite, sports, transports, troisieme_age, adolescents) values
 ('$pseudo', '$sexe', '$age', '$metier', '$ville', '$quartier', '$mail', '$leprojet', '$animaux', '$arts_culture', '$commerces', '$embellissement_du_quartier', '$emploi_creation_activite', '$enfants', '$espaces_verts_fetes', '$handicap', '$histoire_temoignages', '$loisirs', '$protection_environnement', '$solidarite', '$sports', '$transports', '$troisieme_age', '$adolescents')";
 if(!mysql_query($requete, $lien)) {
	$erreurbdd=mysql_error();
	return false;
	}
	echo "inserton des données ok";
Merci d'avance.

Posté : 13 juin 2006, 22:25
par jpaul
Il me semble que le type le plus indiqué pour ce genre de données est SET non ?

Posté : 13 juin 2006, 22:38
par Truc
Les deux devrais fonctionner mais un type tynyint(1) est bien mieux puisque coché = 1 , non coché = 0.

SET et ENUM se valent mais pas fait pour ce cas.

Affiche la requête générée pour éventuellement relever des anomalies.

Posté : 13 juin 2006, 23:49
par artotal
En faite je suis partis sur un traitement avec la fonction sort() puis dans un foreach();
J'ai fais plusieurs test.
Mais si je comprend bien, moi et le sql c'est pas le grand amour.
Et du coup, comment j'utilise SET ?
Comment on affiche les requete traité ?
;-)
	<?php
include ("./entete.php");
print <<<EAU
<form action="$PHP_SELF" method="post">
sports<input name="boite[]" type="checkbox" value="sports" />
transports<input name="boite[]" type="checkbox" value="transports" />
troisieme âge<input name="boite[]" type="checkbox" value="troisieme_age" />
adolescents<input name="boite[]" type="checkbox" value="adolescents" />
école<input name="boite[]" type="checkbox" value="ecole" />
<input type="submit" value="Envoyer !" />
</form>
EAU;
/*$b = $_POST["boite"];
sort($b);
foreach($b as $cle => $valeur) {
	echo "$cle et $valeur"; }*/

/*    $p = $_POST["boite"];
    for ($i=0; isset($p[$i]); $i++) {
        $a = $p[$i];
        echo count("=cochée".$a);

    }*/
require ("inc/connexion.inc.php");
$lien=mysql_connect(SERVEUR, NOM, PASSE);
// test de connexion au serveur
if (!$lien) {
	echo "Désolé, connexion à " .SERVEUR ." impossible\n"; }
	echo "merci<br />";
// test de connexion à la base
if (!mysql_select_db(BASE, $lien)) {
	echo "Acces to base denied " .BASE ." impossible\n";
	}	else { echo "selection de la base ok<br />"; }

if (!mysql_select_db(BASE, $lien)) {
	$erreurbdd=mysql_error();
	return false;
}
$requete="insert into latable (boite0, boite1, boite2, boite3, boite4) values
 ('boite[0]', 'boite[1]', '$boite[2]', '$boite[3]', '$boite[4]')";
 if(!mysql_query($requete, $lien)) {
	$erreurbdd=mysql_error();
	return false;
	}
	echo "inserton des données ok";

	?>

Posté : 13 juin 2006, 23:59
par jpaul
Fais des essais avec phpmyadmin, ca aide a comprendre.
Perso je n'ai jamais fait ce que tu cherches a faire mais il me semble que SET est le meilleur choix...
Heu je n'avais pas vu la réponse de Truc, du coup je doutes :
Pour moi enum, ne permet de mettre qu'une valeur à la fois (une seule case cochée) alors que si je comprends bien la doc, set permet d'en mettre plusieurs (genre bit field, donc possibilité de cocher plusieurs cases) non ?

Posté : 14 juin 2006, 00:04
par Truc
Comment on affiche les requete traité ?
echo $requete; 

Posté : 14 juin 2006, 00:19
par artotal
J'était déjà en tinyint(1)

Code : Tout sélectionner

Les deux devrais fonctionner mais un type tynyint(1) est bien mieux puisque coché = 1 , non coché = 0.
Mais justement coché ou pas coché sa affiche 0.J'en apelle à un éléphant, mdr, parceque moi je comprend plus rien ??????

echo $requete;
lol, merci.

EDIT
Si le résonnement du type est juste ce code devrait ajouter un enregistrement, ce qu'il fait mais pas avec la valeur "1". Elle reste à 0 coché ou pas coché.
Je conclus qu'il existe un autre moyen que de passer par le type, faire un traitement du résultat puis l'apellez avec un script ?
En faite il remplis pas en fonction de coché ou pas coché, donc ce n'est peur-être pas du type de données, mais plutôt une interaction avec javascript ?
	<?php
include ("./entete.php");
print <<<EAU
<form action="$PHP_SELF" method="post">
sports<input name="boite0" type="checkbox" value="sports" />
transports<input name="boite1" type="checkbox" value="transports" />
troisieme âge<input name="boite2" type="checkbox" value="troisieme_age" />
adolescents<input name="boite3" type="checkbox" value="adolescents" />
école<input name="boite4" type="checkbox" value="ecole" />
<input type="submit" value="Envoyer !" />
</form>
EAU;
require ("inc/connexion.inc.php");
$lien=mysql_connect(SERVEUR, NOM, PASSE);
// test de connexion au serveur
if (!$lien) {
	echo "Désolé, connexion à " .SERVEUR ." impossible\n"; }
	echo "merci<br />";
// test de connexion à la base
if (!mysql_select_db(BASE, $lien)) {
	echo "Acces to base denied " .BASE ." impossible\n";
	}	else { echo "selection de la base ok<br />"; }

if (!mysql_select_db(BASE, $lien)) {
	$erreurbdd=mysql_error();
	return false;
}
$requete="insert into latable (boite0, boite1, boite2, boite3, boite4) values
 ('boite0', 'boite1', 'boite2', 'boite3', 'boite4')";
 if(!mysql_query($requete, $lien)) {
	$erreurbdd=mysql_error();
	return false;
	}
	echo "inserton des données ok";
echo "$requete";
	?>

Posté : 14 juin 2006, 02:23
par artotal
J'ai trouvé une solution
print "<form action=\"$PHP_SELF\" method=\"post\">
sports<input name=\"boite0\" type=\"checkbox\" value=\"sports\" />
transports<input name=\"boite1\" type=\"checkbox\" value=\"transports\" />
troisieme âge<input name=\"boite2\" type=\"checkbox\" value=\"troisieme_age\" />
adolescents<input name=\"boite3\" type=\"checkbox\" value=\"adolescents\" />
école<input name=\"boite4\" type=\"checkbox\" value=\"ecole\" />
<input type=\"submit\" value=\"Envoyer !\" />
</form>
";
if (isset($data['boite0']) || $data['boite0'] <> '') echo "<input type='checkbox' name='boite0' checked='checked'>";
    else echo "<input type='checkbox' name='boite0'>";
    if (isset($data['boite1']) || $data['boite1'] <> '') echo "<input type='checkbox' name='boite1' checked='checked'>";
    else echo "<input type='checkbox' name='boite1'>";
    if (isset($data['boite2']) || $data['boite2'] <> '') echo "<input type='checkbox' name='boite2' checked='checked'>";
    else echo "<input type='checkbox' name='boite2'>";
    if (isset($data['boite3']) || $data['boite3'] <> '') echo "<input type='checkbox' name='boite3' checked='checked'>";
    else echo "<input type='checkbox' name='boite3'>";
    if (isset($data['boite4']) || $data['boite4'] <> '') echo "<input type='checkbox' name='boite4' checked='checked'>";
    else echo "<input type='checkbox' name='boite4'>";

Posté : 14 juin 2006, 12:47
par Invité
J'explique plus clairement, le bout de code :
http://www.developpez.net/forums/showth ... ost1057981
regarder la fin du post ;-)