1. Introduction

Comme nous le savons, il est souvent difficile pour la personne chargée de prévoir les repas, pour une famille, et de les cuisiner. C'est particulièrement le cas des familles comprenant des adolescent et des jeunes adultes car leur programme est très variable selon les semaines et les mois. Le problème se pose aussi pour toute personnes ayant un horaire très variable. Le but de ce projet sera donc de réaliser un outil pratique et accessible permettant aux membres d'une famille ou d'un groupe d'indiquer à quel repas ils seront présents et que chaque membre du groupe puisse consulter le nombre de personnes présentes à chaque repas. Les objectifs de ce projet seront donc de créer un site internet sur lequel les membre d'un groupe peuvent indiquer pour chaque repas des 7 prochain jours si ils seront présents où non, que chaque membre du groupe puisse consulter le nombre de personnes présentes pour les prochains repas, que les différents groupes ne soient accessibles par que par leurs membres et que chaque utilisateur puisse créer un groupe, le partager et en rejoindre d'autres. Un autre objectif est d'avoir un support physique connecté à un groupe permettant de consulter le nombre de personnes présentes pour les prochains repas. Ce type d'outil existe déjà, notamment doodle ou encore vyte, mais ne fournit pas la possibilité d'avoir des rendez-vous hebdomadaires ou journaliers planifiés. Il n'existe pas, à ma connaissance de support physique permettant de consulter les résultats d'un tel site internet.

2. Matériel et méthodes

2.1 Matériel

Pour Ce projet, le matériel nécessaire se limitera à

  • Raspberry Pi
  • résistances électriques
  • fils
  • breadboard
  • Leds RGB

2.2 Méthode

Pour le site internet, il va falloir d'abord créer en HTML, les différentes pages au travers desquelles l'utilisateur va naviguer. La première page sera la page de "login", qui mènera soit à la création d'un nouvel utilisateur, soit à la liste des groupes auxquels l'utilisateur a accès et aux outils permettant de créer ou de rejoindre un nouveau groupe. Cette page mènera soit à la page permettant de créer un nouveau groupe, soit à la page dédiée à un groupe en particulier. Je ne détaillerai pas la manière de créer les pages ni comment naviguer entre les pages. Pour ce qui est de créer un nouvel utilisateur, l'utilisateur devra entre son nom d'utilisateur et son mot de passe qui seront enregistrés dans la base de données "projetp" grâce aux lignes de code suivantes :

$sql = "INSERT INTO projetp (username, password)
VALUES ($username, $password)";

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

Dans ce code, $username correspond à la zone de texte où le nouvel utilisateur va inscrire son nom d'utilisateur et $password celle dans laquelle il inscrit son mot de passe. L'id a été paramétrée pour s’auto-incrémenter ce qui évite à l'utilisateur de devoir en entrer une manuellement. Par la suite, lors des prochaines connexions de l'utilisateur, il n'aura qu'à entrer son nom d'utilisateur et son mot de passe qui seront vérifiés de la manière suivante :

$sql = "SELECT password FROM projetp WHERE projetp.username = $userconnecting";
$result = $conn->query($sql);
if ($result = $password?) {
  echo "Correct password"} else{
  echo "Wrong password or username"
}

Ici, la requête demande le mot de passe qui est associé au nom d'utilisateur qui a été inscrit dans la zone de texte prévue à cet effet et le résultat de cette requête sera comparée au mot de passe qui aura été inscrit ($password?). Si les deux variables sont semblables, le message "Correct password" apparaitra puis l'utilisateur sera envoyé vers la liste des groupes auxquels il appartient (pas dans cette partie du code). Dans le cas contraire, le message "Wrong password or username" apparaitra et l'utilisateur devra réessayer d'entrer le bon mot de passe. La page suivante comportera donc le nom des groupes dont l'utilisateur fait partie de la manière suivante :

$sql1 = "SELECT Group1 FROM projetp WHERE projetp.ID = $userID";
$g1 = $conn->query($sql1);
$sql2 = "SELECT Name FROM Group WHERE  = $g1 = Group.ID";
$NAME1 = $conn->query($sql2);
echo $NAME1;

Dans cette partie, le site internet donne le nom du groupe (NAME1) associé à l'ID du premier groupe auquel l'utilisateur a accès ($g1). Cette séquence sera répétée 4 fois de manière à ce que l'utilisateur puisse voir les 4 groupes desquels il fait partie. Sur la même page, il pourra ajouter un groupe, ce qui sera fait en verifiant les emplacements de groupes dans la base de donnée et en remplaçant l'ID du plus petit groupe vide par celui du groupe à ajouter. Pour créer un nouveau Groupe, l'utilisateur devra cliquer sur le bouton situé sur cette même, ce qui le redirigera sur une nouvelle page où il pourra saisir le nom du Groupe qu'il souhaite créer, puis il pourra copier l'ID qui apparaitra dans l'espace prévu à cet effet. Il pourra partager cet ID à 4 personnes (lui inclut) qui rejoindrons le groupe. l'ID des utilisateurs sera inserée dans la base de données de la même manière que l'ID du nouveau groupe pour un utilisateur. Dans les pages consacrées aux groupes, l'utilisateur pourra remplir un tableau pour les repas de la semaine à venir. En bas de la page, il y aura un tableau présentant le nombre de personnes présentes pour les repas du jour même et du lendemain. Lorsque l'utilisateur cochera une case du tableau du haut, la valeur se modifiera dans la base de données.

if (checkbox === TRUE){
$lunch1 = "SELECT lunch1 FROM Group WHERE Group.ID = $GroupID";
$lunch1.1 = $conn->query($lunch1);
$lunch1.2 = "UPDATE Group SET ($lunch1.1 + 1) WHERE Group.ID = $GroupID";
if ($conn->query($lunch1.2) === TRUE) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . $conn->error;
}
}

Dans cette séquence de code, on ajoutera 1 à la valeur du nombre de personne présentes au prochain repas grâce à la fonction update. Cela sera répété 6 fois pour les 6 prochains repas et le tableau du bas sera rempli grâce à des requêtes qui vont lire les valeurs que nous venons de modifier. Nous avons donc avec cela un site internet fonctionnel (en théorie). Passons maintenant à la création du support physique permettant de lire les valeurs du site sans s'y connecter. Pour cela, le Raspberry devra envoyer une requête au serveur pour savoir le nombre de personnes présentes au trois prochain repas. Pour chaque repas, il recevra une valeur allant de 0 à 4. En fonction de cela, il affichera une couleur différente. Les outputs seront donc différents selon la valeur reçue. Exemple : 0 personnes : éteint ; 1 personne : rouge ; 2 personnes : orange ; 3 personnes : jaune ; 4 personnes : vert. Pour cela, il faut faire dépendre les valeurs sortantes de la valeur reçue.

3. Résultats

Comme résultat : https://dev.gyre.ch/benjamin.bader/userpage.php ce site internet permet de naviguer entre plusieurs pages, le code HTML est parfaitement fonctionnel, mais il est impossible de créer un compte ou un groupe ou d’interagir d'une quelconque manière avec la base de donnée pour des raisons qui m'échappent. Le support physique est inexistant.

4. Discussion

Ces résultats sont plutôt décevants car le but n'a pas été atteint. Nous n'avons pas réussi à créer un site internet qui interagi avec une base de donnée et l'utilisateur en même temps. C'est pour cette raison que la base de données n'est que très peu remplie et que le support physique n'a pas vu le jour car la concentration a été portée en premier lieu sur la partie site internet du projet. La réflexion sur la manière d'aborder le problème n'a pas été différente car toutes les interactions ont été réfléchie et traduite en code qui n'est malheureusement pas fonctionnel pour une raison qui est pour le moment inconnue. En revanche, la réflexion sur la manière de créer un support physique a été abandonnée suite au problèmes rencontrés. Ces problèmes ont été le non fonctionnement du code et l'incompréhension liée à ce non fonctionnement. Le problème est que la documentation sur ce genre de problèmes existe mais est très éparse car les problèmes ne se ressemblaient pas. Une mauvaise gestion du temps a aussi contribué à la faible avancée de ce projet, ce qui serait évitable facilement une prochaine fois mais dans le cas présent il n'a pas été possible de résoudre se problème mais la priorité a été mise sur la réflexion plutôt que sur les problèmes techniques. Les points à améliorer seraient bien entendu une meilleure gestion du temps qui aurait mené à une meilleure compréhension et résolution des problèmes ainsi qu'une meilleure progression dans l'apprentissage du PHP. Ce projet m'a permis de me rendre compte à quel point les possibilités de créer des sites internet étaient nombreuses et à quel point les erreurs possibles l'étaient aussi.

5. Conclusion

Seulement un des objectifs de ce projet a été atteint et cet objectif était de créer un site internet fonctionnel et accessible ce qui a été fait car la navigation entre les pages est simple et fonctionnelle. En revanche, tout les autres objectifs n'ont pas été atteints à cause d'une mauvaise gestion du temps et d'une mauvaise connaissance du langage PHP. L'objectif le plus proche de la réussite était celui de pouvoir créer un compte et se connecter car l'insertion de contenu dans une base de données a été réussie une fois. Pour aller plus loin dans ce projet, il faudrait réussir à relier ce site internet à un support physique mais cela n'a pas été car les problèmes rencontrés lors de la création du site ont capté toute l'attention.

Référence

Explications de quelque fonctions du PHP : https://www.w3schools.com/php/php_mysql_intro.asp