formulaire pour alimenter d'un coup plusieurs fiches

Petit nouveau ! | 2 Messages

29 août 2006, 12:34

Bonjour,

je suis à la recherche d'un tutoriel pour réaliser un formulaire amené à alimenter d'un seul coup plusieurs fiches d'une même table. Tous les tutoriels que j'ai trouvé jusqu'alors ne me permettent que d'alimenter mes tables fiches par fiche.

En espérant ne pas me tromper de forum,

Bien cordialement

ViPHP
ViPHP | 3607 Messages

29 août 2006, 15:04

Je ne pense pas qu'il éxiste de tutoriels tout fait sur ce sujet...
Par contre si tu nous montres la structure de ta table, et que tu expliques un peu plus que "plusieurs fiches d'un coup", je pense que moi ou d'autres personnes plus aguéries pourront te mettre sur la voie ;-)

Petit nouveau ! | 2 Messages

29 août 2006, 19:54

Tu as raison, je vais être plus détaillé dans mes explications :
-j'ai deux tables (même trois pour l'instant mais seulement 2 nous intéressent dans ce cas précis) ;
-dans une première table intitulée "liste_materiel" (voir code sql plus bas), j'ai la liste du matériel présent dans la cuisine pédagogique du lycée :
|id_materiel|designation_materiel|caracteristique_materiel|quantite_mini_materiel|lei_rangement_materiel|preconises|
-dans la seconde table intitulée "verifie_materiel" (liée sur le champ id_materiel, enfin j'espère !) j'ai les inventaires réalisées par les élèves (appelés agents ici) :
|id_verif_materiel|quantite_verif_materiel|date_auto_verif_materiel|remarque_verif_materiel|id_materiel|id_agent|

Pour l'instant j'ai un formulaire affichant une liste déroulante de tous les matériels organisés par lieu_de_rangement_materiel (voir code plus bas) et les élèves doivent saisir la quantité (+ d'éventuelles remarques) un a un pour chaque matériel présent.

J'aimerai pouvoir présenter aux élèves une page de formulaire où ils pourraient choisir d'abord le lieu_de_rangement_materiel (de 1 à 9) et qui afficherai l'ensemble du materiel présent dans ce lieu avec la possibilité de saisir toutes les quantités (inventaire matériel par matériel). Il n'y aurait qu'un bouton de validation en bas de page pour valider tout le placard. Ensuite, l'élève passe éventuellement à un autre placard (ou lieu_de_rangement_materiel).

Les tables sont les suivantes :


[code]
-- phpMyAdmin SQL Dump
-- version 2.8.2.4
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Mardi 29 Août 2006 à 20:48
-- Version du serveur: 4.1.12
-- Version de PHP: 5.0.4
--
-- Base de données: `gestion_cuisine`
--

-- --------------------------------------------------------

--
-- Structure de la table `liste_agents`
--

CREATE TABLE `liste_agents` (
`id_agent` int(11) NOT NULL auto_increment,
`nom_agent` varchar(50) NOT NULL default '',
`prenom_agent` varchar(50) default NULL,
`eleve_ou_enseignant` varchar(20) NOT NULL default 'eleve',
`classe_eleve` varchar(15) NOT NULL default '1_CAP_ATMFC',
`mdp_agent` varchar(10) NOT NULL default '123456',
PRIMARY KEY (`id_agent`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

--
-- Contenu de la table `liste_agents`
--

INSERT INTO `liste_agents` (`id_agent`, `nom_agent`, `prenom_agent`, `eleve_ou_enseignant`, `classe_eleve`, `mdp_agent`) VALUES (1, 'HARDOUIN', 'Patrice', 'enseignant', '1_CAP_ATMFC', 'patlelap1'),
(2, 'POUZIER', 'Caroline', 'enseignant', '2_CAP_ATMFC', '123456');

-- --------------------------------------------------------

--
-- Structure de la table `liste_materiel`
--

CREATE TABLE `liste_materiel` (
`id_materiel` int(11) NOT NULL auto_increment,
`designation_materiel` varchar(100) NOT NULL default '',
`caracteristiques_materiel` varchar(200) default NULL,
`quantite_mini_materiel` int(11) NOT NULL default '0',
`lieu_rangement_materiel` varchar(50) default NULL,
`preconises` varchar(3) NOT NULL default 'non',
PRIMARY KEY (`id_materiel`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=129 ;

--
-- Contenu de la table `liste_materiel`
--

INSERT INTO `liste_materiel` (`id_materiel`, `designation_materiel`, `caracteristiques_materiel`, `quantite_mini_materiel`, `lieu_rangement_materiel`, `preconises`) VALUES (1, 'armoire froide positive', '1400L', 1, NULL, 'oui'),
(2, 'armoire négative', NULL, 1, NULL, 'oui'),
(3, 'bain marie', NULL, 1, NULL, 'oui'),
(4, 'balance de table', '10kg', 1, '5', 'oui'),
(5, 'balance électronique', NULL, 6, '5', 'oui'),
(6, 'batteurs électriques', NULL, 4, NULL, 'oui'),
(7, 'batteur mélangeur 4L/PM900', NULL, 1, NULL, 'oui'),
(8, 'batteur mélangeur collectivité', 'petit modèle', 1, NULL, 'oui'),
(9, 'cellule de refroidissement', NULL, 1, NULL, 'oui'),
(10, 'cafetières', NULL, 2, '1', 'oui'),
(11, 'centrale d''hygiène', NULL, 1, NULL, 'oui'),
(12, 'chariot de distribution', 'liaison chaude et liaison froide', 2, NULL, 'oui'),
(13, 'chariots dépose plateaux', '12 niveaux X2', 3, NULL, 'oui'),
(14, 'chariots vaisselle propre', '3 plateaux', 2, NULL, 'oui'),
(15, 'comptoir de distribution', NULL, 1, NULL, 'oui'),
(16, 'coupe légumes robot coupe', NULL, 1, NULL, 'oui'),
(17, 'cuiseur vapeur', NULL, 1, NULL, 'oui'),
(18, 'cuisinière plaques + four', 'type cuisinière familiale', 4, NULL, 'oui'),
(19, 'cutter Robot coupe', NULL, 1, NULL, 'oui'),
(20, 'échelle à pâtisserie + grilles', NULL, 2, NULL, 'oui'),
(21, 'enceinte micro-onde', 'type familial', 1, NULL, 'oui'),
(22, 'enceinte micro-ondes', 'type collectivité', 1, NULL, 'oui'),
(23, 'four à air pulsé', 'type collectivité', 1, NULL, 'oui'),
(24, 'four mixte', NULL, 1, NULL, 'oui'),
(25, 'lave-vaisselle', '16 couverts', 1, NULL, 'oui'),
(26, 'lave-mains + essuie-mains individuel et distributeur de savon', 'eau chaude et froide. Commande au genou', 1, NULL, 'oui'),
(27, 'piano 4 feux', NULL, 1, NULL, 'oui'),
(28, 'plan de travail + bac légumerie', NULL, 1, NULL, 'oui'),
(29, 'plan de travail inox', 'à roulettes', 1, NULL, 'oui'),
(30, 'plans de travail inox avec éviers 2 bacs', 'dessous équipés de portes', 6, NULL, 'oui'),
(31, 'poubelle fermée 50L', NULL, 1, NULL, 'oui'),
(32, 'réfrigérateur', 'pour entreposage des produits finis', 1, NULL, 'oui'),
(33, 'réfrigérateur-congélateur ménager', 'selon volume utile', 10, NULL, 'oui'),
(34, 'thermoscelleuse', NULL, 1, NULL, 'oui'),
(35, 'mixers plongeant', NULL, 2, '1', 'oui'),
(36, 'robots avec bol mixer', NULL, 4, NULL, 'oui'),
(37, 'aiguiseur', NULL, 1, NULL, 'oui'),
(38, 'assiettes 16cm', NULL, 6, NULL, 'oui'),
(39, 'assiettes 24 cm', NULL, 60, NULL, 'oui'),
(40, 'autocuiseur 10L', NULL, 1, NULL, 'oui'),
(41, 'autocuiseur 6L', NULL, 4, NULL, 'oui'),
(42, 'Bacs polycarbonate GN 1/1 H 100mm', NULL, 6, NULL, 'oui'),
(43, 'Bacs polycarbonate GN 1/2 H 100mm', NULL, 6, NULL, 'oui'),
(44, 'Bassines cul de poule inox 26cm', NULL, 24, NULL, 'oui'),
(45, 'bassines pâtissière inox 28cm', NULL, 6, NULL, 'oui'),
(46, 'bols 25cL', NULL, 48, '4', 'oui'),
(47, 'canneleurs', NULL, 6, NULL, 'oui'),
(48, 'cocottes en font', 'diamètre 30', 6, NULL, 'oui'),
(49, 'cornes à ramasser 15x10', NULL, 12, NULL, 'oui'),
(50, 'coupe oeuf quartier', NULL, 1, NULL, 'oui'),
(51, 'coupe oeuf rondelles', NULL, 1, NULL, 'oui'),
(52, 'couteaux à pain', NULL, 2, NULL, 'oui'),
(53, 'couteaux d''office', NULL, 15, NULL, 'oui'),
(54, 'couteaux éminceurs 23cm', NULL, 10, NULL, 'oui'),
(55, 'couteaux éplucheurs', NULL, 12, NULL, 'oui'),
(56, 'couvercles polycarbonate GN 1/2', NULL, 6, NULL, 'oui'),
(57, 'couvercles polycarbonate GN 1/1', NULL, 6, NULL, 'oui'),
(58, 'dénoyauteurs olives', NULL, 2, NULL, 'oui'),
(59, 'douilles pâtissières polycarbonate', 'paquet de 24', 1, NULL, 'oui'),
(60, 'écumoires', NULL, 6, NULL, 'oui'),
(61, 'essoreuse à salade', 'type familial', 6, NULL, 'oui'),
(62, 'fouets inox 30 cm', NULL, 12, NULL, 'oui'),
(63, 'fourchettes à ragoût', NULL, 6, NULL, 'oui'),
(64, 'fourchette à rôtir', NULL, 6, NULL, 'oui'),
(65, 'gastronormes (53x32,5)', '13.5 L', 6, NULL, 'oui'),
(66, 'gastronormes (53x32,5)', '28 L', 6, NULL, 'oui'),
(67, 'Grilles pâtissières inox', NULL, 6, NULL, 'oui'),
(68, 'louches inox', NULL, 8, NULL, 'oui'),
(69, 'mesures inox graduées 1L', NULL, 6, NULL, 'oui'),
(70, 'moula à cake antiadhésifs', NULL, 6, NULL, 'oui'),
(71, 'moules à charlottes', NULL, 6, NULL, 'oui'),
(72, 'moules à manqué antiadhésifs 38cm', NULL, 6, NULL, 'oui'),
(73, 'moules à tarte antiadhésifs 30cm', NULL, 6, NULL, 'oui'),
(74, 'moules à tartelettes', NULL, 48, NULL, 'oui'),
(75, 'moules silicone gastroflex 15 tartelettes', 'doamètre 50mm', 6, NULL, 'oui'),
(76, 'moulins à légumes', NULL, 6, NULL, 'oui'),
(77, 'passoires à gras avec pieds', NULL, 6, NULL, 'oui'),
(78, 'pelles larges coudées 11cm', NULL, 6, NULL, 'oui'),
(79, 'pinceaux plats', 'manche plastique L40', 6, NULL, 'oui'),
(80, 'planches polyéthylène', '60x40x3', 12, NULL, 'oui'),
(81, 'plaques à débarasser inox', '31x22cm', 12, NULL, 'oui'),
(82, 'plaques à rôtir inox', '50x40x8,5 cm', 6, NULL, 'oui'),
(83, 'poches à douille jetables', 'x100 unités', 1, NULL, 'oui'),
(84, 'poêles à crêpes inox anti. adh. 22cm', NULL, 6, NULL, 'oui'),
(85, 'poêles rondes 32cm', NULL, 6, NULL, 'oui'),
(86, 'ramequins Duralex 8cm', NULL, 48, '3', 'oui'),
(87, 'râpes à fromage inox', NULL, 6, NULL, 'oui'),
(88, 'raviers porcelaine blanche 17cm', NULL, 48, '3', 'oui'),
(89, 'rondeaux 10L', NULL, 10, NULL, 'oui'),
(90, 'rouleaux à pâtisserie', NULL, 10, NULL, 'oui'),
(91, 'roulettes à pâte cannelée', NULL, 6, NULL, 'oui'),
(92, 'russes inox 20cm tous feux', NULL, 6, NULL, 'oui'),
(93, 'russes inox 24cm tous feux', NULL, 6, NULL, 'oui'),
(94, 'sauteuses + couvercles 24 cm tous feux', NULL, 6, NULL, 'oui'),
(95, 'sauteuse inox 24 cm tous feux', NULL, 6, NULL, 'oui'),
(96, 'sécateurs à volaille', NULL, 2, NULL, 'oui'),
(97, 'spatules exoglass 35cm', NULL, 12, NULL, 'oui'),
(98, 'spatules manche résine 25cm', NULL, 12, NULL, 'oui'),
(99, 'tourtières 32cm', NULL, 6, NULL, 'oui'),
(100, 'verres mesureur gradué 0,5L', NULL, 12, '5', 'oui'),
(101, 'vide pommes', NULL, 6, '2', 'oui'),
(102, 'pots à eau', NULL, 6, '4', 'oui'),
(103, 'coupes à glace 15cL', NULL, 48, '3', 'oui'),
(104, 'fourchettes', NULL, 48, '4', 'oui'),
(105, 'cuillères à café', NULL, 48, '4', 'oui'),
(106, 'cuillères à potage', NULL, 48, '4', 'oui'),
(107, 'assiettes', NULL, 48, '4', 'oui'),
(108, 'assiettes potage', NULL, 48, '4', 'oui'),
(109, 'assiettes dessert', NULL, 48, '4', 'oui'),
(110, 'verres à pied 19cL', NULL, 48, '4', 'oui'),
(111, 'verres à pied 15cL', NULL, 48, '4', 'oui'),
(112, 'Tasses à café + soucoupes', NULL, 48, '4', 'oui'),
(113, 'plats de service', NULL, 24, '3', 'oui'),
(114, 'corbeilles à pain', NULL, 6, '4', 'oui'),
(115, 'tables de 4 personnes', NULL, 6, '9', 'oui'),
(116, 'chaises assorties', NULL, 24, '9', 'oui'),
(117, 'meuble de rangement vaisselle', NULL, 1, '9', 'oui'),
(118, 'balance mécanique', '3kg', 0, '5', 'non'),
(119, 'tasse à thé', 'sans soucoupe', 0, '4', 'non'),
(120, 'mug à infusions', NULL, 0, '4', 'non'),
(121, 'raviers en verre transparent carrés', NULL, 0, '3', 'non'),
(122, 'ramequins', 'petits modèles', 0, '3', 'non'),
(123, 'verres timbales', NULL, 0, '4', 'non'),
(124, 'verres à jus de fruit', NULL, 0, '4', 'non'),
(125, 'couteaux', 'service', 48, '4', 'oui'),
(126, 'plateaux self', NULL, 48, '4', 'oui'),
(127, 'boîtes plastiques hermétiques', NULL, 0, '3', 'non'),
(128, 'plateaux plastiques', 'hors self, pour assurer les transports de denrées', 0, '3', 'non');

-- --------------------------------------------------------

--
-- Structure de la table `verifie_materiel`
--

CREATE TABLE `verifie_materiel` (
`id_verif_materiel` int(11) NOT NULL auto_increment,
`quantite_verif_materiel` int(11) NOT NULL default '0',
`date_auto_verif_materiel` datetime NOT NULL default '0000-00-00 00:00:00',
`remarque_verif_materiel` varchar(200) default NULL,
`id_materiel` int(11) NOT NULL default '0',
`id_agent` int(11) default NULL,
PRIMARY KEY (`id_verif_materiel`),
KEY `FK_verifie_materiel_id_materiel` (`id_materiel`),
KEY `FK_verifie_materiel_id_agent` (`id_agent`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=39 ;

--
-- Contenu de la table `verifie_materiel`
--

INSERT INTO `verifie_materiel` (`id_verif_materiel`, `quantite_verif_materiel`, `date_auto_verif_materiel`, `remarque_verif_materiel`, `id_materiel`, `id_agent`) VALUES (1, 1, '2006-08-26 18:13:45', '', 35, 1),
(2, 3, '2006-08-26 18:35:36', '', 118, 1),
(3, 2, '2006-08-26 18:36:00', '', 4, 1),
(4, 1, '2006-08-26 18:36:24', '', 5, 1),
(5, 1, '2006-08-26 18:37:21', 'manque pile 9V pour son fonctionnement : à commander', 5, 1),
(6, 3, '2006-08-26 18:37:52', 'Les 3 bols plastiques de ces balances sont cassés et réparés avec du ruban adhésif', 118, 1),
(7, 6, '2006-08-26 18:42:34', 'Il y a 2 verres de 1/4L et 4 de 1L', 100, 1),
(8, 53, '2006-08-26 18:49:56', 'très hétérogènes, de tailles et de styles variables.', 104, 1),
(9, 44, '2006-08-26 18:51:08', 'de styles divers', 105, 1),
(10, 14, '2006-08-26 18:51:30', 'de styles divers', 106, 1),
(11, 18, '2006-08-26 18:52:45', '', 107, 1),
(12, 3, '2006-08-26 18:53:02', '', 108, 1),
(13, 34, '2006-08-26 18:53:20', '', 109, 1),
(14, 7, '2006-08-26 18:55:14', '', 102, 1),
(15, 19, '2006-08-26 18:56:22', '+ 4 soucoupes seules', 112, 1),
(16, 3, '2006-08-26 18:58:14', '', 119, 1),
(17, 4, '2006-08-26 18:58:28', '', 120, 1),
(18, 3, '2006-08-26 18:59:30', '', 46, 1),
(19, 5, '2006-08-26 19:02:46', '', 86, 1),
(20, 5, '2006-08-26 19:03:00', 'il y a aussi d''autres ramequins (voir fiches correspondantes)', 86, 1),
(21, 5, '2006-08-26 19:08:51', 'en osier', 114, 1),
(22, 0, '2006-08-26 19:10:26', 'il y a quelques raviers en verre (voir fiche correspondante)', 88, 1),
(23, 20, '2006-08-26 19:12:18', '', 121, 1),
(24, 32, '2006-08-26 19:12:39', '12 en terre cuite et 20 en verre', 122, 1),
(25, 5, '2006-08-26 19:15:50', '', 123, 1),
(26, 4, '2006-08-26 19:16:02', '', 124, 1),
(27, 70, '2006-08-26 19:18:10', '', 125, 1),
(28, 0, '2006-08-26 19:20:37', '', 110, 1),
(29, 0, '2006-08-26 19:20:49', '', 111, 1),
(30, 39, '2006-08-26 19:22:43', '24 inox ovales et 15 inox ronds', 113, 1),
(31, 17, '2006-08-26 19:25:44', '', 126, 1),
(32, 6, '2006-08-26 19:26:13', 'de tailles et aspect divers avec couvercles assortis', 127, 1),
(33, 3, '2006-08-26 19:27:49', 'plateaux non coordonés', 128, 1),
(34, 0, '2006-08-26 19:29:28', '', 103, 1),
(35, 0, '2006-08-26 19:29:39', '', 115, 1),
(36, 5, '2006-08-26 19:30:06', 'non assorties, cassées, sales...', 116, 1),
(37, 1, '2006-08-26 19:30:39', '', 117, 1),
(38, 10, '2006-08-26 19:35:28', '', 101, 1);
[/code]

Et le formulaire que j'utilise jusqu'alors est le suivant :
[code]<?php
// On appelle la session
session_start();
?>



<html>
<head>
<title>Vérification du matériel</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link rel="shortcut icon" href="favicon.ico" />
<link rel="stylesheet" href="feuille_style.css" type="text/css" media="all" />
</head>
<body>

<?php include 'navigation.php'; ?><br />
<form method="POST" action="ajout_verif_materiel.php">

<?php
// on se connecte à MySQL
$db = mysql_connect('localhost', 'root', '');

// on sélectionne la base
mysql_select_db('gestion_cuisine',$db);

// on crée la requête SQL
$sql = 'SELECT id_materiel,designation_materiel,caracteristiques_materiel,lieu_rangement_materiel FROM liste_materiel ORDER BY lieu_rangement_materiel';

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// on fait une boucle qui va faire un tour pour chaque enregistrement
echo '<select name="id_materiel"><option selected></option>';
while($data = mysql_fetch_assoc($req))
{
// on affiche les informations de l'enregistrement en cours
echo '<option value="'.$data['id_materiel'].'" > '.$data['lieu_rangement_materiel'].'&nbsp;->&nbsp;'.$data['designation_materiel'].'
'.$data['caracteristiques_materiel'].'</option>';

}
echo '</select>';

// on ferme la connexion à mysql
mysql_close();
?>

<input type="hidden" name="id_agent" value="<?php echo $_SESSION['id_agent']; ?>" >
<input type="hidden" name="date_auto_verif_materiel"
value="<?php echo date("Y-m-d H:i:s"); ?>" >

<br />Quantit&eacute;&nbsp;: <input type="text" name="quantite_verif_materiel" size="5" value=""
maxlength="5">

<br />Remarque(s)&nbsp;: <textarea rows=5 cols=60 name="remarque_verif_materiel"></textarea><br>



<input type="submit" value="Enregistrer" name="enregistrer">

</form>
</body>
</html>
[/code]

Et enfin la validation se fait ainsi :
[code]
<html>
<head>
<title>Information enregistrée</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="shortcut icon" href="favicon.ico" />
<link rel="stylesheet" href="feuille_style.css" type="text/css" media="all" />
</head>
<body>
<?php
// On commence par récupérer les champs
if(isset($_POST['id_materiel'])) $id_materiel=$_POST['id_materiel'];
else $id_materiel="";

if(isset($_POST['id_agent'])) $id_agent=$_POST['id_agent'];
else $id_agent="";

if(isset($_POST['quantite_verif_materiel'])) $quantite_verif_materiel=$_POST['quantite_verif_materiel'];
else $quantite_verif_materiel="";

if(isset($_POST['remarque_verif_materiel'])) $remarque_verif_materiel=$_POST['remarque_verif_materiel'];
else $remarque_verif_materiel="";

if(isset($_POST['date_auto_verif_materiel'])) $date_auto_verif_materiel=$_POST['date_auto_verif_materiel'];
else $date_auto_verif_materiel="";


// On vérifie si les champs sont vides
if(empty($id_materiel) OR empty($id_agent) OR empty($date_auto_verif_materiel))
{
echo '<font color="red">Attention, seul le champs <b>Remarque(s)</b> peut rester vide !</font>';
}

// Aucun champ n'est vide, on peut enregistrer dans la table
else
{
// connexion à la base
$db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());
// sélection de la base

mysql_select_db('gestion_cuisine',$db) or die('Erreur de selection '.mysql_error());

// on écrit la requête sql
$sql = "INSERT INTO verifie_materiel(id_verif_materiel, quantite_verif_materiel, date_auto_verif_materiel, remarque_verif_materiel, id_materiel, id_agent) VALUES('','$quantite_verif_materiel','$date_auto_verif_materiel','$remarque_verif_materiel','$id_materiel','$id_agent')";

// on insère les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

// on affiche le résultat pour le visiteur
echo 'L\'inventaire du matériel a été mis à jour.<br /><a href="verification_materiel.php">Retour au formulaire de vérification du matériel</a>';

mysql_close(); // on ferme la connexion
}
?>
</body>
</html>
[/code]

Le formulaire tel que j'ai réussi à le construire (avec liste déroulante) fonctionne bien mais c'est pénible d'avoir à sélectionner un à un tout le matériel (on ne sait plus, rapidement, où on en est dans la liste).

En espérant ne pas avoir donné trop d'information cette fois-ci et en remerciant tous les participants à ce forum car c'est grâce à eux que j'ai déjà réussi à en arriver là.

Bien cordialement