J'ai un formulaire d'inscription, je voudrais que lorsque j'envoie le formulaire les données s'insèrent dans une première table (Table 1)
et automatiquement certaines colonnes sont calculées et insérées dans une seconde table (Table 2).
Je n'arrive pas à mettre en place ce code aidez moi ?????
- L'image ci dessous lillustre :
Dans cet exemple je voudrais un code qui va me permtre une insertion automatique dans la Table 2 de la moyenne des colonnes math et physique de la Table 1
Voici mon code et je ne sais pas comment effectuer les calcules avec les colonnes "math" et "physique" et les insérer dans la table 2 :
<?php
// Insertion des donnes dans la table 1
if (isset($_POST['btn_denvoi'])) { // Si le bouton d'envoi existe
$nom = htmlspecialchars($_POST['chp_nom']);
$math = htmlspecialchars($_POST['chp_math']);
$physique = htmlspecialchars($_POST['chp_physique']);
if (!empty($nom) AND !empty($math) AND !empty($physique)) { // Si les champs du formulaire ne sont pas vides
$req_table1_insert = $bdd->prepare('INSERT INTO table1(nom, math, physique) VALUES(:nom, :math, :physique)');
$req_table1_insert->execute(array(
'nom' => $nom,
'math' => $math,
'physique' => $physique));
}
}
?>
En revanche, à te lire, voir ce que tu as fait et en anticipant ton projet, il me semble que tu vas très vite te heurter à un problème (je peux me tromper.
Dans le cas ou ta table ne soit QUE pour des notes de Physiques ET Maths, ça ne posera peut être pas de soucis. En revanche, tu peux très vite te retrouver confronté au fait que tu auras d'autre matières à intégrer. Pas trop compliqué me diras-tu. Certes ! Mais si tu fais comme ça, c'est droit dans le mur. ta table 2 ne sera plus d'aucune utilité ... En plus de ça, tu as des redondances de données entre les deux tables .
Pour ton projet, je ferais 3 tables (oui je sais ç'est beaucoup) .
Table "eleves"
eleve_id (INT 6 UNSIGNED, AUTO INCREMENT, PRIMARY),
eleve_nom (VARCHAR 30),
eleve_prenom (VARCHAR 30),
...
Table "matieres"
matiere_id, (INT 6 UNSIGNED, AUTO INCREMENT, PRIMARY),
matiere_initule (VARCHAR 30),
...
Tables "notes"
note_id (INT 6 UNSIGNED, AUTO INCREMENT, PRIMARY),
note_eleve (INT 6 UNSIGNED, INDEX),
note_matiere (INT 6 UNSIGNED, INDEX),
note_valeur (DECIMAL (4,2)),
...
En procédant ainsi, tu donnes beaucoup plus de souplesse à ton application. Si tu n'es pas familier avec ce qui se trouve entre parenthèses, il s'agit des types de champs, les longueurs et les index pour les tables de ta base de données (je suis allé un peu fort sur les index). Ceci est le contenu minimal pour la structure de ton application.
J'imagines que tu vois ou je veux en venir.
Ta table eleves ne contient que des profils d'élèves ni plus ni moins. Idem pour matieres. Ainsi, tu peux aisément rajouter une matière à ton application sans tout planter. De plus, en utilisant le contenu de cette table, tu es en mesure de créer dynamiquement des listes déroulantes pour sélectionner une matière.
Comme tu le constates, les tables eleves et matieres sont toutes les dexu ordonnées par un champ id. C'est précisément ces id qui sont utilisés pour liée une note à un élève ET une matière, le tout dynamiquement via la table notes. Cette table ne fait rien d'autre que d'attribuer une note à un coupe élève/matière.
Il est donc très facile, avec uns structure comme celle-ci, de monter une petite application évolutive. Certes le boulot de départ est plus conséquent mais le gain de temps par la suite est significatif (et je pense que le temps que je rédige ça, j'aurait eu le temps de mettre en application ce que j'ai expliqué, c'est pas très dur )
Pour ce qui est du calcul de la moyenne, sur une architecture de ce type, il est très facile, sans passer par des tables intermédiaires, de les calculer pour tout ce qu'on veux : par élève, par matière, au total, ...
En général, on évite de dédoubler les données dans une base, c'est le meilleur moyen pour se retrouver avec des données orphelines et des incohérences à tous les niveaux.
J'espère que j'ai été clair sur mes explications. Si tu as besoin d'aide, n'hésites pas pas à demander sur le forum =)
#RTFM #AskGoogle and Have a nice code Day
#RTFM #AskGoogle and Have a nice code Day