Page 1 sur 2
Mot de Passe en php ...
Posté : 07 juin 2008, 01:36
par Simmm
Bonjour, je suis l'admin d'un site d'énigme et je veux faire une page comme celle ci :
http://enigmeschristophe.free.fr/enigme ... nigme1.php
J'essaye mais je suis bloqué car dans le code source il y a la réponse...
Donc ça va pas ...
Comment il fait lui ??
Je suis bien embêté et je ne vois pas la solution...peut être saurez vous m'aidez ??
Posté : 07 juin 2008, 09:35
par cuisto44000
euh bah que veux tu faire precisement ?
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]
Posté : 07 juin 2008, 13:04
par animithra
Bonjour.
Je ne vois pas où tu vois que la réponse est dans le code source ?
Pour répondre à ta question de manière générale : n'est affiché dans le code source que les éléments lus côté client (HTML, JavaScript...), donc pour qu'un élément ne soit pas dans le code source il faut qu'il soit interprété côté serveur (variable php par exemple).
Note : le système d'énigmes est un jeu connu alors essaie au moins de varier dès la première page, parce qu'un jeu du même genre très rependu sur la toile commence par cette même question...
Bon courage, bon jeu et bonne progra !
Posté : 07 juin 2008, 13:33
par Simmm
En fait je suis en train de faire le même type d'énigmes...seulement je ne sais pas comment faire pour que ça fasse comme sur le lien que je vous avait montré !!!!
Posté : 07 juin 2008, 14:03
par Ryle
Tout simplement en comparant la réponse donnée à celle attendue avec php. Si la réponse est bonne tu rediriges l'utilisateur vers l'énigme suivante à coup de header(), si elle est erronnée il reste sur la page.
Posté : 07 juin 2008, 14:09
par Simmm
Concrétement ça donne quoi comme code car là moi je suis pas doué ! j'ai eu vraiment du mal à faire ce que j'ai fais

Posté : 07 juin 2008, 14:16
par ouckileou
Modération :
Merci d'utiliser un titre clair et qui correspond bien à ta demande.
Les titres contenant "HELP", "Aidez-moi !" n'apportent rien à la compréhension de ton problème.
Par ailleurs, nous savons déjà par ton message que tu as besoin d'aide.
Tu peux corriger ton titre en éditant ton premier message.
Merci de prendre le temps de lire les règlements.
Posté : 07 juin 2008, 14:17
par animithra
Si tu as du mal à ce point là, commence par les bases et fais un détour sur phpdebutant.org ou sur siteduzero.fr
Ca t'aidera de manière plus constructive que si on fait le travail à ta place...
Note à Ryle : de manière générale, ne vaut-il pas mieux conseiller aux débutant d'utiliser du javascript (window.location.replace(url)) pour la redirection ?
Parce que si tu utilises header() le jour où tu décides de mettre en place des sessions, tu as une belle erreur avec un header already sent...
Bonne progra !
Posté : 07 juin 2008, 14:30
par Simmm
Je résume mes questions ...et désolé pour le titre ...
Pour le formulaire, quelle est la page d'envoi?
-La page sur laquelle on se trouve à cet instant?
-la page contenant l'énigme suivante?
Parce que dans le deuxieme cas, la solution ne va pas : en effet on peut lire le nom de la page dans le code source!

Posté : 07 juin 2008, 15:07
par Ryle
Note à Ryle : de manière générale, ne vaut-il pas mieux conseiller aux débutant d'utiliser du javascript (window.location.replace(url)) pour la redirection ?
Parce que si tu utilises header() le jour où tu décides de mettre en place des sessions, tu as une belle erreur avec un header already sent...
Je préconiserais quand même plus la méthode php
Le jour ou j'au besoin de mettre en place des sessions, il me suffit simplement de mettre le session_start() avant l'appel à header() (ou au pire si je code comme un cochon, avec un bon buffer

). Donc à part un peu de rigueur dans ce que je fais, je n'ai aucune contrainte.
En revanche, en javascript je peux dépendre du navigateur du visiteur et de ses préférences (bon, c'est pas tant pour les 3 pauvres types qui ont désactivé javascript et chez qui aucun des sites utilisant ajax ou js ne fonctionne).
@Simmm : ben pourquoi tu poses la question si tu as déjà la réponse ?

Ton formulaire envoi la réponse à la page que tu consultes actuellement, et côté php, tu testes si une réponse a été donnée, si elle est bonne tu rediriges, sinon tu ne fais rien (où tu lui met un p'tit mot) et il reste sur la page pour essayer de nouveau

Posté : 07 juin 2008, 16:26
par animithra
Le jour ou j'au besoin de mettre en place des sessions, il me suffit simplement de mettre le session_start() avant l'appel à header()
Justement ça dépend peut-être de la version de php (je le concède) mais sur une ancienne version (3 ou 4 je ne sais plus) le code suivant me donnait un header already sent :
<?php
session_start();
//traitement
if(condition à respecter){
header();
}
?>
l me suffit simplement de mettre le session_start() avant l'appel à header()
pour ça tu n'as pas le choix, session_start() doit toujours être le premier élément écrit en php
Simmm :
de toute façon qu'il s'agisse d'une page contenant la réponse de manière évidente (ici le nom de la page) ou pas, il est évident que tu dois faire le test dans la page de la question sinon tu vas devoir tester la réponse dans la page suivante et rediriger vers la page de la question si c'est faux... un peu long non ?
Posté : 08 juin 2008, 12:12
par Ryle
pour ça tu n'as pas le choix, session_start() doit toujours être le premier élément écrit en php

Euh... non... du tout... ton session_start() doit être fait avant de pouvoir utiliser les sessions (via $_SESSION ou les fonctions associées), mais ca peut très bien être l'avant dernière ligne de ton code, la seule contrainte étant (comme pour le header) de ne pas avoir envoyé de données au navigateur au préalable
Maintenant c'est vrai qu'on le trouvera généralement en haut du script pour être sur de ne pas l'oublier et limiter les risques d'envoi de données préalable, mais c'est du coup juste par habitude que par contrainte qu'on l'y colle
Pour le soucis de version en revanche, je ne sais pas.. je n'ai pas le souvenir d'avoir eu de problème, mais on était peut être déjà sous php4 quand j'ai commencé à jouer avec les sessions..
Posté : 08 juin 2008, 22:39
par Simmm
Code : Tout sélectionner
<?php
define('LE_PASSWORD','mdp');
// On redirige si le password n'est pas transmis ou s'il est mauvais (différent de la valeur de la constant LE_PASSWORD)
if(empty($_POST['texte']) || ($_POST['texte'] !== LE_PASSWORD)) {
header(
"Status: 301 Moved Permanently", false, 301);
header(
"Location: http://www.faux.com");
exit;
}
else
{
header(
"Status: 301 Moved Permanently", false, 301);
header(
"Location: http://www.juste.com");
exit;
?>
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title></title>
</head>
<body>
<form method="post" action="depart.php" name="formu"><input
name="texte"> <input name="envoyer"
value="Valider la réponse" type="submit"></form>
</body>
</html>
J'ai ça comme code, ça me semble bon : mais ça fonctionne pas !
Ou est le probleme ?
Posté : 08 juin 2008, 23:30
par Ryle
Lorsque tu ouvres la page pour la première fois, il n'y a pas de valeur dans $_POST['texte'], du coup tu es redirigé vers faux.com avant même d'avoir pu voir le formulaire....
Par ailleurs oublie les header "301" , c'est pour indiquer qu'une page a été déplacée de manière définitive et n'a absolument aucun rapport avec ce que tu essayes de mettre en place..
Posté : 01 juil. 2008, 18:22
par Simmm
Apres pas mal de petage de plomb j'en suis arrivé à ça ...
<?php // Je récupère ma valeure du formulaire
// Remarque que texte correspond au nom du champ input dont je veut récupérer la
// valeur
@$txt=$_POST['texte'];
// Si cette valeur n'existe pas
// Pour accélérer les traitements je termine la balise PHP.
if (@!$txt)
{
?>
<form method="post" action="depart.php"
name="formu" id="formu"><input name="texte">
<input name="envoyer" value="Valider la réponse"
type="submit">
</form>
<?php }
// Sinon si la réponse vaut REPONSE que je considère être la bonne réponse,
// j'affiche n message qui me dit que c'est juste...
else if ($txt=="REPONSE")
{
echo("<h1>C'EST JUSTE !!!</h1>");
// C'est ici que tu peux utiliser ton renvoi avec Location
header ("Location: http://simmm.free.fr/");
}
// Toute autre valeur de $texte est fausse donc on affiche un message qui
// indique que la réponse est incorrecte.
else
{
echo("<h1>C'EST FAUX !!!</h1>");
}
echo("Valeur de \$txt = $txt");
?>
Mais ça marche toujours pas...
Je comprends rien ...