Checkbox et INSERT INTO

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Checkbox et INSERT INTO

par lucluc » 26 juil. 2006, 17:26

:oops: pas vu....

par zeus » 26 juil. 2006, 15:43

lucluc, pour tagger un sujet résolu, tu as un bouton "Resolu" en haut à geuche des threads dont tu es l'auteur ;)

Pour cette fois-ci, je modifie moi-même mais pense-y à l'avenir :D

Merci d'avance

par lucluc » 26 juil. 2006, 14:43

C'est sur que niveau lisibilité sur le site c'est carrément mieux.... mais dans le bloc note, pas de différences :wink:

Je vous remercie encore pour vos coups de mains et explications qui m'ont vraiment bien aiguillé. Soyez sur que je n'hesiterais pas a re-soliciter votre savoir

par Truc » 26 juil. 2006, 11:41

C'est surtout niveau lisibilité... tu ne trouves pas que les variables sautent aux yeux :)

Sinon le traitement est un peu plus rapide aussi.

Pour le champ en autoincrement pas besoin de le spécifier si les valeurs possibles l'ont été, ici : (id_event,id_cat)

par lucluc » 26 juil. 2006, 09:41

Arg!!! Pour la virgule dans la requete c'est une erreure que le copier/coller a répendu dans tout mon code!

Par contre, quel est la différence entre :
$sql = "INSERT INTO searchevent_tbl (id_se,id_event,id_cat) VALUES ('','$id_event','$id_cat')";
et
$sql = "INSERT INTO searchevent_tbl (id_event,id_cat) VALUES ('". $id_event ."', '". $id_cat ."')";
Il y a t-il une syntaxe qui soit plus rigoureuse que l'autre ?

par Cyrano » 26 juil. 2006, 07:37

Il y a une bizarrerie dans tes requêtes :
$sql = "INSERT INTO searchevent_tbl (id_se,id_event,id_cat) VALUES (',','$id_event','$id_cat')";
//-------------------------------------------------------------------^
Tu mets une virgule en clé primaire ?? proposition:
$sql = "INSERT INTO searchevent_tbl (id_event,id_cat) VALUES ('". $id_event ."', '". $id_cat ."')";

par lucluc » 26 juil. 2006, 01:01

Merci bien Truc. J'ai donc créé 3 tables : event, categorie et searchevent:

Code : Tout sélectionner

`event_tbl` (`id_event` int(11) NOT NULL auto_increment, `titre` varchar(100) NOT NULL default '', `date` date NOT NULL default '0000-00-00', `description` text NOT NULL, PRIMARY KEY (`id_event`), KEY `date` (`date`)) ENGINE=MyISAM;

Code : Tout sélectionner

`categorie_tbl` (`id_cat` tinyint(4) NOT NULL auto_increment, `categorie` char(12) NOT NULL default '', PRIMARY KEY (`id_cat`), KEY `categorie` (`categorie`));

Code : Tout sélectionner

`searchevent_tbl` (`id_se` int(11) NOT NULL auto_increment, `id_event` int(11) NOT NULL default '0', `id_cat` tinyint(4) NOT NULL default '0', PRIMARY KEY (`id_se`));
J'ai suivi tes instructions pour le remplissage des tables:
<?php
include("inc_connexion.php"); 
$titre = $_POST['ev_titre'];
$date = $_POST['ev_date'];
$desc = $_POST['ev_desc'];

if (!isset($_POST["mu"])&&!isset($_POST["th"])&&!isset($_POST["da"])
&&!isset($_POST["hu"])&&!isset($_POST["ex"])&&!isset($_POST["le"])
&&!isset($_POST["de"])&&!isset($_POST["co"])&&!isset($_POST["jp"]))
{
echo "vous devez séléctionner au moins une catégorie";
exit();
}

$sql_event = "INSERT INTO event_tbl(id_event,titre,date,description) VALUES(',','$titre','$date','$desc')";
mysql_query($sql_event) or die('Erreur SQL !'.$sql_event.'<br />'.mysql_error()); 

$id_event = mysql_insert_id();

if (isset($_POST["mu"]))
{
$req = mysql_query("SELECT id_cat FROM categorie_tbl WHERE categorie='Musique'");
while($data = mysql_fetch_assoc($req)) {$id_cat = $data['id_cat'];}
$sql = "INSERT INTO searchevent_tbl (id_se,id_event,id_cat) VALUES (',','$id_event','$id_cat')";mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
}

if (isset($_POST["th"]))
{
$req = mysql_query("SELECT id_cat FROM categorie_tbl WHERE categorie='Théâtre'");
while($data = mysql_fetch_assoc($req)) {$id_cat = $data['id_cat'];}
$sql = "INSERT INTO searchevent_tbl (id_se,id_event,id_cat) VALUES (',','$id_event','$id_cat')";mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
}

if (isset($_POST["da"]))
{
$req = mysql_query("SELECT id_cat FROM categorie_tbl WHERE categorie='Danse'");
while($data = mysql_fetch_assoc($req)) {$id_cat = $data['id_cat'];}
$sql = "INSERT INTO searchevent_tbl (id_se,id_event,id_cat) VALUES (',','$id_event','$id_cat')";mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
}

if (isset($_POST["hu"]))
{
$req = mysql_query("SELECT id_cat FROM categorie_tbl WHERE categorie='Humour'");
while($data = mysql_fetch_assoc($req)) {$id_cat = $data['id_cat'];}
$sql = "INSERT INTO searchevent_tbl (id_se,id_event,id_cat) VALUES (',','$id_event','$id_cat')";mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
}

if (isset($_POST["ex"]))
{
$req = mysql_query("SELECT id_cat FROM categorie_tbl WHERE categorie='Exposition'");
while($data = mysql_fetch_assoc($req)) {$id_cat = $data['id_cat'];}
$sql = "INSERT INTO searchevent_tbl (id_se,id_event,id_cat) VALUES (',','$id_event','$id_cat')";mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
}

if (isset($_POST["le"]))
{
$req = mysql_query("SELECT id_cat FROM categorie_tbl WHERE categorie='Lecture'");
while($data = mysql_fetch_assoc($req)) {$id_cat = $data['id_cat'];}
$sql = "INSERT INTO searchevent_tbl (id_se,id_event,id_cat) VALUES (',','$id_event','$id_cat')";mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
}

if (isset($_POST["de"]))
{
$req = mysql_query("SELECT id_cat FROM categorie_tbl WHERE categorie='Débat'");
while($data = mysql_fetch_assoc($req)) {$id_cat = $data['id_cat'];}
$sql = "INSERT INTO searchevent_tbl (id_se,id_event,id_cat) VALUES (',','$id_event','$id_cat')";mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
}

if (isset($_POST["co"]))
{
$req = mysql_query("SELECT id_cat FROM categorie_tbl WHERE categorie='Conférence'");
while($data = mysql_fetch_assoc($req)) {$id_cat = $data['id_cat'];}
$sql = "INSERT INTO searchevent_tbl (id_se,id_event,id_cat) VALUES (',','$id_event','$id_cat')";mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
}

if (isset($_POST["jp"]))
{
$req = mysql_query("SELECT id_cat FROM categorie_tbl WHERE categorie='Jeune Public'");
while($data = mysql_fetch_assoc($req)) {$id_cat = $data['id_cat'];}
$sql = "INSERT INTO searchevent_tbl (id_se,id_event,id_cat) VALUES (',','$id_event','$id_cat')";mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
}

echo "Vos infos on été ajoutées.<br />"; 

mysql_close();
?>

Et ça fonctionne! Encore un grand merci.

Par contre je ne suis pas sur que les tables et le code soit optimisés...

par Truc » 22 juil. 2006, 13:48

Salut,

Il ne faut pas qu'il y ait d'espaces entre les valeurs possibles du champ set:
$cat = implode(',',$_POST['ev_cat']); 
Sinon si une catégorie peut faire partie de plusieurs événement et un événement plusieurs catégories il faudrait crée 3 tables en tout.

Une avec les événements(id_evenement, autres champs) une avec les catégories (id_categorie, nom_catégorie) et une intermédiaire (id_evenement, id_categorie)pour faire le lien entre ces deux dernières.

Pour chaque enregistrement une ligne de données est crée dans la table événements puis pour chaque nouvelle catégorie de cet évenement un enregistrement dans la table intermédiaire (référencé par les id de l'évenement et ceux des catégories).

Checkbox et INSERT INTO

par lucluc » 22 juil. 2006, 12:00

Bonjour. Voilà le souci.
Je souhaite alimenter une table Event via un formulaire
Dans ce formulaire les personnes doivent choisir une ou plusieures catégories pour l'evenement, puis je souhaite recupérer ses informations et alimenter un champ catégorie dans ma table.

Premierement :

J'ai essayé cette methode:

Voici ma liste dans le fichier htlm

Code : Tout sélectionner

<form method="post" action="annonce.php" name="formulaire"> <input type="checkbox" name="ev_cat[]" value="Musique" />Musique<br /> <input type="checkbox" name="ev_cat[]" value="Théâtre" />Th&eacute;&acirc;tre<br /> <input type="checkbox" name="ev_cat[]" value="Danse" />Danse<br> <input type="checkbox" name="ev_cat[]" value="Humour" />Humour<br> <input type="checkbox" name="ev_cat[]" value="Exposition" /> Exposition<br /> <input type="checkbox" name="ev_cat[]" value="Lecture" /> Lecture<br /> <input type="checkbox" name="ev_cat[]" value="Débat" /> D&eacute;bat<br /> <input type="checkbox" name="ev_cat[]" value="Conférence" /> Conf&eacute;rence<br /> <input type="checkbox" name="i" value="Jeune Public" /> Jeune Public<br /> </form>
Et celui de mon fichier annonce
$cat = implode(', ',$_POST['ev_cat']);
$sql = "INSERT INTO event(id,titre,date,description,categorie) VALUES(',','$titre','$date','$desc','$cat')";
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
Avec cette solution je ne recupere que la premiere valeure cochée de la liste de checkbox
Le champ catégorie de ma table et de type
set('Musique', 'Théâtre', 'Danse', 'Humour', 'Exposition', 'Conférence', 'Lecture', 'Débat', 'Jeune Public')


Deuxiemement

D'un point de vu fonctionnel je ne sais pas s'il vaut mieux que je crée un champ categorie (de type SET) dans ma table Evénement ou créer une table Catégorie avec un champ (de type TINYINT) par categorie et faire un lien avec la table Evénement.
En effet pour les recherches par date (champ se trouvant ds la table Evénement) et par catégorie, je ne sais pas s'il est judicieux de rechercher dans 2 tables.