3 Commits

Author SHA1 Message Date
adrien 95b46e7a69 sauver les grilles invalides 2026-07-30 14:35:35 +02:00
adrien 1f543ba622 footer 2026-07-24 08:58:13 +02:00
adrien 0deeb2f104 erreur de yaml 2026-07-23 11:15:45 +02:00
4 changed files with 130 additions and 68 deletions
+11 -9
View File
@@ -93,8 +93,9 @@ class Grille implements ArrayAccess
$grilles = $this->gen_grilles();
$grilles->current();
$this->valide = $grilles->valid();
if ($grilles->valid()) {
if ($this->valide) {
$this->definitions = [
"horizontales" => [],
"verticales" => []
@@ -119,11 +120,10 @@ class Grille implements ArrayAccess
$this->definitions["verticales"][$x][] = $definition;
}
}
$this->save($id);
return true;
} else {
return false;
}
$this->save($id);
return $this->valide;
}
public function gen_grilles($i = 0, $lettres_ligne = NULL)
@@ -239,6 +239,7 @@ class Grille implements ArrayAccess
$_SESSION["grille"] = $this->grille;
$_SESSION["definitions"] = $this->definitions;
$_SESSION["valide"] = $this->valide;
}
public function load($id)
@@ -246,14 +247,15 @@ class Grille implements ArrayAccess
session_id("$this->largeur,$this->hauteur,$id");
session_start(["use_cookies" => false]);
if (!isset($_SESSION)) {
return false;
}
if (isset($_SESSION) && isset($_SESSION["grille"])) {
$this->grille = $_SESSION["grille"];
$this->definitions = $_SESSION["definitions"];
$this->valide = $_SESSION["valide"];
return true;
} else {
return false;
}
}
+39 -35
View File
@@ -286,7 +286,6 @@ ALTERCATIONS:
ALTESSE:
- Lionel Leteur: On lui donne du son
AM:
- ante meridiem
- Avant midi
AMADOUE:
- Jacques Drillon: Rend plus aimable qu'inflammable
@@ -334,9 +333,6 @@ AMOUR:
- Michel Laclos: Anarchiste bohémien
- Victoire de limaginaire sur lintelligence
- Mot en 5 lettres, trois voyelles, deux consonnes et deux idiots
- Victoire de l'imagination sur l'intelligence
AMPEREHEURE:
- Thierry Larsan: Ah c'est ça !
AMPLE:
- Georges Perec: L'informé veut l'être plus
AMPOULE:
@@ -479,6 +475,8 @@ APPRENTI:
- Michel Laclos: Bleu de travail
APPRET:
- Jean Teularge: Malgré son nom se met avant
APPRISE:
- Sue après avoir travaillé
APT:
- Jacques Drillon: Capabl
ARA:
@@ -956,14 +954,15 @@ BIGAMIE:
BIGOT:
- Ambrose Bierce: Personne qui est attachée avec zèle et obstination à une croyance que vous ne partagez pas
BILAN:
- Alain Schifres dans Les Hexagons: En général contrasté
- Alain Schifres: En général contrasté
BIOS:
- Programme de démarrage de base de lordinateur
BIS:
- Sport Cérébral: Cris dans le poulailler
- Bernard Philippet: Demande d'assistance
- Mot de rappel flatteur
- Rappel
- Couleur de pain gris tirant sur le beige
- Petite précision d'adresse
BLANC:
- Corinne Beltz: Toujours liquide quand il est sec
BLANCHE:
@@ -1155,22 +1154,21 @@ CAR:
CARABINE:
- Marc Aussitot: 22, ce nest pas pour les poulets, plutôt pour les lapins
CARACOLER:
- Alain Schifres dans Les Hexagons: Toujours en tête des sondages
- Alain Schifres: Toujours en tête des sondages
CARACTERE:
- Marc Aussitot: Un exemple que, chez le cochon, tout nest pas bon
CARAT:
- Jacques Drillon: Pour un solitaire, il est rarement seul
CARESSER:
- Alain Schifres dans Les Hexagons: Toujours dans le sens du poil
- Alain Schifres: Toujours dans le sens du poil
CARMEN:
- Gitane allumée
CARNIVORE:
- Ambrose Bierce: Qui s'adonne à l'action cruelle de manger l'infortuné végétal, ainsi que ses usufruitiers et continuateurs
CARTABLE:
- Roger La Ferté: Parfois transporté à dos d’âne
- Roger La Ferté: Parfois porté à dos d'âne
CARTE:
- ROUTIERE Carte indiquant à un automobiliste à peu près tout ce qu'il veut savoir, sauf la façon de la replier
CASAIT:
- Mariait sa fille à l'oncle Tom
CASANIERE:
- Georges Perec: Demeure en sa demeure
CASE:
@@ -1193,7 +1191,6 @@ CAVIAR:
CCCCC:
- Michel Laclos: D
CD:
- Compact Disc
- Disque laser
- Lettres diplomatiques
CE:
@@ -1309,6 +1306,8 @@ CINTRE:
- Lucien Lacau: A moitié rond quand il est plein
CIRAGE:
- Marc Aussitot: Etat second
CIRE:
- Hervé Hardouin: Tabarly le portait à l'endroit comme à l'envers
CIRCONCIS:
- Wikipourri: Manque de peau
CIRCONFLEXE:
@@ -1477,7 +1476,7 @@ COUR:
- Michel Laclos: Plat agréable à faire
- Bernard Philippet: S'annonce aux messieurs, se fait aux dames
COURAGE:
- Alain Schifres dans Les Hexagons: N’écouter que le sien
- Alain Schifres: N’écouter que le sien
- Art d'avoir peur sans que cela paraisse
COUREUR:
- Marc Aussitot: Avant, il prévient
@@ -2039,7 +2038,6 @@ EGOUT:
- Dédale: Collecteur de fonds
- Georges Perec: Sa bouche est un regard
- Antoine Block: Bas canal
- Georges Perec: Sa bouche est un regard
EGOUTIER:
- Max Favalelli: Passe par le regard et non par la bouche
- Michel Laclos: Passe par le regard, pas par la bouche
@@ -2150,7 +2148,6 @@ EN:
ENA:
- Robert Scipion: Fait aller au cabinet
- Pangloss: Nid de pontes
- Robert Scipion: Fait aller au cabinet
- École nationale d'administration
- Fabrique de grosses légumes
- Formation supérieure de commis
@@ -2225,7 +2222,7 @@ ENTIER:
ENTOLAGE:
- Michel Laclos: Vol de grues
ENTRACTE:
- Vide les baignoires et remplit les lavabos
- Renée David: Vide les baignoires et remplit les lavabos
ENTRAIN:
- Michel Laclos: Etat dalerte
ENTREFAITE:
@@ -2661,7 +2658,7 @@ FENAISON:
FER:
- Sport Cérébral: Pour chauffer ou refroidir
FERRY:
- Georges Perec: Peut vous transporter sauf sil sappelle jules
- Georges Perec: Peut vous transporter sauf sil sappelle Jules
FESSES:
- Bernard Philippet: On donne cher de leur peau
FESSIER:
@@ -2739,6 +2736,8 @@ FRAC:
- Julien Soulié: Exige le fric pour le fric
FREINAGE:
- Yannick Le Nagard: Use la gomme en ne la mettant plus
FRERE:
- Fils à papa
FRIGIDE:
- Terme utilisé par l'homme pour décrire la femme qui a moins d'appétit sexuel que lui
FRITES:
@@ -3525,6 +3524,8 @@ KABIG:
- Veste bretonne à capuchon
KAPO:
- Dans les camps nazis, détenu en charge des autres
KEBAB:
- Parfois chiche
KEFIR:
- Boisson gazeuse du Caucase
KEN:
@@ -3861,7 +3862,7 @@ LYNX:
M: []
MACADAM:
- Gustave Flaubert: A supprimé les révolutions : plus moyen de faire des barricades
- Gustave Flaubert: "A supprimé les révolutions : plus moyen de faire des barricades"
MACARONI:
- Michel Laclos: Pâte en tube
MACHICOULIS:
@@ -3882,7 +3883,7 @@ MAIN:
MAJOR:
- Thierry Larsan: Premier d'un concours ou premier ministre
MAJUSCULE:
- Dédale: Capitale d'etat
- Dédale: Capitale d'état
MALAISE:
- Jean Teularge: Indonésienne ou ça ne va pas
MALFAITEUR:
@@ -3896,7 +3897,7 @@ MANCHE:
MANCHETTE:
- Georges Perec: Concerne triplement un auteur de la série noire faisant du karaté en première page dun journal
MANET:
- Arcane: Artiste à lolympia
- Arcane: Artiste à lOlympia
MANGER:
- Ambrose Bierce: Accomplir successivement (et avec succès) les fonctions de mastication, humectation et déglutition
MANIFESTANTS:
@@ -3906,6 +3907,8 @@ MANSARDE:
MANTE:
- Croque monsieur
- Cruelle religieuse
MAO:
- Jaune et rouge
MAQUILLAGE:
- Opération qui consiste à tuer des baleines pour décorer des thons
MARAT:
@@ -3979,6 +3982,7 @@ MENU:
- Lionel Leteur: Ce nest pas à la cuisine quon l’épluche
- Sport Cérébral: Peut comporter du gros poisson mais ne convient qu'au fretin
- Bernard Philippet: Fin ou donne faim
- Mets sur une liste
MER:
- Max Favalelli: Ses paquets ne sont pas toujours recommandés
- Lucien Lacau: On peut la prendre par une anse
@@ -4273,6 +4277,8 @@ NEZ:
- Jean-Paul Vanden Branden: Coule quand tout est gelé
- Michel Laclos: N'a pas une vue précise des choses
- Hervé Hardouin: Coupe la poire en deux
NIA:
- Dédale: Parla pour ne rien dire
NIAGARA:
- Marc Aussitot: Un film dont la chute est connue dès le début
NICE:
@@ -4290,11 +4296,11 @@ NIELLE:
- Maladie des céréales
NIET:
- Marc Aussitot: Tintin au pays des soviets
- Didier Léonard: Sort si ça rase poutine
- Didier Léonard: Sort si ça rase Poutine
NIHILISTE:
- Ambrose Bierce: Russe qui nie l'existence de tout sauf de Tolstoï. Le fondateur du mouvement est Tolstoï
NIL:
- Sport Cérébral: Tout pour les egyptiens, rien pour les romains
- Sport Cérébral: Tout pour les Egyptiens, rien pour les Romains
- Grand fleuve d'Afrique
NINAS:
- Petit cigare fait de débris de tabac
@@ -4305,7 +4311,7 @@ NL:
NN:
- Nouvelle norme en abrégé
- Suite d'étoiles
'NO':
NO:
- Didier Léonard: Docteur ou veto
- Drame lyrique du Japon
NOBLES:
@@ -5427,7 +5433,7 @@ REVERS:
REVIENS:
- Marc Aussitot: Nom courant dune chose prêtée
REVISER:
- SC: Repasser pour ne pas avoir à repasser
- Sport Cérébral: Repasser pour ne pas avoir à repasser
REVISION:
- Marc Aussitot: On ne suit plus ses conseils
REVUES:
@@ -5756,10 +5762,9 @@ SENS:
- Bernard Philippet: Aucun des cinq n'est le bon
SENT:
- Michel Laclos: Flaire ou fleure
SENTIMENTS:
- PARTAGES Quand votre belle-mère est en train de reculer dans un ravin avec votre voiture neuve
SEP:
- Pièce de charrue qui porte le soc Avance avec l’âge
- Pièce de charrue qui porte le soc
- Avance avec lage
SEPS:
- Lézard à pattes très courtes
SEPTENNAT:
@@ -5790,7 +5795,6 @@ SESAME:
- Jacques Drillon: Il entre dans une galette ou il permet d'y accéder
SET:
- Dédale: Manche avec revers
- Manche au tennis
SETON:
- Drain sortant de l'orifice d'une plaie
SEUL:
@@ -5805,7 +5809,7 @@ SEVICES:
- Jacques Flament: Marquent à tous les coups
SEXE:
- Lionel Leteur: Un simple numéro pour la sécu
- Frédéric Dard: 'MASCULIN Ce qu''il y a de plus léger au monde : une simple pensée le soulève !'
- Frédéric Dard: 'Ce qu''il y a de plus léger au monde : une simple pensée le soulève !'
SEXES:
- André Counson: Leur différence ne doit pas empêcher leur égalité
SFTP:
@@ -5820,7 +5824,6 @@ SHERPA:
- Michel Vanobost: Monte des blancs en neige
SI:
- Yves Cunow: La seule note de musique
- Note de musique élevée
- Avec lui, on met Paris en bouteille
- Début de rêve
- Permet les châteaux en Espagne
@@ -5968,7 +5971,7 @@ SQL:
SS:
- Sa Sainteté devant le pape
- Forces Nazies
- Sécurité sociale
- Sécu
SSD:
- Support de stockage plus rapide que le HDD, sans pièces mécaniques
SSH:
@@ -6225,7 +6228,9 @@ TEMPS:
- Michel Laclos: Pas toujours recherché par celui qui l'a perdu
- Ce qui empêche tout d'arriver en même temps
TENEBRES:
- Jacques Drillon: Elles ont fourni une affaire à balzac
- Jacques Drillon: Elles ont fourni une affaire à Balzac
TENIA:
- Animal d'interieur
TENTACULE:
- Michel Laclos: Bras de mer
TENTE:
@@ -6479,7 +6484,7 @@ TUE:
- Julien Soulié: Impose le silence ou déjà silencieuse
TUER:
- Ambrose Bierce: Créer une vacance sans nommer un successeur
TUETETE:
TUE-TETE:
- Marc Aussitot: Casse au moins les oreilles
TUMULUS:
- Michel Laclos: Bosse dans les pompes funèbres
@@ -6540,7 +6545,6 @@ UPAS:
UPPERCUT:
- Lionel Leteur: Pain levé
UR:
- Marc Aussitot: Ses enfants sont sages
- Ville de fouilles en Chaldée
URANIUM:
- Robert Scipion: Nouveau riche
@@ -6554,7 +6558,7 @@ URE:
UREE:
- Déchet organique du corps humain
URI:
- Philippe Harang: Dans zurich ou pas très loin
- Philippe Harang: Dans Zurich ou pas très loin
- Canton suisse
URINE:
- Charge un pistolet au besoin
+16 -13
View File
@@ -1,7 +1,4 @@
<?php
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
include_once "Grille.php";
@@ -35,17 +32,17 @@ $basedir = $_SERVER["REQUEST_SCHEME"] . "://" . $_SERVER["HTTP_HOST"] . dirname(
if (!isset($_GET["grille"]) || $_GET["grille"] == "") {
do {
$id = uniqid();
$grille_valide = $grille->genere($id);
} while (!$grille_valide);
$grille->genere($id);
} while (!$grille->valide);
$_GET["grille"] = $id;
header("Location: $basedir/?" . http_build_query($_GET));
} else {
$id = htmlspecialchars($_GET["grille"]);
$grille_valide = $grille->load($id) || $grille->genere($id);
$grille->load($id) || $grille->genere($id);
}
function formatter_definition($definition) {
function formatter_definition(Array $definition) {
if (isset($definition["nb_mots"]) && $definition["nb_mots"] > 1) {
$nb_mots = $definition["nb_mots"];
$nb_mots = " <small>($nb_mots mots)</small>";
@@ -61,7 +58,7 @@ function formatter_definition($definition) {
return ucfirst($definition["definition"]) . $nb_mots . $auteur;
}
function definition_courante($definitions, $position) {
function definition_courante(Array $definitions, int $position) {
foreach ($definitions as $id => $definition) {
if ($position <= $definition["fin"])
return [$id, $definition];
@@ -129,7 +126,7 @@ function definition_courante($definitions, $position) {
</h1>
<h1 class="small width"><a href=".">Mots■croisés</a></h1>
<div class="grille-et-definitions">
<?php if ($grille_valide): ?>
<?php if ($grille->valide): ?>
<div class="grille">
<table>
<tr>
@@ -154,10 +151,10 @@ function definition_courante($definitions, $position) {
$title = [];
[$iddh, $definition_horizontale] = definition_courante($grille->definitions["horizontales"][$y], $x);
[$iddv, $definition_verticale] = definition_courante($grille->definitions["verticales"][$x], $y);
if (isset($definition_horizontale["definition"])) $title[0] = "" . $definition_horizontale["definition"];
if (isset($definition_horizontale["definition"])) $title[0] = "" . strip_tags($definition_horizontale["definition"]);
if (isset($definition_horizontale["nb_mots"])) $title[0] .= " [" . $definition_horizontale["nb_mots"] . " mots]";
if (isset($definition_horizontale["auteur"])) $title[0] .= " (" . $definition_horizontale["auteur"] . ")";
if (isset($definition_verticale["definition"])) $title[1] = "" . $definition_verticale["definition"];
if (isset($definition_verticale["definition"])) $title[1] = "" . strip_tags($definition_verticale["definition"]);
if (isset($definition_verticale["nb_mots"])) $title[1] .= " [" . $definition_verticale["nb_mots"] . " mots]";
if (isset($definition_verticale["auteur"])) $title[1] .= " (" . $definition_verticale["auteur"] . ")";
$title = htmlspecialchars(implode("\n", $title));
@@ -240,9 +237,10 @@ function definition_courante($definitions, $position) {
<h3 class="erreur">Erreur de génération de la grille</h3>
<?php endif ?>
</div>
<footer>
<ul>
<li>
<div class="nouvelle-grille">
<img src="favicons/favicon.svg" width="16" height="16">
<button type="submit">Nouvelle grille</button>
de
<input type="number" id="lignes" <?= isset($_GET["lignes"]) ? ' name="lignes"' : "" ?> value="<?= $hauteur ?>" min="<?= HAUTEUR_MIN ?>" max="<?= HAUTEUR_MAX ?>" />
@@ -250,6 +248,11 @@ function definition_courante($definitions, $position) {
<input type="number" id="colonnes" <?= isset($_GET["colonnes"]) ? ' name="colonnes"' : "" ?> value="<?= $largeur ?>" min="<?= LARGEUR_MIN ?>" max="<?= LARGEUR_MAX ?>" />
colonnes
</div>
</li>
<li><a href="https://git.malingrey.fr/adrien/mots-croises" target="_blank">Code source</a></li>
<li><a href=".." target="_blank">Autres jeux</a></li>
</ul>
</footer>
</form>
<script src="script.js"></script>
+53
View File
@@ -194,6 +194,22 @@ h2 {
margin: 1em auto 0 auto;
display: flex;
align-items: baseline;
position: relative;
}
.nouvelle-grille::before {
position: absolute;
content: "";
height: 16px;
width: 16px;
background: url(favicons/favicon.svg);
margin-right: 0.5em;
margin-left: calc(-16px - 0.5em);
padding: 0;
}
.nouvelle-grille :first-child {
padding-left: 0;
}
.nouvelle-grille button,
@@ -206,6 +222,14 @@ h2 {
cursor: pointer;
}
#lignes {
cursor: row-resize;
}
#colonnes {
cursor: col-resize;
}
.nouvelle-grille button {
text-decoration: underline;
}
@@ -235,6 +259,23 @@ h1 a:hover,
margin: 0;
}
footer a {
color: inherit;
}
footer li:first-of-type::marker {
content: none;
}
footer ul {
display: flex;
flex-flow: row;
margin: 0;
justify-content: center;
align-items: baseline;
gap: 1.4em;
}
@media (max-width: 1024px) {
h1.large.width {
display: none;
@@ -306,6 +347,18 @@ h1 a:hover,
margin: 0;
padding: 0;
}
footer {
margin: 1em 0 0.5em 0;
}
footer ul {
display: block;
}
footer li:first-of-type::marker {
content: initial;
}
}
@media (max-device-width: 768px) and (orientation: landscape) {