Validation champ texte pour jeu

Petit nouveau ! | 7 Messages

27 juin 2019, 16:43

Bonjour à tous,

Je suis ravis d'être ici avec vous. Voilà donc mon petit soucis.

Je suis en train de créer un jeu d'énigme où les personnes doivent répondre dans le champ texte et valider avec un bouton. Si la réponse est correcte, la personne est amenée sur une autre page présentant une autre énigme. Si la personne s'est trompée, une nouvelle page avec une grosse croix rouge et un texte lui disant qu'elle s'est trompée avec de nouveau un champ texte pour recommencer jusqu'à ce qu'elle trouve.

En soit, quelque chose de très simple mais je n'arrive pas à trouver ce que je vois sur le web. Je suis sous Wordpress et même si j'ai appris et comprends un peu le PHP, HTML, je ne suis pas capable de créer du code (et pour être tout à fait franc, je n'aime pas vraiment ça...mais pour mon projet, je suis prêt à remettre les mains dans le cambouis).

En cherchant un peu, j'ai trouvé des articles qui parlent de GET et POST, de formulaire d'enregistrement ou de contact, de redirection de page web (du style, cliquez ici si la page ne s'est pas chargé dans 3 secondes), de Apache et sa configuration, de base de données SQL, mais je ne sais absolument pas quoi faire de tout ça et cela ne ressemble pas vraiment à ce que je veux j'ai l'impression... :shock:

Je ne demande pas du code tout fait mais vous connaîtriez un tutorial qui explique un peu comment faire ce que je recherche de manière pour que je puisse même le customiser un peu cela serait grandiose et m'aiderait beaucoup.

A votre disposition si vous voulez plus d'informations.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10455 Messages

27 juin 2019, 17:22

Hello !

Je ne connais pas de tuto, mais voici peut être déjà une première ébauche que tu pourrais développer.

Avant de commencer et pour clarifier les notions de GET et POST : ce sont deux façons de transmettre des données à une page :
- En GET, les données sont passées dans l'url après un "?" : " mapage.php?maVariable=uneValeur&uneAutreVariable=UneAutreValeur. En actualisant la page, les variables sont systématiquement renvoyées. On s'en sert généralement pour passer les informations nécessaire à l'affichage de la page (un id, etc.)
- En POST, les données ne passent pas dans l'url et proviennent généralement d'un formulaire. En actualisant la page, le navigateur demande à l'utilisateur s'il veut renvoyer les informations soumises (pour éviter d'envoyer 2 fois un paiement par exemple). S'il accepte, on renvoi le formulaire, s'il refuse, bah en général ça plante ;)
Et on peut combiner les deux, c'est à dire recevoir un formulaire en POST, le traiter, puis rediriger l'utilisateur vers une page en GET. S'il actualise, il actualiser le GET et ne renvoi pas les informations en POST.

SI on en revient à tes moutons, voici une solution possible : faire une page par question qui va
1. contrôler si une réponse a été apportée et si elle est bonne rediriger l'utilisateur vers la page/question suivante
2. afficher la question et le formulaire
<?php
// on commence par vérifier si l'utilisateur arrive pour la première fois sur la page ou a déjà rempli et envoyé le formulaire
if (isSet($_POST['nomDeTonChamp']) { // pour cela il suffit de vérifier si l'un des champ du formulaire a été envoyé 
   // tu contrôle ensuite si la réponse envoyée correspond à celle que tu attends 
   if ( $_POST['nomDeTonChamp'] == 42 ) {
       header('Location: laPageDeLaProchaineQuestion.php'); // si oui, on redirige l'utilisateur
       exit(); // et on s'arrête là.
   }
   else {
      $erreur = "C'est pas la bonne réponse... essaye encore ! ";
   }
}
?>

<!-- on propose ensuite le formulaire qu'on va envoyer à la page courante via POST -->
<form name="monFormulaire" method="post" action="maPage.php" >
    <!-- ta question -->
   <p>Combien font 6 x 7 ?</p>
   <!-- le nom du champ te permet de récupérer la valeur saisie et de la comparer dans le code php -->
   <br /><input type="text" name="nomDeTonChamp" /> 
   <!-- et un bouton pour envoyer le formulaire -->
   <br /><input type="submit" value="Je tente ma chance" /> 
</form>

<?php 
//et on peut aussi afficher le message d'erreur quand l'utilisateur a soumit le formulaire et s'est trompé
if (isSet($erreur)) { // si on a eu une erreur plus haut
   echo '<p style="color:red">' . $erreur . '</p>';
}
?>
Ça n'est qu'une solution parmi d'autres, mais cela devrait déjà t'aiguiller un peu :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 7 Messages

28 juin 2019, 10:21

Bonjour Ryle et merci de te pencher sur mon cas.

Alors voilà ce que j'ai fais, avec plus ou moins de succès...
J'ai utilisé ton code en le mettant sur une de mes pages. Les balises apparaissent bien, mais cette partie “.$erreur.”> “ ; } ?>" n'est pas pris en compte et reste comme du texte brut. J'ai essayé de changer un peu cela à l'aide de documentation sur le net, mais cette partie reste muette.

C'est pas grave, j'ai donc essayé de répondre au quiz au moins de manière correcte. J'ai donc créé la page maPage.php que j'ai mis dans le dossier themes de mon site (là où il y a toutes les autres pages) avec le même contenu que la page où se trouve mon formulaire.

Cependant, lorsque je valide la chose, il me met page introuvable et me sort comme url : site.com/index.php/pageenquestion/maPage.php

Je ne suis pas très balèze sur certains points du PHP mais avoir 2 ".php", c'est pas normal n'est-ce pas ? :mrgreen: . Mais comment remplacer le index.php par ma page ?

Je continue mon exploration de tout ça mais si quelqu'un pouvait m'apporter une lampe car je suis dans une pénombre bien sombre haha :priere: .

Mammouth du PHP | 1566 Messages

28 juin 2019, 11:43

Non 2 .php n'est surement pas ce que tu veux.

Montre nous ton code pour qu'on puisse t'aider principalement tes redirections puisque c'est là que le bas blèsse.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Petit nouveau ! | 7 Messages

28 juin 2019, 15:40

Avec plaisir, mais maPage.php est assez chargée et longue. Là elle va prendre toute la page (j'ai fais inspecter la source et j'ai fait un copier coller que j'ai mis dans mon fichier PHP avec le script du formulaire ci-dessus).

Pour le code ci-dessus, voilà ce que j'en ai fait, j'ai juste changé les directions il me semble :
<?php
// on commence par vérifier si l'utilisateur arrive pour la première fois sur la page ou a déjà rempli et envoyé le formulaire
if (isSet($_POST['nomDeTonChamp']) { // pour cela il suffit de vérifier si l'un des champ du formulaire a été envoyé 
   // tu contrôle ensuite si la réponse envoyée correspond à celle que tu attends 
   if ( $_POST['nomDeTonChamp'] == 42 ) {
       header('Location: maPage.php'); // si oui, on redirige l'utilisateur
       exit(); // et on s'arrête là.
   }
   else {
      $erreur = "C'est pas la bonne réponse... essaye encore ! ";
   }
}
?>

<!-- on propose ensuite le formulaire qu'on va envoyer à la page courante via POST -->
<form name="monFormulaire" method="post" action="maPage.php" >
    <!-- ta question -->
   <p>Combien font 6 x 7 ?</p>
   <!-- le nom du champ te permet de récupérer la valeur saisie et de la comparer dans le code php -->
   <br /><input type="text" name="nomDeTonChamp" /> 
   <!-- et un bouton pour envoyer le formulaire -->
   <br /><input type="submit" value="Je tente ma chance" /> 
</form>

<?php 
//et on peut aussi afficher le message d'erreur quand l'utilisateur a soumit le formulaire et s'est trompé
if (isSet($erreur)) { // si on a eu une erreur plus haut
   echo "<p style='color:red;'>".$erreur."></p>";
}
?>
Mais où dois-je mettre mes réponses pour contrôler ? (Dans une base de données SQL ou est-ce que je confonds tout ?)
Parce que maPage.php est juste un copier-coller de la page actuelle avec comme nom maPage.php par contre.

EDIT : J'avais même tenté de changer la réponse du formulaire en supprimant les ponctuations pour avoir une réponse unique, mais mon test n'a pas l'air de vouloir s'afficher.
<?php
  $hello = "Le Mont-Saint michel"; // original string
  $unwantedChars = array(',', '!', '?', '-'); // create array with unwanted chars
  $hello = str_replace($unwantedChars, '', $hello); // remove them
  $hello = strtolower($hello); // convert to lowercase
  echo $hello;
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10455 Messages

01 juil. 2019, 10:14

Dans le code ci-dessus, on contrôle si la valeur spécifiée dans le champ nommé "nomDeTonChamp" est 42 via la ligne :
if ( $_POST['nomDeTonChamp'] == 42 )
Si tu veux vérifier si la valeur est "Mont Saint-Michel" plutôt que 42, il suffit de le modifier ainsi :
if ( $_POST['nomDeTonChamp'] == "Mont Saint-Michel" )
(et changer la question dans mon formulaire, parce que 6x7 ça fait pas "Mont Saint-Michel" ;))

Et si tu veux effectivement éviter les erreurs de ponctuation, de casse, etc. tu peux effectivement utiliser ton code sur la variable que tu récupères du formulaire et ajuster la valeur attendue en conséquence. En l'occurrence si tu enlèves les traits d'union, il faut aussi les enlever de ton résultat et si tu passes la chaine en minuscule, il faut faire de même :
$unwantedChars = array(',', '!', '?', '-'); // create array with unwanted chars
  $_POST['nomDeTonChamp'] = str_replace($unwantedChars, '', $_POST['nomDeTonChamp']); // remove them
  $_POST['nomDeTonChamp'] = strtolower($_POST['nomDeTonChamp']); // convert to lowercase
if ( $_POST['nomDeTonChamp'] == "mont saintmichel" )
Nota si l'utilisateur poste "Mont Saint Michel" avec un espace entre saint et michel au lieu d'un trait d'union, cela ne fonctionnera pas et il faudra adapter le code en conséquence ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 7 Messages

05 juil. 2019, 15:42

Rebonjour,

Désolé pour le retard, mais avec ce projet, je suis sur plusieurs choses à la fois. Mais me voilà, merci encore pour tes réponses.

J'ai effectué les différentes modifications nécessaires mais à vrai dire, je reste toujours sur mon problème d'adresse qui me donne un truc comme ça :

http://site.com/index.php/pageenquestion/maPage.php

J'ai essayé de changer la Location en donnant un chemin absolu vers le fichier maPage.php pour être sûr que le site comprenne mais il continue à donner cette adresse.
Je t'avouerai que je ne comprends pas trop l'architecture de Wordpress car chaque page créée sur Wordpress semble partir de la page index.php...

Je ne sais même pas si mon fichier maPage.php est correct. Il est un peu long mais si tu veux le voir je peux te l'envoyer par MP au pire si ça peut t'aider.

En tout cas, voilà le code que j'ai changé pour le formulaire :
<?php
// on commence par vérifier si l'utilisateur arrive pour la première fois sur la page ou a déjà rempli et envoyé le formulaire
if (isSet($_POST['nomDeTonChamp']) { // pour cela il suffit de vérifier si l'un des champ du formulaire a été envoyé
   // tu contrôle ensuite si la réponse envoyée correspond à celle que tu attends
$unwantedChars = array(',', '!', '?', '-'); // create array with unwanted chars
  $_POST['nomDeTonChamp'] = str_replace($unwantedChars, '', $_POST['nomDeTonChamp']); // remove them
  $_POST['nomDeTonChamp'] = strtolower($_POST['nomDeTonChamp']); // convert to lowercase
if ( $_POST['nomDeTonChamp'] == "mont saint michel" ) {
       header('http://site.com/index.php/dossierenquestion/maPage.php'); // si oui, on redirige l'utilisateur
       exit(); // et on s'arrête là.
   }
   else {
      $erreur = "C'est pas la bonne réponse... essaye encore ! ";
   }
}
?>

<!-- on propose ensuite le formulaire qu'on va envoyer à la page courante via POST -->
<form name="monFormulaire" method="post" action="maPage.php" >
    <!-- ta question -->
   <p>Dis Mont Saint Michel !</p>
   <!-- le nom du champ te permet de récupérer la valeur saisie et de la comparer dans le code php -->
   <br /><input type="text" name="nomDeTonChamp" /> 
   <!-- et un bouton pour envoyer le formulaire -->
   <br /><input type="submit" value="Je tente ma chance" /> 
</form>
A votre bon coeur, mon brave monsieur :mrgreen: !

Petit nouveau ! | 7 Messages

11 juil. 2019, 17:09

J'ai bûché sur mon problème cette semaine, mais je n'ai pas réussi à avancer donc si une âme charitable pouvait m'aider cela serait très charitable de sa part héhé. Parce que là je suis bien bloqué de chez bloqué ahah #-o

Eléphanteau du PHP | 18 Messages

15 juil. 2019, 03:42

Salut Himac

Je me suis arrêté à ton problème car j'avais fait un jeu comme ça sur mon site. il fonctionne pour des devinettes ou des quiz avec des réponses brèves. Je l'avais laissé en plan car je voulais y ajouter des options telles que la possibilité de passer outre une devinette ( pour y revenir plus tard ) ou encore de proposer des choix de réponses. Ça compliquait le code un peu trop à mon goût alors j'ai laissé tomber cette partie. J'ignore si ça fonctionnerait avec Wordpress. Pour le jeu tel que je l'ai conçu il faut absolument que tu aies accès à une base de données car les devinettes sont stockées dans une base et non pas sur des pages distinctes. Le jeu requiert deux tables dans la base et quatre pages php.
En gros:
1. Une première page très simple avec deux formulaires. Le premier formulaire sert pour entrer le pseudo des joueurs dans la table 'joueurs' et commencer la partie à la devinette no1. Le deuxième formulaire offre l'option de poursuivre la partie si le joueur l'avait déjà commencée.
2. Cette page-ci traite le premier formulaire. Il en résulte l'Insertion dans la table "joueurs" du nouveau venu et début de la partie à la devinette no1.
3. Le deuxième formulaire est traité sur cette troisième page. Le joueur déjà inscrit qui veut poursuivre la partie. Le code l'amène directement au no_devinette où il avait quitté la partie.
4. Cette quatrième page s'occupe de la bonne marche du jeu, c'est-à-dire que si le joueur répond correctement il progresse à la devinette (ou question) suivante.

Si tu es encore intéressé je pourrai te fournir des détails. Il faudra bien sûr que tu adaptes les codes et les améliore possiblement pour les vérifications de sécurité car je n'ai pas couvert tous les angles.
a+

Petit nouveau ! | 7 Messages

15 juil. 2019, 04:00

Salut, (Jean je présume héhé),

Merci pour ton retour, c'est sympa. En effet cela m'intéresserait d'en savoir plus, je te remercie bien !

Il faut donc une base de données, je me disais bien.
J'arrive plus ou moins à déchiffrer du code, mais je suis incapable d'en écrire par moi même, cela en dit long sur mon niveau en PHP MySQL ;), mais bon ça me dérange pas de mettre les mains dans le cambouis.

Concernant mon projet, plus précisément, je n'ai pas particulièrement besoin d'une partie Pseudo ou reprendre l'énigme en cours car un seul groupe ne peut accéder au site (les codes d'identification sont donnés à ce moment) et ce pendant la durée du jeu (3h), après le jeu se termine, et il n'est plus possible de rentrer de nouveau sur le site d'énigme. C'est un peu comme un Escape Room on peut dire, une fois le temps imparti écoulé, c'est fini.
Niveau sécurité, je n'y connais pas grand chose, donc je verrai ce que je peux faire.

Au plaisir de te lire à nouveau ;) !

Eléphanteau du PHP | 18 Messages

15 juil. 2019, 04:43

Re-salut

Je m'appelle Roland et je demeure au Québec. La rapidité avec laquelle tu as répondu à mon message suggère que tu es probablement dans le même fuseau horaire.

D'après la façon dont tu décris ton projet la solution que j'ai proposée ne te conviendrait pas du tout. Moi j'ai fait le jeu pour les membres d'un groupe. Les codes exigent un pseudo et il n'y a pas de limite de temps. Je vois mieux l'idée de ton jeu. Très Intéressant. Mes codes ne te serviraient à rien car c'est trop différent.

Je suppose que tu fixes une certaine heure pour le début du jeu. À ceux qui se présentent à ce moment-là tu donnes un code (un mot de passe en somme) et le plus rapide à trouver toutes les réponses gagne la partie. Je comprends ta comparaison avec Escape Room mais il n'y a pas vraiment d'interaction entre les joueurs , ou je me trompe ?
a+

Petit nouveau ! | 7 Messages

15 juil. 2019, 05:14

Ah excuse-moi, vu ton pseudo, je pensais que c'était un jeu de mots.

En effet, je ne réside pas en France mais de l'autre côté du continent américain en Asie, donc pour ma part j'ai déjà dormi.

Je vois, en effet, cela diffère un peu. Le jeu se joue en groupe, donc il n'y a pas d'interaction entre les joueurs sur le site même. J'avais cherché comment faire un quiz simple à partir d'une base de données, mais tout ce que me propose Google ce sont des quiz qui pose des questions à choix multiples, mais pas de champ validation comme je recherche, je dois pas mettre les bons mots clés.

Connais-tu un site expliquant ce que tu as fait avec ta BDD et ta page PHP ?

Eléphanteau du PHP | 18 Messages

16 juil. 2019, 02:42

Salut de nouveau Himac in touch

Je t'ai parlé de la manière dont je m'y suis pris pour faire un jeu mais j'ai constaté qu'il ne correspondait pas du tout à tes attentes.
Le jeu que tu planifies de créer est très différent. Je pense qu'on peut le faire autrement sans base de données et sans pseudo mais il te faudra autant de pages qu'il y a de devinettes, voire plus. Moi, je voulais éviter l'accumulation de pages, c'est la raison pour laquelle j'ai opté pour une base de données pour stocker les devinettes et les réponses. Par contre il y a un avantage avec les pages, tu peux poser des questions avec des choix de réponses.

Je vais poursuivre la discussion en messages privés car je crains qu'on nous reproche de transformer ce forum en chatroom. Dans une demie heure environ je vais t'envoyer un message privé.
a+