1. Introduction

La plupart des activités auxquelles on veut participer requièrent des inscriptions, regroupant des données pour l'organisateur et validant notre participation. Dans le cadre de participant au programme d'OC informatique; j'aimerai introduire un site d'inscription pour l'oral d'option complémentaire 2018 et suivant au moyen d'un formulaire en ligne sur le site internet dev.gyre.ch interconnecté avec la base de donnée paqc.myd.informaniak.com. Il aura comme particularité de n'afficher que les heures de passages accessibles et spécifiques à un certain cours suivant si une plage est encore libre ou déjà occupée. Le système se base sur un "first come, first serve". Les inscriptions seront ensuite utilisés pour regrouper les données sur les participants dans des tables mysql.

2. Matériel et méthodes

2.1 Matériel

Le seul matériel nécessaire sera un ordinateur fonctionnel avec un accès internet et à un terminal.

2.2 Méthode

Le projet se déroulant purement par informatique, le résultat visuel attendu peut se résumer à un site avec les points essentiel dessus: Classe, Nom, Prénom et l'Heure de passage souhaité. Pour cela, le code html doit être correctement écrit et les parties php correctement induit pour que les espaces à choisir soient fonctionnels.

Pour réaliser ce projet, Il faudra écrire un code valide qui est interconnecté correctement avec la base de donnée en envoyant et reprenant les informations souhaités.

Je ne suis pas encore conscient de ce que le projet implique pratiquement mais espère pouvoir en tirer une compréhension plus poussée des collectes et regroupement d'information selon des critères. En dernier lieux, je souhaite établir des liens entre les tableaux sintétisant les informations selon ce qu'on désire voir dans mysql.

IMG_4340.JPG Figure 1: Schéma entre les liens des tableaux prévus

Ceci est un premier essai des liens qui pourraient être fait entre les table mysql en utilisant les 'id's en priorité.

Le temps requis pour ce projet est pour l'instant très difficile à examiner puisque je ne suis pas encore entièrement informé sur le code requis et la structure d'un système plutôt sophistiqué comme celui duquel je vais m'occuper.

Ceci étant dit, les parties prévisibles sont :

- La recherche sur l'apparence conrète du site et le fonctionnement derrière. Temps : 3h

- La mise en place d'une procédure approximative d'ajouts/modifications prévu (pour éviter de faire des bêtises où je ne peut pas faire marche-arrière et qui ajouterai du travail et temps considérable dans les tâches prévues).

Temps : 1h

- L'ajout d'une page ou plusieures pages dans l'endroit désiré. Temps : 30min

- Ecriture de la page (en html), respectant la feuille de style déjà utilisé par le reste du site (css) et les fonctionnalité requise (php -> envoyer et retirer les informations qu'on souhaite). Temps : 2h30

- Importer et exporter depuis le(s) page(s) les informations pour les inscriptions dans une base de données. Temps : 2h

- Création de tables, modifier et lier dans mysql les informations de la base de données. Temps: 4h

- Une marge supplémentaire de 1h est incluse pour prendre en compte le temps passé à faire des recherches (et ne trouvant pas forcément les informations recherchées au premier click) et le temps passé à essayer de résoudre des problèmes quelconques. Temps: 1h

Temps total environ : 15h de travail

3. Résultats

Je suis parvenu à créer un document: index.php qui demande les informations requises à l'aide d'un formulaire 'form': Classe, Nom, Prénom et Heure de passage. Ce formulaire a été écrit avec des options à choisir pour Classe et Heure de passage. Par contre Nom et Prénom doivent être mauellement écrit pour la protection des données personnels des élèves.

L'"action" du formulaire envoie ces informations à un fichier registration.php qui traite les données. Pour ca, une connection des deux documents a dû être établie avec le serveur et en particulier ma base de donnée paqc_carlkessler (avec la fonction mysqli_connect).

D'abord registration.php vérifie que les variables prises du formulaire sont honnêtes et ne comportent pas des insertions de codes qui tentent d'accéder à la base de données. Pour cela les variables attribuées dans la table sont exprimés avec les "$". elles sont ensuite insérées par une fonction $sql: INSERT (...) VALUES (...) dans la base de donnée visible dans les tableaux mysql manuellement créée. Les données ont donc en premier lieu servi pour le fichier index.php pour vérifier si les heures de passages étaient encore libre.

La fonction isSlotavailable n'a pas marché entièrement pour limiter seulement les cases pas prises (exemple du 9:00 qui aurait dû rester "enabled" dans le choix des horraires. Vu que ceci n'a pas entièrement réussi, ajouter la contrainte que cette condition ne s'applique que à une classe particulière n'a pas pû être essayé correctement.

Mes essais se basant que sur quelque heures et classes parce que le nombre importe peu, une fois que ca a marché pour une case, on peut généraliser pour les autres.

Un autre point à aborder c'est si ce système de premier arrivé, premier servi, est le juste système à faire pour permettre à tous les élèves d'avoir des horaires qui leur correspondent. Un choix aléatoire aurait été intéressant mais moins au niveau informatique.

4. Discussion

J'ai rencontré 2 problèmes majeurs auquels je n'ai pû remédier avec la fin du projet et considérant le temps déjà investi:

1. ma fonction dans index.php qui va permettre l'élève de choisir une date en fonction de celles encore disponible n'est pas cohérente avec les données accumulées, elle me bloque toutes les cases au lieu de garder celle de 9:00 accessible. J'ai essayé avec une version un peu différente que sur mon index.php actuel qui ressemble à ça mais me donne un message d'erreur à un autre niveau:

function isSlotAvailable($time) 
{
global $db;
$query = "SELECT * FROM `eleve` WHERE `$heuredepassage` = `$time`)";
$result = mysqli_query ( $db, $query );
$resultcheck= mysqli_num_rows ($result);
if ( $resultcheck > 0 ) 
{
return TRUE;
}
else {
return FALSE;
}
}

De plus, il faudrait que je prenne en compte, la classe qui est choisie au début de mon formulaire (théoriquement je m'imaginait ajouter cette contrainte avec "and" comme condition supplémentaire pour pouvoir cocher l'heure de passage seulement si cette classe n'a pas encore eu une entrée unique par classe. Mais ceci est difficile à tester puisque la fonction du temps seulement ne marche pas.

Cette partie a été difficile car plusieurs languages de codes sont combinées (à l'intérieur de php se trouve des requêtes mysql et du html).

2. Pour l'instant toutes les valeurs vont dans la table 'éleve', j'ai testé comment faire des liens enter les tables pour rechercher de l'information (SELECT ... FROM ... WHERE ...) dans SQL sous mysql, mais je n'en suis point plus avancé pour faire en sorte que mes tables manuellement faites soit liés par les ids pour les différentes classes et élèves comme schématisé dans la méthode.

Malgré cela, une grande partie du projet a pû être réalisé grâce à beaucoup de temps investi et une aide précieuse de votre part pour me mettre sur les bonnes pistes. Le temps investi est momentanément à 25-30 heures; j'ai passé énormément de temps à voir des tutoriels pour toutes sortes de choses, y comprendre ce qu'il m'était nécessaire, mais avant tout des détails aux niveaux du code m'ont fait faire des essais multiples pour résoudre ces mineurs erreures.

Mon temps aurait pû être optimisé mais c'est plus vite dit que fait quand on est face à un problème qui nous bloque. Par contre, ca nous pousse vraiment à comprendre en détail toutes petites choses qui composent un projet de la sorte pour un "débutant" ayant passablement de peine en informatique. Je n'ai en plus de ça pas pris en compte le temps d'écriture du billet, sur lequel je n'ai pu avancer que très tardivement puisque mon projet n'était atteint encore que partiellement.

5. Conclusion

Je m'étais fixé de réussir mon projet mals je pense avoir appris de ce projet déjà amplement et ne pense pas que ça aurait été intelligent de prioritiser mon projet à plusieures autres branches. Je m'y suis pris à temps mais ai sous-estimé le temps qu'il me faudrait, particulèrement pour faire les liens importants et corriger les erreurs (comme par exemple la classe qui n'affiche aucune valeure dans mysql parce que j'avais mis une paranthèse entre le nom de la classe et l'année -> value="3OCRIN 2018"). Un processus de try and fail and try again... Je suis satisfait de pouvoir rester sur une note positive, même si ce que j'ai réalisé ne semble pas énorme pour quelqu'un qui s'y connait. J'ai tout donné et espère que ca vaudra tout l'effort que j'ai mis pour compenser mon incompétence ces derniers jours.

Références

Pour vérifier où les erreurs avaient été commises dans un quelconque fichier php: https://phpcodechecker.com

Pour vérifier la validité de l'information reçue du formulaire: https://myphpform.com/required-optional-fields.php

Pour ajouter de l'information sur la base de donnée depuis registration.php: https://www.youtube.com/watch?v=XhLAB1wwzNk / https://www.youtube.com/watch?v=0BoZc5oUioA

Pour retirer de l'information depuis la base de donnée sur index.php: https://www.youtube.com/watch?v=0YLJ0uO6n8I

Pour la fonction qui vérifie si des slots sont occupés ou non et ouvre l'accès en fonction: https://stackoverflow.com/questions/11292468/how-to-check-if-value-exists-in-a-mysql-database