Refactorisation passage à SLQite3 (début)

Pages faites :
- accueil
- statistiques
- ajouterElement
This commit is contained in:
Timothée Huneau 2025-02-23 23:56:23 +01:00
parent c3ab5baad7
commit 90be5dd519
17 changed files with 1224 additions and 412 deletions

1
.gitignore vendored
View file

@ -1 +0,0 @@

View file

@ -1 +0,0 @@
ErrorDocument 404 https://cuisine.timotheehuneau.fr/index.php?erreur=404

View file

@ -42,10 +42,10 @@
/>
<label for="dropdownGenres" class="dropdown">Genres</label>
<div class="principaleAside">
<?php foreach($listeGenre as $id => $elem): ?>
<?php foreach($listeGenre as $id => $genre): ?>
<div class="elemAside">
<label for="genre[<?= $id ?>]">
<?= $elem ?>&nbsp;:
<?= $genre['nom'] ?>&nbsp;:
</label>
<input
type="checkbox"

View file

@ -1,5 +1,4 @@
<?php
$c = seConnecter();
$sensOrdreListe = " ASC ";
$typeOrdreListe = " nom ";
@ -14,14 +13,15 @@ if (isset($_POST['tri'])){
$typeOrdreListe = $_POST['typeTri'];
$_SESSION['tri']['ingredient'] = $_POST['ingredient'];
$_SESSION['tri']['ustensile'] = $_POST['ustensile'];
$_SESSION['tri']['ustensile'] = !isset($_POST['ustensile']) ? [] : $_POST['ustensile'];
$_SESSION['tri']['genre'] = !isset($_POST['genre']) ? [] : $_POST['genre'];
$whereClause = '';
//clause des ingrédients
$clauseIngredientsRequis = '';
$clauseIngredientsInterdits = '';
foreach($_POST['ingredient'] as $id => $demande){
foreach($_SESSION['tri']['ingredient'] as $id => $demande){
switch($demande){
case 1:
$clauseIngredientsRequis .= " AND ingredient = $id";
@ -39,21 +39,20 @@ if (isset($_POST['tri'])){
$clauseIngredientsInterdits = "r.id NOT IN (SELECT recette FROM RecetteIngredient WHERE 0=1 $clauseIngredientsInterdits)";
$whereClause .= $clauseIngredientsInterdits . $clauseIngredientsRequis;
//clause des utensiles
$clauseUstensilesAutorises = '';
foreach($_POST['ustensile'] as $id => $demande){
foreach($_SESSION['tri']['ustensile'] as $id => $demande){
if($demande){
$clauseUstensilesAutorises .= " OR ustensile = $id";
}
}
$clauseUstensilesAutorises = " AND r.id NOT IN (SELECT recette FROM RecetteUstensile WHERE 0=1 $clauseUstensilesAutorises)";
$whereClause .= $clauseUstensilesAutorises;
//clause des genres
$clauseGenre = ' AND (1=0 ';
if(isset($_POST['genre'])){
foreach($_POST['genre'] as $id => $demande){
$clauseGenre .= " OR genre = $id";
}
foreach($_SESSION['tri']['genre'] as $id => $demande){
$clauseGenre .= " OR genre = $id";
}
$whereClause .= $clauseGenre . ')';
}else{
@ -67,12 +66,11 @@ WHERE $whereClause
ORDER BY $typeOrdreListe $sensOrdreListe;
";
//echo $requeteListeRecettes;
$resultatListeRecettes = mysqli_query($c, $requeteListeRecettes);
//récupération des différentes recettes correspondant aux POST, si il est défini
$resultatListeRecettes = getAssocFromQueryString($requeteListeRecettes);
if ($resultatListeRecettes){
$listeRecettes = [];
while ($recette = mysqli_fetch_assoc($resultatListeRecettes)){
foreach ($resultatListeRecettes as $key => $recette) {
$idRecette = $recette['idRecette'];
$listeRecettes[$idRecette] = [];
foreach ($recette as $clef => $info){
@ -84,32 +82,10 @@ if ($resultatListeRecettes){
}
}
//recuperation des ingredients
$requeteListeIngredient = "SELECT nom, id FROM Ingredient ORDER BY nom;";
$resultatListeIngredient = mysqli_query($c, $requeteListeIngredient);
$listeIngredient = [];
while ($infoIngredient = mysqli_fetch_assoc($resultatListeIngredient)){
$listeIngredient[$infoIngredient['id']] = $infoIngredient;
}
//recuperation des différentes tables
$listeIngredient = getAllIngredients();
$listeUstensile = getAllUstensiles();
$listePreparation = getAllPreparations();
$listeGenre = getAllGenres();
//recuperation des ustensiles
$requeteListeUstensile = "SELECT nom, id FROM Ustensile ORDER BY nom;";
$resultatListeUstensile = mysqli_query($c, $requeteListeUstensile);
$listeUstensile = [];
while ($infoUstensile = mysqli_fetch_assoc($resultatListeUstensile)){
$listeUstensile[$infoUstensile['id']] = $infoUstensile;
}
//recuperation des modes de preparation
$requeteListePreparation = "SELECT nom, id FROM Preparation ORDER BY nom;";
$resultatListePreparation = mysqli_query($c, $requeteListePreparation);
$listePreparation = [];
while ($infoPreparation = mysqli_fetch_assoc($resultatListePreparation)){
$listePreparation[] = $infoPreparation;
}
//recuperation des genre de recette
$listeGenre = recupereGenres($c);
deconnectBD($c);
?>

View file

@ -1,58 +1,34 @@
<?php
$c = seConnecter();
//ajout d'un ingredient
$strAnnee = implode(', ', lANNEE);
if (isset($_POST['nomIngredient'])){
$nomNvlIngredient = transformeCharsAutorises($_POST['nomIngredient']);
$lMoisDispo = [];
foreach (lANNEE as $mois){
$lMoisDispo[] = isset($_POST[$mois]) ? 1 : 0;
$lMoisDispo[$mois] = isset($_POST[$mois]) ? true : false;
}
$strAnneeDispo = implode(', ', $lMoisDispo);
$reqAjoutIngredient = "INSERT INTO Ingredient (nom, $strAnnee)
VALUES (\"$nomNvlIngredient\", $strAnneeDispo);";
$resultat = mysqli_query($c, $reqAjoutIngredient);
$resultat = safePutIngredient($_POST['nomIngredient'], $lMoisDispo);
}
//ajout d'un ustensile
if (isset($_POST['nomUstensile'])){
$nomNvlUstensile = transformeCharsAutorises($_POST['nomUstensile']);
$reqAjoutUstensile = "INSERT INTO Ustensile (nom) VALUES ('$nomNvlUstensile');";
$resultat = mysqli_query($c, $reqAjoutUstensile);
$resultat = safePutUstensile($_POST['nomUstensile']);
}
//ajout d'une unite
if (isset($_POST['nomUnite'])){
$nomNvlUnite = htmlspecialchars($_POST['nomUnite']);
$reqAjoutUnite = "INSERT INTO Unite (nom) VALUES ('$nomNvlUnite');";
$resultat = mysqli_query($c, $reqAjoutUnite);
$resultat = safePutUnite($_POST['nomUnite']);
}
//recuperation des ustensiles
$requeteListePersonne = "SELECT nom, id FROM Humain ORDER BY nom;";
$resultatListePersonne = mysqli_query($c, $requeteListePersonne);
$listePersonne = mysqli_fetch_all($resultatListePersonne);
//recuperation des humains
// À faire
//recuperation des ingredients
$requeteListeIngredient = "
SELECT i.id id, i.nom nom, COUNT(ri.recette) nbr
FROM Ingredient i LEFT JOIN RecetteIngredient ri ON ri.ingredient = i.id
GROUP BY i.id
ORDER BY i.nom;";
$resultatListeIngredient = mysqli_query($c, $requeteListeIngredient);
$listeIngredient = mysqli_fetch_all($resultatListeIngredient);
$listeIngredient = getAllIngredients();
//recuperation des ustensiles
$requeteListeUstensile = "SELECT nom, id FROM Ustensile ORDER BY nom;";
$resultatListeUstensile = mysqli_query($c, $requeteListeUstensile);
$listeUstensile = mysqli_fetch_all($resultatListeUstensile);
$listeUstensile = getAllUstensiles();
//recuperation des unités
$requeteListeUnite = "SELECT nom, id FROM Unite ORDER BY nom;";
$resultatListeUnite = mysqli_query($c, $requeteListeUnite);
$listeUnite = mysqli_fetch_all($resultatListeUnite);
$listeUnite = getAllUnites();
?>

View file

@ -1,5 +1,4 @@
<?php
$c = seConnecter();
<?php
//on commence par supposer que tout va mal (que la page reherchée n'existe pas)
$titrePageAjout = '???';
@ -9,9 +8,7 @@ $pageExiste = false;
if (isset($_GET['id'])){
$idRecette = $_GET['id'];
$_SESSION['idDerniereRecetteVu'] = $idRecette;
$requeteId = "SELECT * FROM Recette WHERE id=$idRecette;";
$resultatId = mysqli_query($c, $requeteId);
$infoRecette = mysqli_fetch_assoc($resultatId);
$infoRecette = getRecetteFromId($idRecette);
$pageExiste = ($infoRecette) ? 1 : ( $idRecette ? 0 : -1) ;
if($pageExiste and isset($_GET['mode'])){
switch($_GET['mode']){
@ -92,34 +89,8 @@ if ($pageExiste){
//on recupere toutes les infos sur la recette sélectionnée.
//(elles ont p-ê été modifiés juste avant, mais dans le doute ...)
$requeteRecette =
"SELECT r.nom, r.id idRecette, r.nbPortion portions, u.nom unite, r.realisation, u.id idU, r.tempsTotal tempsTotal, g.nom genre
FROM Recette r JOIN Unite u ON r.unitePortion = u.id JOIN Genre g ON r.genre = g.id
WHERE r.id = $idRecette
ORDER BY nom;
";
$requeteIngredient =
"SELECT ri.ingredient idIngredient, i.nom nom, ri.quantite quantite, u.nom unite, u.id idU
FROM Ingredient i JOIN RecetteIngredient ri ON i.id = ri.ingredient JOIN Unite u ON ri.unite = u.id
WHERE ri.recette = $idRecette
ORDER BY nom;
";
$requeteUstensile = "
SELECT ru.ustensile idUstensile, u.nom nom, ru.commentaire commentaire
FROM Ustensile u JOIN RecetteUstensile ru ON u.id = ru.ustensile
WHERE ru.recette = $idRecette
ORDER BY nom;
";
$requetePreparation = "
SELECT rp.preparation idPreparation, p.nom nom, rp.duree duree, rp.temperature temperature
FROM Preparation p JOIN RecettePreparation rp ON p.id = rp.preparation
WHERE rp.recette = $idRecette
ORDER BY nom;
";
$requeteGenre = "
SELECT g.id idGenre, g.nom nom
FROM Genre g JOIN Recette r ON g.id = r.genre
WHERE r.id = $idRecette;
";
$requeteReutilise = "
SELECT reu.utilisee id, rec.nom nom
@ -128,45 +99,42 @@ if ($pageExiste){
ORDER BY nom;
";
$resultatRecette = mysqli_query($c, $requeteRecette);
$resultatIngredient = mysqli_query($c, $requeteIngredient);
$resultatUstensile = mysqli_query($c, $requeteUstensile);
$resultatPreparation = mysqli_query($c, $requetePreparation);
$resultatGenre = mysqli_query($c, $requeteGenre);
$resultatReutilise = mysqli_query($c, $requeteReutilise);
$infoRecette = getRecetteFullFromId($idRecette);
$infoRecette['tempsTotal'] = $infoRecette['tempsTotal'];
$infoRecette = mysqli_fetch_assoc($resultatRecette);
$infoRecette['tempsTotal'] = calculeTexteFromMinutes($infoRecette['tempsTotal']);
$nomGenre = getGenreWithRecetteId($idRecette)['nom'];
$nomGenre = mysqli_fetch_assoc($resultatGenre)['nom'];
$listeIngredientsRecette = [];
while ($ingredient = mysqli_fetch_assoc($resultatIngredient)){
$listeIngredientsRecette[$ingredient['idIngredient']] = [];
$listeIngredientsRecette[$ingredient['idIngredient']]['nom'] = $ingredient['nom'];
$listeIngredientsRecette[$ingredient['idIngredient']]['quantite'] = $ingredient['quantite'];
$listeIngredientsRecette[$ingredient['idIngredient']]['unite'] = $ingredient['unite'];
$listeIngredientsRecette[$ingredient['idIngredient']]['idU'] = $ingredient['idU'];
$listeIngredientRecetteRaw = getAllIngredientsWithRecetteId($idRecette);
$listeIngredientRecette = [];
foreach ($listeIngredientRecetteRaw as $ingredient){
$listeIngredientRecette[$ingredient['idIngredient']] = [];
$listeIngredientRecette[$ingredient['idIngredient']]['nom'] = $ingredient['nom'];
$listeIngredientRecette[$ingredient['idIngredient']]['quantite'] = $ingredient['quantite'];
$listeIngredientRecette[$ingredient['idIngredient']]['unite'] = $ingredient['unite'];
$listeIngredientRecette[$ingredient['idIngredient']]['idU'] = $ingredient['idU'];
}
$listeUstensilesRecette = [];
while ($ustensile = mysqli_fetch_assoc($resultatUstensile)){
$listeUstensilesRecette[$ustensile['idUstensile']] = [];
$listeUstensilesRecette[$ustensile['idUstensile']]['nom'] = $ustensile['nom'];
$listeUstensilesRecette[$ustensile['idUstensile']]['commentaire'] = $ustensile['commentaire'];
$listeUstensileRecetteRaw = getAllUstensileWithRecetteId($idRecette);
$listeUstensileRecette = [];
foreach ($listeUstensileRecetteRaw as $ustensile){
$listeUstensileRecette[$ustensile['idUstensile']] = [];
$listeUstensileRecette[$ustensile['idUstensile']]['nom'] = $ustensile['nom'];
$listeUstensileRecette[$ustensile['idUstensile']]['commentaire'] = $ustensile['commentaire'];
}
$listePreparationsRecette = [];
while ($preparation = mysqli_fetch_assoc($resultatPreparation)){
$listePreparationsRecette[$preparation['idPreparation']] = [];
$listePreparationsRecette[$preparation['idPreparation']]['nom'] = $preparation['nom'];
$listePreparationsRecette[$preparation['idPreparation']]['duree'] = calculeTexteFromMinutes($preparation['duree']);
$listePreparationsRecette[$preparation['idPreparation']]['temperature'] = $preparation['temperature'];
$litesPreparationRecetteRaw = getAllPreparationWithRecetteId($idRecette);
$listePreparationRecette = [];
foreach ($litesPreparationRecetteRaw as $preparation){
$listePreparationRecette[$preparation['idPreparation']] = [];
$listePreparationRecette[$preparation['idPreparation']]['nom'] = $preparation['nom'];
$listePreparationRecette[$preparation['idPreparation']]['duree'] = $preparation['duree'];
$listePreparationRecette[$preparation['idPreparation']]['temperature'] = $preparation['temperature'];
}
$listeReutiliseeRecetteRaw = getAllReutiliseeWithRecetteId($idRecette);
$listeReutiliseRecette = [];
while ($recette = mysqli_fetch_assoc($resultatReutilise)){
$listeReutiliseRecette[$recette['id']] = $recette;
foreach ($listeReutiliseeRecetteRaw as $key => $value){
$listeReutiliseRecette[$recette['id']] = $value;
}
@ -175,23 +143,20 @@ if ($pageExiste){
switch($pageExiste){
case 1:
$infoRecette['realisation'] = ecritureVersLecture($infoRecette['realisation']);
foreach($listeUstensilesRecette as $ustensile){
foreach($listeUstensileRecette as $ustensile){
$ustensile['commentaire'] = ecritureVersLecture($ustensile['commentaire']);
}
break;
case 2:
$infoRecette['realisation'] = lectureVersEcriture($infoRecette['realisation']);
foreach($listeUstensilesRecette as $id => $ustensile){
$listeUstensilesRecette[$id]['commentaire'] = lectureVersEcriture($listeUstensilesRecette[$id]['commentaire']);
foreach($listeUstensileRecette as $id => $ustensile){
$listeUstensileRecette[$id]['commentaire'] = lectureVersEcriture($listeUstensileRecette[$id]['commentaire']);
}
case -1:
$listeUnite = recupereUnites($c);
$listeGenre = recupereGenres($c);
$listeUnite = getAllUnites();
$listeGenre = getAllGenres();
break;
}
}
deconnectBD($c);
?>

View file

@ -1,9 +1,3 @@
<?php
$c = seConnecter();
$requeteNbRecettes = "SELECT COUNT(*) FROM Recette;";
$resultatNbRecettes = mysqli_query($c, $requeteNbRecettes);
$nbRecettes = mysqli_fetch_all($resultatNbRecettes)[0][0];
deconnectBD($c);
$nbRecettes = getRecetteCount();
?>

Binary file not shown.

872
db/populaterCuisine.sql Normal file
View file

@ -0,0 +1,872 @@
INSERT INTO `Aime` VALUES
(46,1,1),
(13,1,1),
(67,1,1),
(31,2,2),
(13,2,2),
(27,2,2),
(59,2,1),
(71,2,2),
(4,2,2),
(61,2,2),
(36,4,-2),
(36,2,2),
(3,2,2),
(67,2,2),
(16,2,2),
(21,2,2),
(28,2,2),
(33,2,2),
(42,2,1),
(26,2,1),
(64,2,2),
(69,2,2),
(52,2,2),
(37,2,2),
(15,2,2),
(35,2,2),
(62,2,1),
(40,2,2),
(20,2,2),
(22,2,1),
(7,2,2),
(55,2,2),
(5,2,1),
(41,2,2),
(50,2,2),
(66,2,2),
(57,2,2),
(14,2,2),
(11,2,2),
(24,2,2),
(68,2,2),
(49,2,1),
(70,2,2),
(53,2,2),
(25,4,-2),
(25,2,1),
(45,2,2),
(34,2,1),
(29,2,2),
(65,2,2),
(60,2,1),
(51,2,2),
(73,2,2),
(74,2,1),
(1,2,1),
(72,2,1),
(6,2,1),
(79,2,1),
(78,2,2),
(80,2,2),
(77,2,1),
(80,4,-2),
(46,8,2),
(31,8,1),
(13,8,1),
(79,8,2),
(78,8,2),
(27,8,2),
(59,8,1),
(71,8,2),
(4,8,1),
(61,8,2),
(36,8,2),
(3,8,2),
(67,8,2),
(16,8,2),
(21,8,2),
(28,8,2),
(33,8,2),
(73,8,2),
(42,8,1),
(75,8,2),
(74,8,2),
(64,8,1),
(69,8,1),
(23,8,2),
(52,8,2),
(37,8,2),
(15,8,2),
(35,8,2),
(40,8,-1),
(20,8,1),
(22,8,-1),
(7,8,2),
(55,8,2),
(5,8,-1),
(41,8,1),
(50,8,2),
(66,8,2),
(57,8,2),
(14,8,2),
(11,8,2),
(24,8,2),
(68,8,2),
(49,8,1),
(70,8,2),
(53,8,2),
(25,8,1),
(45,8,2),
(34,8,2),
(29,8,1),
(80,8,2),
(65,8,1),
(60,8,1),
(51,8,2),
(76,8,2),
(46,6,2),
(46,5,2),
(31,6,2),
(31,5,1),
(13,6,2),
(13,5,-1),
(79,6,2),
(79,5,1),
(78,6,2),
(78,5,1),
(27,6,2),
(27,5,2),
(59,6,1),
(59,5,1),
(71,6,1),
(71,5,2),
(4,6,2),
(4,5,2),
(61,7,1),
(61,6,1),
(61,5,2),
(82,6,1),
(82,5,1),
(84,6,2),
(84,5,2),
(36,6,2),
(3,6,1),
(3,5,2),
(67,6,-2),
(67,5,2),
(16,6,2),
(16,5,2),
(21,6,1),
(21,5,1),
(81,6,2),
(81,5,2),
(28,6,2),
(28,5,2),
(33,6,-1),
(33,5,2),
(73,6,2),
(73,5,2),
(42,6,2),
(42,5,2),
(75,6,2),
(74,6,2),
(74,5,2),
(26,6,2),
(26,5,2),
(17,6,2),
(17,5,2),
(64,6,-1),
(64,5,-2),
(69,6,-1),
(69,5,-2),
(23,6,2),
(23,5,2),
(8,6,2),
(8,5,2),
(58,6,-1),
(58,5,-1),
(56,6,-1),
(56,5,-1),
(48,6,2),
(48,5,2),
(52,6,2),
(52,5,2),
(37,6,1),
(37,5,1),
(15,6,1),
(15,5,1),
(35,6,1),
(35,5,1),
(62,6,2),
(62,5,2),
(40,6,2),
(40,5,2),
(20,6,1),
(20,5,1),
(22,6,2),
(22,5,1),
(7,6,2),
(7,5,2),
(55,5,2),
(77,6,2),
(77,5,2),
(5,6,-1),
(5,5,2),
(41,6,2),
(41,5,1),
(9,6,2),
(9,5,2),
(10,6,2),
(10,5,2),
(50,6,2),
(50,5,2),
(66,6,-2),
(66,5,2),
(57,6,2),
(57,5,2),
(14,6,2),
(14,5,2),
(11,6,-1),
(11,5,2),
(24,6,2),
(24,5,2),
(68,6,2),
(68,5,2),
(49,6,2),
(49,5,1),
(83,6,2),
(83,5,2),
(70,6,2),
(70,5,2),
(53,6,2),
(25,6,2),
(25,5,2),
(45,6,2),
(45,5,1),
(34,6,2),
(34,5,2),
(29,6,2),
(29,5,2),
(80,6,2),
(80,5,2),
(12,6,2),
(12,5,2),
(65,6,1),
(65,5,-1),
(60,6,-2),
(60,5,-1),
(1,6,2),
(1,5,2),
(72,6,2),
(72,5,2),
(6,6,2),
(6,5,2),
(51,6,2),
(51,5,2),
(76,6,2),
(76,5,2),
(82,8,2),
(84,8,2),
(81,8,2),
(8,8,2),
(58,8,-1),
(56,8,-1),
(77,8,1),
(83,8,1),
(46,4,2),
(88,8,2),
(88,5,-1),
(88,4,-2),
(88,2,2),
(94,8,2),
(94,2,2),
(71,4,2),
(82,2,2),
(3,4,2),
(51,4,2),
(89,2,2),
(76,2,2),
(91,2,2),
(2,2,2),
(84,4,2),
(84,2,2),
(81,2,2),
(96,2,2),
(84,7,2),
(75,2,1),
(87,2,2),
(46,2,2),
(31,4,1),
(85,2,0),
(54,2,0),
(30,2,1),
(17,8,-1),
(17,2,0),
(23,2,-1),
(8,2,0),
(58,2,2),
(56,2,1),
(48,2,1),
(86,2,2),
(95,2,0),
(92,2,2),
(9,2,0),
(10,2,1),
(90,2,2),
(98,2,1),
(83,2,2),
(99,2,2),
(93,2,1),
(12,2,0);
INSERT INTO `Genre` VALUES
(1,'Entrée'),
(2,'Plat'),
(3,'Gâteau'),
(4,'Dessert individuel'),
(5,'Biscuit'),
(6,'Boisson'),
(7,'Autre');
INSERT INTO `Humain` VALUES
(2,'Timothée'),
(4,'Iris'),
(5,'Flore'),
(6,'Célia'),
(7,'Aurélien'),
(8,'Élisabeth');
INSERT INTO `Ingredient` VALUES
(1,'Sucre',1,1,1,1,1,1,1,1,1,1,1,1),
(2,'Beurre',1,1,1,1,1,1,1,1,1,1,1,1),
(3,'Chocolat noir',1,1,1,1,1,1,1,1,1,1,1,1),
(4,'Cacao en poudre',1,1,1,1,1,1,1,1,1,1,1,1),
(5,'Lait',1,1,1,1,1,1,1,1,1,1,1,1),
(6,'Sucre vanillé',1,1,1,1,1,1,1,1,1,1,1,1),
(7,'Huile d''olive',1,1,1,1,1,1,1,1,1,1,1,1),
(8,'Farine',1,1,1,1,1,1,1,1,1,1,1,1),
(9,'Levure chimique',1,1,1,1,1,1,1,1,1,1,1,1),
(10,'Levure fraîche',1,1,1,1,1,1,1,1,1,1,1,1),
(11,'Oeuf',1,1,1,1,1,1,1,1,1,1,1,1),
(12,'Sel',1,1,1,1,1,1,1,1,1,1,1,1),
(13,'Amande entière',1,1,1,1,1,1,1,1,1,1,1,1),
(14,'Noisettes entières',1,1,1,1,1,1,1,1,1,1,1,1),
(15,'Fleurs de sureau',0,0,0,1,1,0,0,0,0,0,0,0),
(16,'Citron frais',1,1,1,1,1,1,1,1,1,1,1,1),
(17,'Eau',1,1,1,1,1,1,1,1,1,1,1,1),
(20,'Gousse de cardamome',1,1,1,1,1,1,1,1,1,1,1,1),
(21,'Clou de girofle',1,1,1,1,1,1,1,1,1,1,1,1),
(22,'Grain de poivre',1,1,1,1,1,1,1,1,1,1,1,1),
(23,'Écrevisse',1,1,1,1,1,1,1,1,1,1,1,1),
(24,'Oignon',1,1,1,1,1,1,1,1,1,1,1,1),
(25,'Poulet',1,1,1,1,1,1,1,1,1,1,1,1),
(26,'Curcuma',1,1,1,1,1,1,1,1,1,1,1,1),
(27,'Aubergine',1,1,1,1,1,1,1,1,1,1,1,1),
(28,'Courgette',1,1,1,1,1,1,1,1,1,1,1,1),
(29,'Riz',1,1,1,1,1,1,1,1,1,1,1,1),
(30,'Bouillon',1,1,1,1,1,1,1,1,1,1,1,1),
(31,'Abricot sec',1,1,1,1,1,1,1,1,1,1,1,1),
(33,'Crème de marrons',1,1,1,1,1,1,1,1,1,1,1,1),
(34,'Rhum',1,1,1,1,1,1,1,1,1,1,1,1),
(35,'Gingembre',1,1,1,1,1,1,1,1,1,1,1,1),
(36,'Cerneaux de noix',1,1,1,1,1,1,1,1,1,1,1,1),
(37,'Fleurs d''acacia',1,1,1,1,1,1,1,1,1,1,1,1),
(40,'Gousse d''ail',1,1,1,1,1,1,1,1,1,1,1,1),
(41,'Lait concentré sucré',1,1,1,1,1,1,1,1,1,1,1,1),
(42,'Crème liquide',1,1,1,1,1,1,1,1,1,1,1,1),
(45,'Pralin',1,1,1,1,1,1,1,1,1,1,1,1),
(46,'Abricot frais',0,0,0,0,1,1,1,1,0,0,0,0),
(48,'Fécule de maïs',1,1,1,1,1,1,1,1,1,1,1,1),
(49,'Persil',1,1,1,1,1,1,1,1,1,1,1,1),
(50,'Menthe',1,1,1,1,1,1,1,1,1,1,1,1),
(51,'Tomate',1,1,1,1,1,1,1,1,1,1,1,1),
(52,'Feuille de vigne',1,1,1,1,1,1,1,1,1,1,1,1),
(53,'Poudre d''amandes',1,1,1,1,1,1,1,1,1,1,1,1),
(54,'Blanc d''oeuf',1,1,1,1,1,1,1,1,1,1,1,1),
(55,'Jaune d''oeuf',1,1,1,1,1,1,1,1,1,1,1,1),
(56,'Farine de tapioca',1,1,1,1,1,1,1,1,1,1,1,1),
(57,'Muscovado',1,1,1,1,1,1,1,1,1,1,1,1),
(58,'Farine de riz gluant',1,1,1,1,1,1,1,1,1,1,1,1),
(59,'Bâton de cannelle',1,1,1,1,1,1,1,1,1,1,1,1),
(60,'Sirop d''orgeat',1,1,1,1,1,1,1,1,1,1,1,1),
(61,'Café',1,1,1,1,1,1,1,1,1,1,1,1),
(62,'Glaçon',1,1,1,1,1,1,1,1,1,1,1,1),
(64,'Écorce d''orange',1,1,0,1,0,0,0,0,0,1,1,1),
(65,'Sirop d''écorces d''oranges',1,1,1,1,1,1,1,1,1,1,1,1),
(66,'Munster',1,1,1,1,1,1,1,1,1,1,1,1),
(67,'Choucroute',1,1,1,1,1,1,1,1,1,1,1,1),
(68,'Pâte brisée',1,1,1,1,1,1,1,1,1,1,1,1),
(69,'Écorce de citron',1,1,1,1,1,1,1,1,1,1,1,1),
(70,'Poireaux',1,1,1,1,1,0,0,0,0,1,1,1),
(71,'Bûche de chèvre',1,1,1,1,1,1,1,1,1,1,1,1),
(72,'Sucre glace',1,1,1,1,1,1,1,1,1,1,1,1),
(73,'Crème épaisse',1,1,1,1,1,1,1,1,1,1,1,1),
(74,'Cumin moulu',1,1,1,1,1,1,1,1,1,1,1,1),
(75,'Cumin en graines',1,1,1,1,1,1,1,1,1,1,1,1),
(76,'Yahourt grec',1,1,1,1,1,1,1,1,1,1,1,1),
(77,'Kiri',1,1,1,1,1,1,1,1,1,1,1,1),
(78,'Asperge',0,0,0,1,1,0,0,0,0,0,0,0),
(79,'Artichaut',0,0,0,1,1,1,0,0,0,0,0,0),
(80,'Saumon fumé',1,1,1,1,1,1,1,1,1,1,1,1),
(81,'Coulis de tomate',1,1,1,1,1,1,1,1,1,1,1,1),
(82,'Canelle en poudre',1,1,1,1,1,1,1,1,1,1,1,1),
(83,'Piment',1,1,1,1,1,1,1,1,1,1,1,1),
(84,'Carotte',1,1,1,1,1,1,1,1,1,1,1,1),
(85,'Agar-agar',1,1,1,1,1,1,1,1,1,1,1,1),
(86,'Fromage frais',1,1,1,1,1,1,1,1,1,1,1,1),
(87,'Spéculoos',1,1,1,1,1,1,1,1,1,1,1,1),
(88,'Anchois à l''huile d''olive',1,1,1,1,1,1,1,1,1,1,1,1),
(89,'Vinaigre de vin rouge',1,1,1,1,1,1,1,1,1,1,1,1),
(90,'Mélange de fruits rouges',1,1,1,1,1,1,1,1,1,1,1,1),
(91,'Baies - fruits rouges, noirs,',0,0,1,1,1,1,1,1,1,1,0,0),
(92,'Jus d''orange frais',1,1,1,0,0,0,0,0,0,0,0,1),
(93,'Purée de marrons',1,1,1,1,1,1,1,1,1,1,1,1),
(94,'Brisures de marrons glacés',1,1,1,1,1,1,1,1,1,1,1,1),
(95,'Gélatine',1,1,1,1,1,1,1,1,1,1,1,1),
(96,'Riz basmati',1,1,1,1,1,1,1,1,1,1,1,1),
(98,'Oignon nouveau',0,0,1,1,1,1,1,1,1,1,0,0),
(99,'Pralines roses',1,1,1,1,1,1,1,1,1,1,1,1);
INSERT INTO `Preparation` VALUES
(1,'au four'),
(2,'repos'),
(3,'sur le feu'),
(4,'au réfrigérateur'),
(5,'au congélateur');
INSERT INTO `Recette` VALUES
(0,'Panna cotta','240',4,6,'4','Réhydrater la gélatine dans un bol d''eau froide. Mettre la crème à bouillir, ajouter le sucre. Ajouter la gélatine réhydratée. Verser dans 4 pots.',NULL),
(1,'Pralin','15',7,1,'160','Dans la casserole, faire chauffer les amandes, les noisettes et le sucre. Lorsque le sucre est complètement fondu et un peu caramélisé, verser le tout dans le bol du mixer.\nAttendre un peu que le mélange refroidisse et mixer. Ne pas hésiter à faire des pauses pour éviter de brûler la préparation.',NULL),
(2,'Lait de poule','6',6,3,'1','Dans la casserole, faire tiédir le lait et le sucre. Ajouter des épices (cannelle, muscade) et du rhum selon son goût.\nMixer avec lœuf pour rendre le tout mousseux et servir immédiatement.',NULL),
(4,'Sirop de sureau','3000',6,2,'1000','Faire macérer les fleurs, les citrons coupés en morceaux et le sucre dans l''eau pendant 2 jours.\nPorter à ébullition pendant une dizaine de minutes puis filtrer.\nPorter à un second bouillon puis verser dans des récipients stérilisés par ébouillantage.',NULL),
(5,'Baguette','180',7,3,'2','Dans le bol, mettre toute la farine, tout le sel et presque toute l''eau. Diluer la levure dans l''eau restante.\nCommencer à mélanger la pâte puis ajouter la levure. Pétrir vigoureusement pendant 5 à 10 minutes. Former 2 pâtons à peu près rectangulaire.\nLaisser reposer 30 minutes sous un linge propre.\nPrendre un pâton, le plier en trois dans le sens de la longueur puis souder le pli en passant le pouce le long de la soudure. Répéter l''opération avec le second pâton.\nLaisser reposer deux bonnes heures à température ambiante, recouvert d''un linge propre.\nEnfourner 20 minutes à 250 °C (voire 260, si possible) avec un bol d''eau posé sur la sole du four.',NULL),
(6,'Risotto-Tajine','120',2,6,'4','Faire revenir la cardamome, les clous de girofle, le poivre, l''ail, l''oignon, le curcuma et le poulet coupé en morceaux. Faire tremper les abricots dans le bouillon de poulet.\nRéserver le poulet et ajouter les légumes coupés en gros cubes ainsi que le riz, le bouillon et les abricots. Ne pas hésiter à ajuster la quantité de bouillon en cours de cuisson.\nAjouter le poulet en fin de cuisson.',NULL),
(7,'Ardéchois - version avec oeufs','60',3,6,'6','Mélanger la crème de marrons, la farine, le beurre mou, les jaunes puis les blancs en neige.\r</p><p>Verser dans le moule à manquer beurrer. Cuire 30 minutes à 180°C.',NULL),
(8,'Madeleine ardéchoise','40',3,6,'5','Dans un bol, mélanger le sucre et les oeufs, puis y ajouter la farine et la levure.\r</p><p>Faire ramollir le beurre et le l''incorporer à la crème de marrons ainsi que le rhum. Incorporer à la première préparation en travaillant avec une cuiller en bois.\r</p><p>Beurrer le moule. En y versant la pâte, elle ne doit pas dépasser la mi-hauteur, car le gâteau gonfle beaucoup.\r</p><p>Enfourner pendant 30 minutes à 180 °C. On peut démouler à chaud ou à froid.',NULL),
(9,'Blinis','120',2,3,'40','Délayer la levure dans un peu de lait tiède et laisser reposer pendant 10 minutes.##\r\nFormer un puits avec la farine, y verser le reste du lait et mélanger.##\r\nAjouter la levure, les jaunes d''oeufs et le sel. Laisser reposer une heure.##\r\nJuste avant de cuire les blinis à la poêle, incorporer les blancs montés en neige. Les faires cuire avec un noisette de beurre. ',NULL),
(10,'Brownies','60',3,6,'6','Travailler le beurre pommade, le sucre et le sucre vanillé, pour le rendre crémeux, puis ajouter les oeufs un à un.<br/>\r\nFaire fondre le chocolat puis incorporez le au mélange précédent. Ajouter la farine, la levure et le sel. Continuer de mélanger, la pâte doit être homogène.<br/>\r\nFinalement, ajouter les cerneaux de noix, homogénéiser, remplir le moule et enfourner pour 45 minutes.',NULL),
(30,'Madeleines','30',5,3,'28','Faire blanchir les œufs et le sucre. Incorporer la farine puis le beurre mou.\r</p><p>Mettre le bol au réfrigérateur pendant au moins 3 heures.\r</p><p>Verser dans les moules et enfourner. Sortir et démouler dès la fin de la cuisson.',NULL),
(33,'Crème mousseline pralinée','240',7,6,'6','Dans une casserole, mettre le lait et le pralin. En parallèle, battre les jaunes et le sucre, puis ajouter la farine. Une fois le lait chaud, le verser, petit à petit, sur la préparation, en battant.<br/>\r</p><p>Une fois le mélange homogène, filtrer avec le chinois dans la casserole. Sur le feu, tourner sans arrêt la crème jusqu''à ce qu''elle épaississe. Filmer au contact et réserver pour 3 heures environ, le temps que la crème soit bien froide.<br/>\r</p><p>Battre le beurre en pommade. L''incorporer doucement dans la crème au batteur électrique.<br/>\r</p><p>Pour conserver la crème, la filmer au contact et la garder au frigo.',NULL),
(39,'Sorbet abricot','360',4,6,'6','Faire cuire les abricots lavés et coupés en morceaux dans l''eau.\r</p><p>Réduire en purée avec le mixer puis passer au chinois. Le filtrat n''est pas utilisé.\r</p><p>Mettre au congélateur et couvrir. Remuer régulièrement (toute les heures environs) pour éviter la formation de paillettes',NULL),
(41,'Gâteau de Savoie','40',3,6,'6','Faire blanchir les oeufs et le sucre au fouet. Ajouter ensuite la farine et la fécule en incorporant délicatement à la maryse.\r</p><p>Verser la préparation dans le moule, préalablement graissé puis enfourner',NULL),
(42,'Feuilles de vigne farcies','90',2,6,'4','Préparer la farce : dans la sauteuse, faire revenir les oignons dans l''huile. Ajouter le riz, faire légèrement dorer. Ajouter le jus d''un demi citron, la tomate concassée, les herbes hachées finement et les brisures de noix. Ajuster lassaisonnement.\r</p><p>Farcir les feuilles de vigne : avec une cuillère, déposer une petite quantité de farce au milieu de la feuille. Replier les bords sur le centre, puis rouler le tout, pas trop serré !\r</p><p>Faire cuire : couvrir le fond de la sauteuse de quelques feuilles de vigne et d''un filet d''huile. Poser les roulés au fond, bien serré. Recouvrir d''eau puis poser une assiette dessus. Laisser à feu doux pendant 45 minutes (environ).',NULL),
(44,'Financiers','30',5,3,'16','Battre vigoureusement les blancs et le sucre. Ajouter la poudre d''amandes et la farine, bien incorporer. Ajouter finalement le beurre fondu ou noisette.\r</p><p>Verser dans les petits moules à financiers préalablement beurrés et enfourner.',NULL),
(45,'Boba','60',6,3,'200','Dans la poêle, faire chauffer l''eau et le sucre. Lorsque ce dernier est bien dissous, ajouter une cuiller de farine de tapioca et bien remuer. Il ne doit pas y avoir de grumeaux. Ajouter ensuite la moitié de la farine et bien incorporer, la pâte doit être collante. Finalement, ajouter le reste de farine et couper le feu. Commencer à incorporer la farine dans la mixture.\r</p><p>Verser le tout sur un plan de travail et le travailler pour en faire un gros bloc patatoïde. Le rouler en petits boudins (ne pas hésiter à couper les boudins pour que ce soit plus facile) d''environ 1 cm de diamètre.\r</p><p>Les couper en tronçons d'' 1 cm de long puis les façonner, un à un, en petites boules. Cette étape est optionnelle, mais le résultat est meilleur.\r</p><p>Les faire ensuite cuire dans de l''eau bouillantes pendant 20 à 25 minutes. Les sortir et les mettre dans un sirop éventuellement aromatisé.',NULL),
(46,'Bilo-bilo','25',4,3,'20','Mettre une grande casserole d''eau à bouillir, éventuellement sucrée.\r</p><p>Mélanger l''eau et la farine de façon à avoir une pâte bien uniforme et homogène.\r</p><p>Lorsque c''est le cas, former un petit boudin de quelques centimètres dépaisseur. Le couper tous les 2 ou 3 centimètres et façonner des boules avec chaque morceau.\r</p><p>Les mettre dans l''eau bouillantes pour une dizaine de minutes (jusqu''à ce qu''elles remontent à la surface).',NULL),
(47,'Sirop aux épices','30',7,2,'250','Faire bouillir l''eau avec le poivre, les gousses de cardamome ouvertes, les bâtons de cannelle et les clous de girofles éclatés. Ajouter le sucre et faire bouillonner quelques minutes.',NULL),
(48,'Café frappé','10',6,6,'2','Mettre le café, le sirop et les glaçons dans le shaker, shake, shake, shake, c''est prêt !',NULL),
(51,'Sirop d''écorces d''oranges','90',7,3,'1','Prélever le zeste d''une orange. Le faire blanchir 1 minute à l''eau bouillante (cette eau peut être utilisée, attention toutefois, elle est très amère).\r</p><p>Faire bouillir l''eau et le sucre, y plonger les écorces, faire reposer 1 heure au minimum (1 nuit si possible).',NULL),
(53,'Crème au beurre à l''écorce d''oranges','80',7,1,'450','Battre les oeufs, ils doivent tripler de volume.\r</p><p>Faire bouillir l''eau et le sirop et maintenir le frémissement pendant une minute, puis verser sur les oeufs tout en battant.\r</p><p>Une fois le mélange refroidie, ajouter le beurre pommade en morceaux et battre jusqu''à ce que la préparation soit lisse.\r</p><p>Faire prendre au frigo.',NULL),
(57,'Pâte brisée','10',7,1,'350','Émietter le beurre et l''incorporer à la farine avec les doigts. Ajouter l''eau petit à petit jusqu''à ce que la pâte ait la consistance voulue. Si jamais on a ajouter trop d''eau, on peut rajouter de la farine.\r</p><p>\r</p><p>Si jamais la pâte a été beaucoup malaxée, attendre un peu avant de l''abaisser.',NULL),
(58,'Tarte à la choucroute','40',2,6,'4','Étaler la pâte brisée dans le moule. \r</p><p>Battre les œufs et la crème. Saler (éventuellement), poivrer, ajouter un peu de cumin moulu et des graines de cumin (selon son goût). \r</p><p>Ajouter la choucroute cuite, bien essorée. \r</p><p>Verser le tout sur la pâte et égaliser. \r</p><p>Répartir des tranches de munster sur la tarte et enfourner pour 30 minutes à 210°C. ',NULL),
(59,'Pâte à pizza','70',2,13,'1','Mélanger l''eau, le lait, le sucre et la levure. Mélanger pour dissoudre le tout. Ne surtout pas mettre le sel à ce moment !\r</p><p>Ajouter la farine et pétrir jusqu''à avoir une pâte légèrement collante mais surtout bien homogène. Ajouter enfin le sel et re-pétrir pour l''incorporer.\r</p><p>Faire reposer pendant 1h au minimum',NULL),
(60,'Macarons','90',4,3,'30','Mélanger la moitié des blancs dœufs avec le sucre glace et la poudre d''amande.\r</p><p>Réaliser un sirop avec l''eau et le sucre ; le porter à 115°C. Pendant que le sirop chauffe, monter les blancs restants en neige. Une fois le sirop à température, le verser sur les blancs en neige tout en battant.\r</p><p>Incorporer un tiers de la meringue à la première préparation. Une fois fait, incorporer le reste de la meringue, plus doucement.\r</p><p>Pocher de petits tas sur une (ou plusieurs) plaque(s). Les faire reposer au moins une demi heure, puis enfourner à 140°C pour 15 minutes, une plaque à la fois.',NULL),
(61,'Pains Naans','180',7,3,'8','',NULL),
(62,'Sauce tomate améliorée','20',2,6,'2','Couper les carottes et l''oignons en petits dés, les mettre dans la casserole avec l''huile et le sel à feu doux. Laisser cuire 5 minutes.\r</p><p>\r</p><p>Ajouter les épices (cannelle et piment), le jus du demi citron et son zeste. Laisser réduire encore 5 minutes.\r</p><p>\r</p><p>Enfin, ajouter ',NULL),
(63,'Cheesecake aux épices','1440',3,6,'6','Éventuellement, passer le yaourt grec à l''étamine pour en retirer le petit lait.\r</p><p>Réduire les spéculoos en poudre, ajouter le beurre, mélanger et disposer une couche de ce mélange au fond du moule. Mettre le moule au réfrigérateur.\r</p><p>Dans la casserole, mélanger l''agar-agar et le jus de citron. Ajouter le rhum, le sucre, la cannelle et la gousse de cardamome ouverte et mettre à chauffer à feu doux. Ce mélange doit bouillir pendant 2 minutes, pour activer l''agar-agar.\r</p><p>Battre le fromage frais et le yaourt grec pendant 30 secondes puis ajouter la crème liquide et continuer de battre jusqu''à ce que le mélange soit ferme. À ce stade, ajouter la préparation au citron qui doit avoir tiédit et continuer de battre.\r</p><p>Verser l''appareil au fromage sur la couche de biscuit et réfrigérer pendant une nuit au moins, pour que tous les arômes aient le temps de se développer et que l''agar-agar gélifie bien.',NULL),
(64,'Vinaigre d''anchois','10',7,2,'100','Faire chauffer le vinaigre dans la casserole, quand il bout, ajouter les filets d''anchois et laisser sur le feu jusqu''à ce qu''ils soient tous bien fondus.\r</p><p>\r</p><p>À conserver au réfrigérateur.',NULL),
(65,'Sorbet fruits rouges','240',4,2,'400','Faire chauffer les fruits rouges et le sucre dans la casserole de façon à avoir une purée, la passer dans le chinois pour retirer les pépins et la pulpe. Laisser refroidir et mettre au réfrigérateur dès que possible pour au moins 1 heure.\r</p><p>Mettre à sorbeter dans la sorbetière pour 45 minutes (ou plus).',NULL),
(66,'Muffins','90',4,3,'8','Battre les oeufs et le sucre, ajouter la farine, la levure et le sel et battre à nouveau. Ajouter le beurre mou et le lait, bien mélager. Finir en ajoutant les baies.\r</p><p>Mettre 1 heure au réfrigérateur puis enfourner 10 à 15 minutes à 180°C.',NULL),
(67,'Ardéchois - version sans oeufs','40',4,3,'32','Recette incomplète - à finaliser\r</p><p>Faire fondre le chocolat et mélanger tous les ingrédients. Enfourner dans de petits moules pendant ??? à ???.',NULL),
(68,'Sauce ''Suzette''','10',7,6,'2','Faire chauffer le jus d''orange dans la casserole, ajouter le sucre. Lorsque la préparation forme un sirop, ajouter le beurre et remuer jusqu''à ce qu''il soit bien fondu.',NULL),
(69,'Bavaroise aux marrons','360',3,6,'6','Faire bouillir le lait. En parallèle, battre les jaunes et le sucre, puis verser le lait sur ce mélange et reverser la préparation dans la casserole. Cuire à feu moyen/doux en tournant sans arrêt et ne surtout pas faire bouillir. S''arrêter lorsque la consistance ett crémeuse (on viennt de faire une crème anglaise).\r</p><p>Hors du feu, ajouter la gélatine trempée dans l''eau froide pendant au moins 5 minutes puis essorée. Incorporer ensuite les brisures et la crème de marrons. Laisser refroidir.\r</p><p>Au bout d''1 heure, quand la gelée est sur le point de prendre, battre la crème et l''incorporer à la préparation, ainsi que le rhum.\r</p><p>Laisser finir de prendre au réfrigérateur.\r</p><p>Éventtuellement, décorer avec de la chantilly.',NULL),
(70,'Crème anglaise','15',7,2,'500','Battre les jaunes et le sucre. En parallèle, mettre le lait à chauffer. Lorsqu''il frémit, le verser sur le mélange jaunes-sucre. Reverser le tout dans la casserole et laisser cuire en remuant constamment. Le mélange ne doit pas bouillir (il ne doit même pas dépasser les 85°C). C''est près lorsque la consistance est crémeuse, épaisse, et surtout pas grumeleuse.\r</p><p>On peut éventuellement ajouter du sucre vanillé, des épice, des zestes d''agrumes, y faire fondre du chocolat, ... pour la parfumer !',NULL),
(71,'Brioche de Verviers','1440',3,3,'1','Mettre le quart de la farine en puits, y émiétter la levure au centre et ajouter la moitié de l''eau, tiède. Incorporer la farine à l''eau+levure, jusqu''à avoir une pâte assez molle. La rouller en boule, la mettre dans la terrine et faire une croix sur le dessus. Laisser reposer ce levain, reprendre dès que la pâte à doubler de volume.\r</p><p>Mettre en puits le reste de la farine. Battre les oeufs, leur ajouter le reste de l''eau (environ 45 ml), le sucre et le sel. Verser dans le puits puis pétrir pendant 5 minutes. Ajouter le levain précédemment préparé au centre ; l''incorporer de façon à avoir une pâte homogène et pétrir 15 minutes.\r</p><p>Travailler le beurre ramolli à la cuiller puis l''incorporer à la pâte en pétrissant pendant au moins 5 minutes. Laisser lever jusqu''au lendemain.\r</p><p>Le lendememain, pétrir la pâte en lui incorporant la canelle en poudre. Laisser lever 3 heures.\r</p><p>Beurrer une plaque de four, y mettre la boule de pâte dessus. La fendre en croix et en cercle autour de cette croix et y mettre les pralines.\nCuire 40 à 50 minutes au four.',NULL),
(72,'Blinis','90',1,3,'20','Délayer le levure dans un ppeu de lait tiède, laisser reposer 10 minutes.\nFormer un puits avec la farine, y verser le lait restant, mélanger. Ajouter la levure, les jaunes d''oeufs et le sel. Laisser reposer 1 heure.\nJuste avant la cuisson des blinis, battre les blancs en neige et les incorporer à la préparation.\nFaire cuire les blinis dans une poêle légèrement beurrée un par un.',NULL);
INSERT INTO `RecetteIngredient` VALUES
(1,0,'40',1),
(1,1,'100',1),
(1,2,'25',1),
(1,4,'1000',1),
(1,8,'100',1),
(1,10,'200',1),
(1,30,'150',1),
(1,33,'37',1),
(1,39,'150',2),
(1,41,'120',1),
(1,44,'40',1),
(1,47,'150',1),
(1,51,'50',1),
(1,53,'90',1),
(1,59,'10',1),
(1,60,'300',1),
(1,61,'1',4),
(1,63,'75',1),
(1,65,'50',1),
(1,66,'100',1),
(1,67,'125',1),
(1,68,'50',1),
(1,70,'50',1),
(1,71,'20',1),
(2,7,'50',1),
(2,8,'100',1),
(2,9,'10',1),
(2,10,'200',1),
(2,30,'125',1),
(2,33,'75',1),
(2,44,'70',1),
(2,53,'200',1),
(2,57,'100',1),
(2,63,'75',1),
(2,66,'100',1),
(2,67,'125',1),
(2,68,'60',1),
(2,71,'250',1),
(2,72,'20',1),
(3,10,'100',1),
(3,67,'125',1),
(5,2,'150',2),
(5,9,'500',2),
(5,33,'375',2),
(5,59,'100',1),
(5,66,'80',2),
(5,69,'750',2),
(5,70,'500',2),
(5,72,'500',2),
(6,10,'1',7),
(6,69,'7',1),
(6,71,'5',1),
(7,6,'1',5),
(7,42,'1',5),
(7,61,'4',5),
(7,62,'1',5),
(8,5,'390',1),
(8,7,'50',1),
(8,8,'100',1),
(8,9,'300',1),
(8,10,'100',1),
(8,30,'150',1),
(8,33,'75',1),
(8,41,'60',1),
(8,44,'20',1),
(8,57,'250',1),
(8,59,'500',1),
(8,61,'500',1),
(8,66,'200',1),
(8,69,'250',1),
(8,71,'250',1),
(8,72,'300',1),
(9,8,'1',7),
(9,10,'1',4),
(9,61,'0.500000000',7),
(9,66,'1',4),
(10,5,'6',1),
(10,9,'10',1),
(10,59,'10',1),
(10,71,'7',1),
(10,72,'5',1),
(11,2,'1',3),
(11,7,'3',3),
(11,8,'2',3),
(11,9,'2',3),
(11,10,'2',3),
(11,30,'2',3),
(11,33,'3',3),
(11,41,'4',3),
(11,53,'2',3),
(11,58,'2',3),
(11,66,'2',3),
(11,71,'2',3),
(11,72,'2',3),
(12,5,'7',1),
(12,6,'1',4),
(12,9,'1',1),
(12,10,'2',1),
(12,42,'1',8),
(12,57,'1',1),
(12,59,'1',1),
(12,61,'1',4),
(12,62,'1',4),
(12,66,'1',8),
(12,71,'1',8),
(12,72,'1',8),
(13,1,'50',1),
(13,11,'1',4),
(14,1,'50',1),
(15,4,'8',3),
(16,4,'2',3),
(16,42,'0.500000000',3),
(16,62,'0.500000000',3),
(17,4,'1000',2),
(17,5,'240',1),
(17,6,'300',2),
(17,39,'300',1),
(17,45,'80',2),
(17,46,'80',1),
(17,47,'250',2),
(17,51,'100',2),
(17,57,'10',2),
(17,59,'200',1),
(17,60,'80',1),
(17,61,'180',2),
(17,71,'72',2),
(20,6,'6',3),
(20,47,'6',3),
(20,63,'1',3),
(21,6,'6',3),
(21,47,'4',3),
(22,6,'10',3),
(22,47,'12',11),
(24,6,'1',3),
(24,42,'3',3),
(24,62,'1',3),
(25,6,'1',3),
(26,6,'2',5),
(27,6,'2',3),
(28,6,'1',3),
(29,6,'250',1),
(29,42,'150',1),
(30,6,'500',2),
(31,6,'16',3),
(33,7,'500',1),
(33,8,'200',1),
(33,69,'250',1),
(34,7,'1',5),
(34,8,'4',4),
(34,63,'10',2),
(34,69,'25',2),
(36,10,'200',1),
(36,42,'30',1),
(42,0,'400',2),
(42,63,'200',2),
(42,69,'360',1),
(45,33,'150',1),
(46,39,'600',1),
(48,41,'60',1),
(49,42,'1',9),
(50,42,'20',10),
(51,42,'1',3),
(52,42,'30',3),
(53,44,'50',1),
(53,60,'300',1),
(54,44,'2',3),
(54,60,'210',1),
(55,69,'8',3),
(55,70,'4',3),
(56,45,'100',1),
(57,45,'50',1),
(58,46,'100',1),
(59,47,'2',3),
(60,48,'10',2),
(61,48,'3',12),
(62,48,'4',3),
(64,51,'1',3),
(65,53,'80',2),
(66,58,'275',1),
(67,58,'330',1),
(68,58,'350',1),
(72,60,'300',1),
(73,58,'2',5),
(74,58,'1',8),
(75,58,'1',8),
(76,61,'1',12),
(76,63,'200',1),
(77,61,'8',3),
(81,62,'200',2),
(82,62,'1',4),
(82,63,'1',1),
(82,71,'1',8),
(83,62,'0.500000000',4),
(84,62,'200',1),
(85,63,'4',1),
(86,63,'200',1),
(87,63,'175',1),
(88,64,'5',3),
(89,64,'100',2),
(90,65,'400',1),
(91,66,'100',1),
(92,68,'150',2),
(93,67,'500',1),
(94,69,'100',1),
(95,0,'2',1),
(95,69,'20',1),
(99,71,'50',1);
INSERT INTO `RecettePreparation` VALUES
(1,5,20,'250°C'),
(1,7,30,'180 °C'),
(1,8,30,'150-180 °C'),
(1,10,45,'180 °C'),
(1,30,15,'200°C'),
(1,41,30,'180 C'),
(1,44,20,'180C'),
(1,58,30,'210 °C'),
(1,60,15,'140°C'),
(1,61,10,'-'),
(1,66,10,'180C'),
(1,71,40,'200C'),
(2,4,2880,'-'),
(2,5,150,'-'),
(2,9,60,'-'),
(2,33,180,'-'),
(2,51,60,'-'),
(2,59,60,'-'),
(2,60,30,'-'),
(2,69,60,'-'),
(2,71,1320,'-'),
(2,72,60,'-'),
(3,0,5,'feu vif'),
(3,1,5,'feu moyen'),
(3,2,5,'feu doux'),
(3,4,20,'feu vif'),
(3,6,60,'feu doux'),
(3,9,5,'feu vif'),
(3,33,10,'feu moyen'),
(3,39,10,'-'),
(3,42,55,'-'),
(3,45,30,'-'),
(3,46,10,'feu vif'),
(3,47,20,'feu moyen'),
(3,51,1,'feu vif'),
(3,53,3,'feu doux'),
(3,60,5,'115°C'),
(3,62,15,'feu doux'),
(3,63,5,'feu doux'),
(3,64,5,'feu doux'),
(3,65,10,'feu doux'),
(3,68,5,'feu vif'),
(3,69,10,'feu moyen'),
(3,70,10,'feu moyen'),
(3,72,5,'feu vif'),
(4,0,210,'-'),
(4,30,5,'-'),
(4,53,60,'-'),
(4,63,1440,'-'),
(4,65,90,'-'),
(4,66,60,'-'),
(4,69,240,'-'),
(5,39,300,'-');
INSERT INTO `RecetteUstensile` VALUES
(0,0,'4, du style pots de yaourt en verre'),
(1,10,''),
(1,33,''),
(1,41,''),
(1,45,''),
(1,60,''),
(1,63,''),
(2,6,'grande !'),
(2,9,'petite'),
(2,11,'e'),
(2,45,'de préférence antiadhésive'),
(2,72,''),
(3,7,'moule à manquer, ⌀ 26cm'),
(3,8,'plutôt profond'),
(3,10,''),
(3,41,''),
(3,63,'bord amovible, ⌀ 20cm'),
(3,69,''),
(4,9,''),
(4,30,''),
(4,33,''),
(4,39,''),
(4,41,''),
(4,44,''),
(4,45,''),
(4,66,''),
(4,67,''),
(4,68,''),
(4,69,''),
(4,72,''),
(5,5,'grand !'),
(5,7,''),
(5,8,''),
(5,9,''),
(5,10,''),
(5,30,''),
(5,33,'grand'),
(5,39,'avec couvercle'),
(5,41,''),
(5,44,''),
(5,46,''),
(5,51,''),
(5,53,''),
(5,57,''),
(5,58,''),
(5,59,'assez grand pour pouvoir pétrir'),
(5,60,'un grand et un moyen'),
(5,63,''),
(5,66,''),
(5,67,''),
(5,69,''),
(5,70,''),
(5,71,'grand, façon terrine'),
(5,72,''),
(6,1,''),
(6,39,''),
(7,0,'pas trop grande !'),
(7,1,'fond épais de préférence'),
(7,2,''),
(7,4,'assez grande'),
(7,6,''),
(7,33,''),
(7,39,''),
(7,42,''),
(7,44,''),
(7,45,''),
(7,46,''),
(7,47,''),
(7,51,''),
(7,53,''),
(7,60,''),
(7,62,''),
(7,63,''),
(7,64,'petite !'),
(7,65,''),
(7,68,''),
(7,69,''),
(7,70,''),
(8,4,''),
(8,33,''),
(8,39,''),
(8,46,''),
(8,47,''),
(8,65,'trous plutôt larges'),
(9,33,''),
(9,53,''),
(9,60,''),
(9,72,''),
(10,30,''),
(11,44,''),
(12,48,''),
(13,58,'⌀ 30cm'),
(14,63,'éventuellement'),
(15,65,''),
(16,65,''),
(16,70,''),
(17,66,'');
INSERT INTO `Reutilise` VALUES
(1,33,NULL),
(45,46,NULL),
(51,53,NULL),
(57,58,NULL),
(70,69,NULL);
INSERT INTO `Unite` VALUES
(1,'g'),
(2,'mL'),
(3,'pièce(s)'),
(4,'cuiller(s) à café'),
(5,'cuiller(s) à soupe'),
(6,'personne(s)'),
(7,'sachet(s)'),
(8,'pincée(s)'),
(9,'botte(s)'),
(10,'feuille(s)'),
(11,'grain(s)'),
(12,'tasse(s)'),
(13,''),
(0,'');
INSERT INTO `Ustensile` VALUES
(1,'Maryse'),
(2,'Poêle'),
(3,'Moule'),
(4,'Fouet'),
(5,'Bol'),
(6,'Mixer sur pied'),
(7,'Casserole'),
(8,'Chinois'),
(9,'Batteur électrique'),
(10,'Moules à madeleines'),
(11,'Moules à financiers'),
(12,'Shaker'),
(13,'Moule à tarte'),
(14,'Étamine'),
(15,'Sorbetière'),
(16,'Grande cuiller'),
(17,'Moules à muffins'),
(0,'Pot');

View file

@ -1,49 +1,47 @@
/*!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.11.8-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: cuisine
-- ------------------------------------------------------
-- Server version 10.11.8-MariaDB-0ubuntu0.24.04.1
-- On retire les tables, dans le bon ordre !
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-- Table structure for table `Aime`
DROP TABLE IF EXISTS `Reutilise`;
DROP TABLE IF EXISTS `RecetteUstensile`;
DROP TABLE IF EXISTS `RecettePreparation`;
DROP TABLE IF EXISTS `RecetteIngredient`;
DROP TABLE IF EXISTS `Recette`;
DROP TABLE IF EXISTS `Aime`;
CREATE TABLE `Aime` (
`ingredient` int(11) DEFAULT NULL,
`humain` int(11) DEFAULT NULL,
`niveau` tinyint(4) DEFAULT NULL
DROP TABLE IF EXISTS `Preparation`;
DROP TABLE IF EXISTS `Ingredient`;
DROP TABLE IF EXISTS `Humain`;
DROP TABLE IF EXISTS `Genre`;
DROP TABLE IF EXISTS `Ustensile`;
DROP TABLE IF EXISTS `Unite`;
-- Table structure for table `Unite`
CREATE TABLE `Unite` (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nom mediumtext DEFAULT NULL
);
-- Table structure for table `Ustensile`
CREATE TABLE `Ustensile` (
id INTEGER PRIMARY KEY AUTOINCREMENT,
`nom` mediumtext DEFAULT NULL
);
-- Table structure for table `Genre`
DROP TABLE IF EXISTS `Genre`;
CREATE TABLE `Genre` (
`id` int(11) NOT NULL,
`nom` mediumtext DEFAULT NULL,
PRIMARY KEY (`id`)
id INTEGER PRIMARY KEY AUTOINCREMENT,
`nom` mediumtext DEFAULT NULL
);
-- Table structure for table `Humain`
DROP TABLE IF EXISTS `Humain`;
CREATE TABLE `Humain` (
`id` int(11) NOT NULL,
`nom` mediumtext DEFAULT NULL,
PRIMARY KEY (`id`)
id INTEGER PRIMARY KEY AUTOINCREMENT,
`nom` mediumtext DEFAULT NULL
);
-- Table structure for table `Ingredient`
DROP TABLE IF EXISTS `Ingredient`;
CREATE TABLE `Ingredient` (
`id` int(11) NOT NULL,
id INTEGER PRIMARY KEY AUTOINCREMENT,
`nom` mediumtext DEFAULT NULL,
`jan` tinyint(1) DEFAULT NULL,
`fev` tinyint(1) DEFAULT NULL,
@ -56,81 +54,78 @@ CREATE TABLE `Ingredient` (
`sep` tinyint(1) DEFAULT NULL,
`ocb` tinyint(1) DEFAULT NULL,
`nov` tinyint(1) DEFAULT NULL,
`dem` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`)
`dem` tinyint(1) DEFAULT NULL
);
-- Table structure for table `Preparation`
DROP TABLE IF EXISTS `Preparation`;
CREATE TABLE `Preparation` (
`id` int(11) NOT NULL,
`nom` mediumtext DEFAULT NULL,
PRIMARY KEY (`id`)
id INTEGER PRIMARY KEY AUTOINCREMENT,
`nom` mediumtext DEFAULT NULL
);
-- Table structure for table `Aime`
CREATE TABLE `Aime` (
`ingredient` INTEGER DEFAULT NULL,
`humain` INTEGER DEFAULT NULL,
`niveau` tinyint(4) DEFAULT NULL,
PRIMARY KEY (ingredient, humain),
FOREIGN KEY (ingredient) REFERENCES Ingredient(id),
FOREIGN KEY (humain) REFERENCES Humain(id)
);
-- Table structure for table `Recette`
DROP TABLE IF EXISTS `Recette`;
CREATE TABLE `Recette` (
`id` int(11) NOT NULL,
id INTEGER PRIMARY KEY AUTOINCREMENT,
`nom` mediumtext DEFAULT NULL,
`tempsTotal` mediumtext DEFAULT NULL,
`genre` int(11) DEFAULT NULL,
`unitePortion` int(11) DEFAULT NULL,
`genre` INTEGER DEFAULT NULL,
`unitePortion` INTEGER DEFAULT NULL,
`nbPortion` mediumtext DEFAULT NULL,
`realisation` mediumtext DEFAULT NULL,
`commentaire` mediumtext DEFAULT NULL,
PRIMARY KEY (`id`)
FOREIGN KEY (genre) REFERENCES Genre(id),
FOREIGN KEY (unitePortion) REFERENCES Unite(id)
);
-- Table structure for table `RecetteIngredient`
DROP TABLE IF EXISTS `RecetteIngredient`;
CREATE TABLE `RecetteIngredient` (
`ingredient` int(11) NOT NULL,
`recette` int(11) NOT NULL,
`quantite` mediumtext DEFAULT NULL,
`unite` int(11) DEFAULT NULL,
PRIMARY KEY (`ingredient`,`recette`)
`ingredient` INTEGER NOT NULL,
`recette` INTEGER NOT NULL,
`quantite` mediumtext DEFAULT NULL,
`unite` INTEGER DEFAULT NULL,
PRIMARY KEY (`ingredient`, `recette`),
FOREIGN KEY (ingredient) REFERENCES Ingredient(id),
FOREIGN KEY (recette) REFERENCES Recette(id),
FOREIGN KEY (unite) REFERENCES Unite(id)
);
-- Table structure for table `RecettePreparation`
DROP TABLE IF EXISTS `RecettePreparation`;
CREATE TABLE `RecettePreparation` (
`preparation` int(11) NOT NULL,
`recette` int(11) NOT NULL,
`duree` int(11) DEFAULT NULL,
`preparation` INTEGER NOT NULL,
`recette` INTEGER NOT NULL,
`duree` INTEGER DEFAULT NULL,
`temperature` mediumtext DEFAULT NULL,
PRIMARY KEY (`preparation`,`recette`)
PRIMARY KEY (`preparation`,`recette`),
FOREIGN KEY (preparation) REFERENCES Preparation(id),
FOREIGN KEY (recette) REFERENCES Recette(id)
);
-- Table structure for table `RecetteUstensile`
DROP TABLE IF EXISTS `RecetteUstensile`;
CREATE TABLE `RecetteUstensile` (
`ustensile` int(11) NOT NULL,
`recette` int(11) NOT NULL,
`ustensile` INTEGER NOT NULL,
`recette` INTEGER NOT NULL,
`commentaire` mediumtext DEFAULT NULL,
PRIMARY KEY (`ustensile`,`recette`)
PRIMARY KEY (`ustensile`,`recette`),
FOREIGN KEY (ustensile) REFERENCES Ustensile(id),
FOREIGN KEY (recette) REFERENCES Recette(id)
);
-- Table structure for table `Reutilise`
DROP TABLE IF EXISTS `Reutilise`;
CREATE TABLE `Reutilise` (
`utilisee` int(11) NOT NULL,
`utilisant` int(11) NOT NULL,
`utilisee` INTEGER NOT NULL,
`utilisant` INTEGER NOT NULL,
`quantite` mediumtext DEFAULT NULL,
PRIMARY KEY (`utilisee`,`utilisant`)
PRIMARY KEY (`utilisee`,`utilisant`),
FOREIGN KEY (utilisee) REFERENCES Recette(id),
FOREIGN KEY (utilisant) REFERENCES Recette(id)
);
-- Table structure for table `Unite`
DROP TABLE IF EXISTS `Unite`;
CREATE TABLE `Unite` (
`id` int(11) NOT NULL,
`nom` mediumtext DEFAULT NULL
);
-- Table structure for table `Ustensile`
DROP TABLE IF EXISTS `Ustensile`;
CREATE TABLE `Ustensile` (
`id` int(11) NOT NULL,
`nom` mediumtext DEFAULT NULL
);
-- Dump completed on 2025-02-22 23:24:29

View file

@ -1,70 +1,63 @@
<?php
function transformeCharsAutorises($entree){
$transformations = [
'#Œ#' => 'Oe',
'#œ#' => 'oe',
'#Æ#' => 'Ae',
'#æ#' => 'ae',
'#[^a-zàâäéèêëîïôöùûüÿçñA-ZÀÂÄÉÈÊËÎÏÔÖÙÛÜŸÇÑ ,\'-]#' => '',
'#^[ ,-]+#' => '',
'#[ ]+$#' => '',
'#\'#' => '\\\''
];
foreach ($transformations as $reEtape => $remplacement){
$entree = preg_replace($reEtape, $remplacement, $entree);
}
// $transformations = [
// '#Œ#' => 'Oe',
// '#œ#' => 'oe',
// '#Æ#' => 'Ae',
// '#æ#' => 'ae',
// '#[^a-zàâäéèêëîïôöùûüÿçñA-ZÀÂÄÉÈÊËÎÏÔÖÙÛÜŸÇÑ ,\'-]#' => '',
// '#^[ ,-]+#' => '',
// '#[ ]+$#' => '',
// '#\'#' => '\\\''
// ];
// foreach ($transformations as $reEtape => $remplacement){
// $entree = preg_replace($reEtape, $remplacement, $entree);
// }
$entree = mb_strtoupper(mb_substr($entree, 0, 1)) . mb_substr($entree, 1);
// $entree = mb_strtoupper(mb_substr($entree, 0, 1)) . mb_substr($entree, 1);
return $entree;
}
function calculeMinutesFromTexte($texteDuree){
$texteDuree = preg_replace("/ /", "", $texteDuree);
// $texteDuree = preg_replace("/ /", "", $texteDuree);
preg_match("#(?:([0-9]*) ?j(?:our\(s\)|our|ours)?)? ?(?:([0-9]*) ?h(?:eure\(s\)|eure|eures)?)? ?(?:([0-9]*) ?min(?:ute\(s\)|ute|utes)?)?#", $texteDuree, $matches) ;
// preg_match("#(?:([0-9]*) ?j(?:our\(s\)|our|ours)?)? ?(?:([0-9]*) ?h(?:eure\(s\)|eure|eures)?)? ?(?:([0-9]*) ?min(?:ute\(s\)|ute|utes)?)?#", $texteDuree, $matches) ;
$dureeMinutes = 0;
// $dureeMinutes = 0;
foreach($matches as $clef => $duree){
if ($clef == 1 and $duree != NULL){$dureeMinutes += 1440*$duree;}
if ($clef == 2 and $duree != NULL){$dureeMinutes += 60*$duree;}
if ($clef == 3){$dureeMinutes += intval($duree);}
}
// foreach($matches as $clef => $duree){
// if ($clef == 1 and $duree != NULL){$dureeMinutes += 1440*$duree;}
// if ($clef == 2 and $duree != NULL){$dureeMinutes += 60*$duree;}
// if ($clef == 3){$dureeMinutes += intval($duree);}
// }
return $dureeMinutes;
return $texteDuree;
}
function calculeTexteFromMinutes($minute){
$restant = $minute;
$texteMinutes = '';
$tempsJours = intdiv($restant,1440);
$texteMinutes .= ($tempsJours) != 0 ? $tempsJours . ' jour(s) ' : '';
$restant = $restant % 1440;
$tempsHeures = intdiv($restant,60);
$texteMinutes .= ($tempsHeures) != 0 ? $tempsHeures . ' heure(s) ' : '';
$restant = $restant % 60;
$texteMinutes .= ($restant) != 0 ? $restant . ' minute(s)' : '';
// $restant = $minute;
// $texteMinutes = '';
// $tempsJours = intdiv($restant,1440);
// $texteMinutes .= ($tempsJours) != 0 ? $tempsJours . ' jour(s) ' : '';
// $restant = $restant % 1440;
// $tempsHeures = intdiv($restant,60);
// $texteMinutes .= ($tempsHeures) != 0 ? $tempsHeures . ' heure(s) ' : '';
// $restant = $restant % 60;
// $texteMinutes .= ($restant) != 0 ? $restant . ' minute(s)' : '';
return $texteMinutes;
return $minute;
}
function lectureVersEcriture($texte){
$texte = preg_replace("#<br/>#","##",$texte);
$texte = preg_replace("#</p><p>#","\n",$texte);
$texte = preg_replace("#⌀#","#diam",$texte);
function lectureVersEcriture($texte){// no-op
return $texte;
}
function ecritureVersLecture($texte){
$texte = preg_replace("/##/","<br/>",$texte);
$texte = preg_replace("/\n/","</p><p>",$texte);
$texte = preg_replace("/#diam/","",$texte);
function ecritureVersLecture($texte){//
return $texte;
}
function echappementBDD($texte){ //echappe tous les caractères pour que la chaînes soit acceptable dasn une requete SQL
$texte = preg_replace("/'/","\'",$texte);
function echappementBDD($texte){ // no-op
return $texte;
}
?>

View file

@ -1,124 +1,192 @@
<?php
function seConnecter() {
if($_SESSION['auth']){
$connexion = mysqli_connect(SERVEUR, SUPER_UTILISATRICE, SUPER_MOTDEPASSE, BDD);
}
else{
$connexion = mysqli_connect(SERVEUR, UTILISATRICE_PAR_DEFAUT, MOTDEPASSE_PAR_DEFAUT, BDD);
}
if (mysqli_connect_errno()) {
echo "<script>console.log('Echec de la connexion à la base');</script>";
exit();
}
mysqli_set_charset($connexion,'utf8');
return $connexion;
}
function getDB() {return new SQLite3("db/cuisine.db");}
// déconnexion de la BD
function deconnectBD($connexion) {
mysqli_close($connexion);
function getAssocFromQueryString($qs){
$db = getDB();
$stmt = $db->prepare($qs);
$result = $stmt->execute();
$assocArray = [];
while ($ligne = $result->fetchArray(SQLITE3_ASSOC)){
$assocArray[] = $ligne;
}
return $assocArray;
}
function getAllIngredients(){
$c = seConnecter();
$requete = "
SELECT *
FROM Ingredient
ORDER BY nom;
";
$resultatIngredients = mysqli_query($c, $requete);
$listeIngredients = [];
while($ingredient = mysqli_fetch_assoc($resultatIngredients)){
$listeIngredients[$ingredient['id']] = $ingredient;
$requeteListeIngredient = "SELECT nom, id FROM Ingredient ORDER BY nom;";
$resultatListeIngredient = getAssocFromQueryString($requeteListeIngredient);
$listeIngredient = [];
foreach ($resultatListeIngredient as $infoIngredient){
$listeIngredient[$infoIngredient['id']] = $infoIngredient;
}
deconnectBD($c);
return $listeIngredients;
return $listeIngredient;
}
function getAllUstensiles(){
$c = seConnecter();
$requete = "
SELECT *
FROM Ustensile
ORDER BY nom;
";
$resultatUstensiles = mysqli_query($c, $requete);
$listeUstensiles = [];
while($ustensile = mysqli_fetch_assoc($resultatUstensiles)){
$listeUstensiles[$ustensile['id']] = $ustensile;
$requete = "SELECT nom, id FROM Ustensile ORDER BY nom;";
$resultatListeUstensile = getAssocFromQueryString($requete);
$listeUstensile = [];
foreach ($resultatListeUstensile as $infoUstensile){
$listeUstensile[$infoUstensile['id']] = $infoUstensile;
}
deconnectBD($c);
return $listeUstensiles;
return $listeUstensile;
}
function getAllPreparations(){
$c = seConnecter();
$requete = "
SELECT *
FROM Preparation
ORDER BY nom;
";
$resultatPreparations = mysqli_query($c, $requete);
$listePreparations = [];
while($preparation = mysqli_fetch_assoc($resultatPreparations)){
$listePreparations[$preparation['id']] = $preparation;
$requete = "SELECT nom, id FROM Preparation ORDER BY nom;";
$resultatListePreparation = getAssocFromQueryString($requete);
$listePreparation = [];
foreach ($resultatListePreparation as $infoPreparation){
$listePreparation[$infoPreparation['id']] = $infoPreparation;
}
deconnectBD($c);
return $listePreparations;
return $listePreparation;
}
function getAllRecettes(){
$c = seConnecter();
$requete = "
SELECT *
FROM Recette
ORDER BY nom;
";
$resultatRecettes = mysqli_query($c, $requete);
$listeRecettes = [];
while($recette = mysqli_fetch_assoc($resultatRecettes)){
$listeRecettes[$recette['id']] = $recette;
$requete = "SELECT * FROM Recette ORDER BY nom;";
$resultatRecettes = getAssocFromQueryString($requete);
$listeRecette = [];
foreach($resultatRecettes as $infoRecette){
$listeRecette[$infoRecette['id']] = $infoRecette;
}
deconnectBD($c);
return $listeRecettes;
return $listeRecette;
}
function recupereGenres($c){
$requete = "
SELECT *
FROM Genre
;";
$resultatGenre = mysqli_query($c,$requete);
$listeGenres = [];
while ($genre = mysqli_fetch_assoc($resultatGenre)){
$listeGenres[$genre['id']] = $genre['nom'];
function getAllGenres(){
$requete = "SELECT nom, id FROM Genre;";
$resultatGenre = getAssocFromQueryString($requete);
$listeGenre = [];
foreach ($resultatGenre as $infoGenre){
$listeGenre[$infoGenre['id']] = $infoGenre;
}
return $listeGenres;
return $listeGenre;
}
function recupereUnites($c){
$requete = "
SELECT *
FROM Unite
;";
$resultatUnite = mysqli_query($c,$requete);
$listeUnites = [];
while ($unite = mysqli_fetch_assoc($resultatUnite)){
$listeUnites[$unite['id']] = $unite['nom'];
function getAllUnites(){
$requete = "SELECT * FROM Unite;";
$resultatUnite = getAssocFromQueryString($requete);
$listeUnite = [];
foreach ($resultatUnite as $unite){
$listeUnite[$unite['id']] = $unite;
}
return $listeUnites;
return $listeUnite;
}
// modification vaut false si on effectue une création de recette et l'id de la recette à modifier sinon
// les listes d'ingrédients, de préparation et d'ustensile sont des tableaux de tableaux indexés sur les id des éléments utilisés.
function getRecetteFromId($id){
$requete = "SELECT * FROM Recette WHERE id=$id;";
$resultat = getAssocFromQueryString($requete);
return ($resultat ? $resultat[0] : false);
}
function getRecetteFullFromId($id){
$requete =
"SELECT r.nom, r.id idRecette, r.nbPortion portions, u.nom unite, r.realisation, u.id idU, r.tempsTotal tempsTotal, g.nom genre
FROM Recette r JOIN Unite u ON r.unitePortion = u.id JOIN Genre g ON r.genre = g.id
WHERE r.id = $id";
$resultat = getAssocFromQueryString($requete);
return ($resultat ? $resultat[0] : false);
}
function getAllIngredientsWithRecetteId($id){
$requete =
"SELECT ri.ingredient idIngredient, i.nom nom, ri.quantite quantite, u.nom unite, u.id idU
FROM Ingredient i JOIN RecetteIngredient ri ON i.id = ri.ingredient JOIN Unite u ON ri.unite = u.id
WHERE ri.recette = $id
ORDER BY nom;";
$resultat = getAssocFromQueryString($requete);
$listeIngredient = [];
foreach ($resultat as $key => $value) {
$listeIngredient[] = $value;
}
return $listeIngredient;
}
function getAllUstensileWithRecetteId($id){
$requete =
"SELECT ru.ustensile idUstensile, u.nom nom, ru.commentaire commentaire
FROM Ustensile u JOIN RecetteUstensile ru ON u.id = ru.ustensile
WHERE ru.recette = $id
ORDER BY nom;";
$resultat = getAssocFromQueryString($requete);
$listeUstensile = [];
foreach ($resultat as $key => $value) {
$listeUstensile[] = $value;
}
return $listeUstensile;
}
function getAllPreparationWithRecetteId($id){
$requete =
"SELECT rp.preparation idPreparation, p.nom nom, rp.duree duree, rp.temperature temperature
FROM Preparation p JOIN RecettePreparation rp ON p.id = rp.preparation
WHERE rp.recette = $id
ORDER BY nom;";
$resultat = getAssocFromQueryString($requete);
$listePreparation = [];
foreach ($resultat as $key => $value) {
$listePreparation[] = $value;
}
return $listePreparation;
}
function getGenreWithRecetteId($id){
$requete =
"SELECT g.id id, g.nom nom
FROM Genre g JOIN Recette r ON g.id = r.genre
WHERE r.id = $id;";
$resultat = getAssocFromQueryString($requete);
return ($resultat ? $resultat[0] : false);
}
function getAllReutiliseeWithRecetteId($id){
$requete =
"SELECT reu.utilisee id, rec.nom nom
FROM Reutilise reu JOIN Recette rec ON reu.utilisee = rec.id
WHERE reu.utilisant = $id
ORDER BY nom;";
$resultat = getAssocFromQueryString($requete);
$listeReutilisee = [];
foreach ($resultat as $key => $value) {
$listePreparation[] = $value;
}
return $listeReutilisee;
}
function getRecetteCount(){
$requete = "SELECT COUNT(*) nb FROM Recette;";
$ret = getAssocFromQueryString($requete)[0]["nb"];
return $ret;
}
function safePutIngredient($nom, $dispo){
$db = getDB();
$nomSafe = $db->escapeString($nom);
$requete = "INSERT INTO Ingredient (nom, " . implode(', ', lANNEE) . ") VALUES ('$nomSafe'";
foreach (lANNEE as $mois){
$requete .= ", " . ($dispo[$mois] ? "1" : "0");
}
$requete .= ");";
return $db->exec($requete);
}
function safePutUstensile($nom){
$db = getDB();
$nomSafe = $db->escapeString($nom);
$requete = "INSERT INTO Ustensile (nom) VALUES ('$nomSafe');";
return $db->exec($requete);
}
function safePutUnite($nom){
$db = getDB();
$nomSafe = $db->escapeString($nom);
$requete = "INSERT INTO Unite (nom) VALUES ('$nomSafe');";
return $db->exec($requete);
}
// modification vaut false si on effectue une création de recette et l'id de la recette à modifier sinon
// les listes d'ingrédients, de préparation et d'ustensile sont des tableaux de tableaux indexés sur les id des éléments utilisés.
function insererRecette($infosRecette, $listeIngredients, $listeUstensile, $listePreparation, $listeReutilise, $modification){
$c = seConnecter();
try {
@ -237,4 +305,5 @@ function insererRecette($infosRecette, $listeIngredients, $listeUstensile, $list
}
?>

View file

@ -4,8 +4,6 @@ session_start();
error_reporting(E_ALL);
ini_set('display_errors', 'On');
require('local/credentials.php');
require('inc/constantes.php');
require('inc/routes.php');
require('inc/modele.php');

View file

@ -1,10 +0,0 @@
DROP USER IF EXISTS 'cuisine-normal-user'@localhost;
DROP USER IF EXISTS 'cuisine-privileged-user'@localhost;
CREATE USER 'cuisine-normal-user'@localhost IDENTIFIED BY 'Cuisine-normal@cook';
CREATE USER 'cuisine-privileged-user'@localhost IDENTIFIED BY 'Cuisine-privileged@cook';
USE 'cuisine';
GRANT SELECT ON *.* TO 'cuisine-normal-user'@localhost;
GRANT ALL ON *.* TO 'cuisine-privileged-user'@localhost;

View file

@ -1,3 +0,0 @@
<?php
define('db_file', 'db/cuisine.sqlite'); // l'emplacement du fichier
?>

View file

@ -1,8 +1,8 @@
<section id="principal">
<h2>Liste des ingrédients existants :</h2>
<ul>
<?php foreach($listeIngredient as $ingredient): ?>
<li><a href="index.php?page=element&type=ingredient&id=<?=$ingredient[0]?>"><?=$ingredient[1]?></a> (<?=$ingredient[2]?>)</li>
<?php foreach($listeIngredient as $id => $ingredient): ?>
<a href="index.php?page=element&type=ingredient&id=<?=$ingredient['id']?>"><li><?=$ingredient['nom']?> (nbrecettes)</li></a>
<?php endforeach ?>
</ul>
@ -10,7 +10,7 @@
<p>Ajouter un ingrédient :</p>
<form method="POST" action="index.php?page=ajouterElement">
<label for="nomIngredient">Nom :</label>
<input type="text" name="nomIngredient" pattern="<?=PATTERN_CHAMPS_NOM?>" title="<?=DESC_CHAMPS_NOM?>" required />
<input type="text" name="nomIngredient" title="<?=DESC_CHAMPS_NOM?>" required />
<br/>
<p>Disponibilité :</p>
<?php foreach (lANNEE as $mois):?>
@ -27,7 +27,7 @@
<h2>Liste des ustensiles existants :</h2>
<ul>
<?php foreach($listeUstensile as $ustensile): ?>
<li><a href="index.php?page=element&type=ustensile&id=<?=$ustensile[1]?>"><?=$ustensile[0]?></a></li>
<a href="index.php?page=element&type=ustensile&id=<?=$ustensile['id']?>"><li><?=$ustensile['nom']?></li></a>
<?php endforeach ?>
</ul>
@ -35,7 +35,7 @@
<p>Ajouter un ustensile :</p>
<form method="POST" action="index.php?page=ajouterElement">
<label for="nomUstensile">Nom :</label>
<input type="text" name="nomUstensile" pattern="<?=PATTERN_CHAMPS_NOM?>" title="<?=DESC_CHAMPS_NOM?>" required />
<input type="text" name="nomUstensile" title="<?=DESC_CHAMPS_NOM?>" required />
<br/>
<input type="submit" value="Ajouter l'ustensile"/>
</form>
@ -44,7 +44,7 @@
<h2>Liste des unités existantes :</h2>
<ul>
<?php foreach($listeUnite as $unite): ?>
<li><a href="index.php?page=element&type=unite&id=<?=$unite[1]?>"><?=$unite[0]?></a></li>
<a href="index.php?page=element&type=unite&id=<?=$unite['id']?>"><li><?=$unite['nom']?></li></a>
<?php endforeach ?>
</ul>

View file

@ -19,7 +19,7 @@
<h3>Ingrédient(s) :</h3>
<ul>
<?php foreach ($listeIngredientsRecette as $id => $infos): ?>
<?php foreach ($listeIngredientRecette as $id => $infos): ?>
<li id="ingredient<?=D.$id?>">
<?= $infos['nom'] . " : " . $infos['quantite'] . " " . $infos['unite'] ?>
</li>
@ -28,7 +28,7 @@
<h3>Ustensile(s) :</h3>
<ul>
<?php foreach ($listeUstensilesRecette as $id => $infos): ?>
<?php foreach ($listeUstensileRecette as $id => $infos): ?>
<li id="ustensile<?=D.$id?>">
<?= $infos['nom'] . ($infos['commentaire'] ? (" : " . $infos['commentaire']) : "") ?>
</li>
@ -37,7 +37,7 @@
<h3>Mode(s) de préparation :</h3>
<ul>
<?php foreach ($listePreparationsRecette as $id => $infos): ?>
<?php foreach ($listePreparationRecette as $id => $infos): ?>
<li id="preparation<?=D.$id?>">
<?= $infos['nom'] . " : " . $infos['duree'] . ($infos['temperature'] == '-' ? '' :" à " . $infos['temperature']) ?>
</li>
@ -82,7 +82,6 @@
<input
type="text"
name="nom"
pattern="<?= PATTERN_CHAMPS_NOM ?>"
placeholder="Nom de la recette"
<?php if($pageExiste == 2): ?>
value="<?= $infoRecette['nom'] ?>"
@ -95,7 +94,6 @@
<input
type="text"
name="nbPortion"
pattern="<?=PATTERN_CHAMPS_QUANTITE?>"
title="<?=DESC_CHAMPS_QUANTITE?>"
placeholder="Quantité"
<?php if($pageExiste == 2): ?>
@ -106,9 +104,9 @@
/>
<select name="unitePortion" required>
<option disabled selected value="NULL"><span>Unité</span></option>
<?php foreach ($listeUnite as $id => $nom): ?>
<?php foreach ($listeUnite as $id => $unite): ?>
<option value="<?=$id?>" <?= ($pageExiste == 2 and $infoRecette['idU'] == $id) ? 'selected' : '' ?>>
<?=$nom?>
<?=$unite['nom']?>
</option>
<?php endforeach ?>
</select>
@ -117,7 +115,6 @@
<input
type="text"
name="tempsTotal"
pattern="<?=PATTERN_CHAMPS_DUREE?>"
title="<?=DESC_CHAMPS_DUREE?>"
placeholder="Durée total de réalisation"
<?php if($pageExiste == 2): ?>
@ -130,7 +127,7 @@
<select required name="genre">
<option disabled selected>Genre</option>
<?php foreach($listeGenre as $id => $genre): ?>
<option value="<?=$id?>" <?= ($pageExiste == 2 and $infoRecette['genre'] == $genre) ? 'selected' : '' ?> ><?=$genre?></option>
<option value="<?=$id?>" <?= ($pageExiste == 2 and $infoRecette['genre'] == $genre['nom']) ? 'selected' : '' ?> ><?=$genre['nom']?></option>
<?php endforeach ?>
</select>
@ -141,7 +138,6 @@
<label></label>
<input
type="text"
pattern="<?=PATTERN_CHAMPS_QUANTITE?>"
title="<?=DESC_CHAMPS_QUANTITE?>"
placeholder="Quantité"
/>
@ -155,14 +151,13 @@
</select>
</li>
<?php if($pageExiste == 2): ?>
<?php foreach($listeIngredientsRecette as $idI => $ingredient): ?>
<?php foreach($listeIngredientRecette as $idI => $ingredient): ?>
<li id="ingredient<?= $idI ?>">
<label for="ingredient[<?= $idI ?>]"><?=$ingredient['nom']?></label>
:
<input
type="text"
name="ingredient[<?= $idI?>][quantite]"
pattern="<?=PATTERN_CHAMPS_QUANTITE?>"
title="<?=DESC_CHAMPS_QUANTITE?>"
value="<?= $ingredient['quantite'] ?>"
placeholder="Quantité"
@ -172,8 +167,8 @@
<option disabled selected value="NULL"><span>Unité</span></option>
<?php foreach ($listeUnite as $idU => $unite): ?>
<option value="<?=$idU?>"
<?= $listeIngredientsRecette[$idI]['idU'] == $idU ? 'selected' : '' ?>>
<?=$unite?>
<?= $listeIngredientRecette[$idI]['idU'] == $idU ? 'selected' : '' ?>>
<?=$unite['nom']?>
</option>
<?php endforeach ?>
</select>
@ -189,20 +184,18 @@
<label></label>
<input
type="text"
pattern="<?=PATTERN_CHAMPS_COMM?>"
title="<?=DESC_CHAMPS_COMM?>"
placeholder="Decription (éventuelle)"
/>
</li>
<?php if($pageExiste == 2): ?>
<?php foreach($listeUstensilesRecette as $id => $ustensile): ?>
<?php foreach($listeUstensileRecette as $id => $ustensile): ?>
<li id="ustensile<?=$id?>">
<label for="ustensile<?=D.$id?>"><?=$ustensile['nom']?></label>
:
<input
type="text"
name="ustensile[<?=$id?>][commentaire]"
pattern="<?=PATTERN_CHAMPS_COMM?>"
title="<?=DESC_CHAMPS_COMM?>"
placeholder="Description (éventuelle)"
value="<?= $ustensile['commentaire'] ?>"
@ -219,18 +212,16 @@
pendant
<input
type="text"
pattern="<?=PATTERN_CHAMPS_DUREE?>"
title="<?=DESC_CHAMPS_DUREE?>"
/>
minutes, à
<input
type="text"
pattern="<?=PATTERN_CHAMPS_TEMP?>"
title="<?=DESC_CHAMPS_TEMP?>"
/>
</li>
<?php if($pageExiste == 2): ?>
<?php foreach($listePreparationsRecette as $id => $preparation): ?>
<?php foreach($listePreparationRecette as $id => $preparation): ?>
<li id="preparation<?=$id?>">
<label><?=$preparation['nom']?></label>
pendant
@ -239,7 +230,6 @@
required
value="<?= $preparation['duree'] ?>"
name="preparation[<?=$id?>][duree]"
pattern="<?=PATTERN_CHAMPS_DUREE?>"
title="<?=DESC_CHAMPS_DUREE?>"
/>
minutes, à
@ -248,7 +238,6 @@
required
value="<?= $preparation['temperature'] ?>"
name="preparation[<?=$id?>][temp]"
pattern="<?=PATTERN_CHAMPS_TEMP?>"
title="<?=DESC_CHAMPS_TEMP?>"
/>
</li>