Mot de Passe en php ...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Mot de Passe en php ...

par agité » 02 juil. 2008, 14:43

Pour tester si un formulaire est passer il y a mieux que ca :

en utilisant if($_POST){ if($_POST['texte']) { ou if(isset($_POST['texte'])){ tu n'as pas le soucis, car il verrifie déjà que le formulaire a été valider avant de tester les valeurs de ce formulaire.

par Invité » 02 juil. 2008, 14:40

Ok et encore merci pour votre aide !!!

par ouckileou » 02 juil. 2008, 14:09

Modération :
Simmm, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

par Invité » 02 juil. 2008, 13:41

Merci c'est bon ça marche !!!
vous pouvez aller voir le résultat à cette adresse !!
http://simmm.free.fr/depart.php

par sadeq » 02 juil. 2008, 13:26

C'est normal, as-tu lu ce que je t'ai expliqué dans mon message précédent. Je le répète :
Il ne faut pas mettre d'echo avant un header() et en plus il faut toujours arrêter le programme juste après. Car header() est un redirecteur qui charge et envoi toute une réponse HTTP à partir d'une page externe.
Le code HTML qui se trouve dans la séquence d'exécution avant un header() PHP est considéré comme un echo. Il ne faut pas mettre alors du code HTML avant un header();

par Invité » 02 juil. 2008, 12:36

Warning: Cannot modify header information - headers already sent by (output started at /mnt/167/sdb/9/d/simmm/depart.php:2) in /mnt/167/sdb/9/d/simmm/depart.php on line 22

ça me met ça comme message d'erreur !

par sadeq » 01 juil. 2008, 20:51

Il ne faut ja mais mettre d'echo avant un header() et en plus il faut toujours arrêter le programme juste après. Car header() est un redirecteur qui charge et envoi toute une réponse HTTP à partir d'une page externe.
Le code HTML qui se trouve dans la séquence d'exécution avant un header() PHP est considéré comme un echo.
<?php // Je récupère ma valeur 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 existe
if (trim($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 (strtoupper(trim($txt)) == "REPONSE")
{
// C'est ici que tu peux utiliser ton renvoi avec Location
header ("Location: http://simmm.free.fr/"); //Aucun echo avant ce header
exit(); //arrêt après redirection
}
// 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>");
}
?> 

par Invité » 01 juil. 2008, 20:49

En fait ça ne marche pas que quand je rajoutes du html... si je mets que du php ça fonctionne

par sadeq » 01 juil. 2008, 20:46

<?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 existe
if (trim($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 (strtoupper(trim($txt)) == "REPONSE")
{
// C'est ici que tu peux utiliser ton renvoi avec Location
header ("Location: http://simmm.free.fr/");
exit(); //arrêt après redirection
}
// 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>");
}
?> 

par Simmm » 01 juil. 2008, 18:22

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 ...

par Ryle » 08 juin 2008, 23:30

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..

par Simmm » 08 juin 2008, 22:39

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">&nbsp;<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 ?

par Ryle » 08 juin 2008, 12:12

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..

par animithra » 07 juin 2008, 16:26

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 ?

par Ryle » 07 juin 2008, 15:07

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 :)