Se connecter avec
S'enregistrer | Connectez-vous

Probleme avec site protégé par mot de passe

Dernière réponse : dans Programmation

Bonjour,
Voici mon problème: j'ai créé ma page index.php avec un if/else pour protéger mon site avec un mot de passe. jusque là tout marche tres bien. Le probleme c'est que dans mon menu de navigation, j'ai un lien qui ramene à la page d'accueil (index.php), et quand on clique dessus, il redemande le mot de passe. Comment faire pour qu'il se souvienne que le visiteur s'est déjà identifié? J'avais pensé à faire en sorte que ma page d'accueil ne soit pas l'index.php, mais ca implique de demander au visiteur, une fois identifié, de cliquer sur un bouton/lien pour accéder à la page d'accueil, c'est un peu lourd je pense. donc je solicite votre aide pour simplifier tout ca en faisant en sorte que index.php soit la page d'accueil (et non pas uniquement la page d'acces) mais que le site ne redemande pas au visiteur le mot de passe à chaque retour sur la page d'accueil.
Merci à vous.

Autres pages sur : probleme site protege mot passe

Lassé par la pub ? Créez un compte

Bon alors, ca va pas du tout, je nage grave... Voici ce que j'ai fait et qui marche:
  1. <?php
  2.  
  3. if (isset($_POST['mot_de_passe'])) // Si la variable existe
  4. {
  5. // On se crée une variable $mot_de_passe avec le mot de passe entré
  6. $mot_de_passe = $_POST['mot_de_passe'];
  7. }
  8. else // La variable n'existe pas encore
  9. {
  10. $mot_de_passe = ""; // On crée une variable $mot_de_passe vide
  11. }
  12.  
  13. if($mot_de_passe == "pinguin")
  14. {
  15. ?>


Et ce que j'ai ajouté et qui ne marche pas:
  1. <?php
  2. setcookie("monsite", "$mot_de_passe", time());
  3. ?>


J'ai de plus un message d'erreur:
  1. Warning: Cannot modify header information - headers already sent by (output started at /mnt/125/sdb/b/0/monsite/index.php:2) in /mnt/125/sdb/b/0/monsite/index.php on line 19

La ligne 19 correspondant à la ligne du code "setcookie()"

Voilà, je m'en remets à vous parce que moi je suis perdu.
Merci.
Expert Programmation

Ca veut simplement dire que ton code php renvoie du texte (ou code) pour affichage dans ta page html avant la ligne 19. Et c'est impossible, setcookie dans être appelé avant tout code html. Vérifie qu'il n'y ait pas un "echo" ou un message d'erreur avant la ligne 19 quand tu génères ta page.

alors voici ma page, (sans le contenu html, et de toute facon tout le monde s'en fout):
  1. <?php
  2.  
  3. if (isset($_POST['mot_de_passe'])) // Si la variable existe
  4. {
  5. // On se crée une variable $mot_de_passe avec le mot de passe entré
  6. $mot_de_passe = $_POST['mot_de_passe'];
  7. }
  8. else // La variable n'existe pas encore
  9. {
  10. $mot_de_passe = ""; // On crée une variable $mot_de_passe vide
  11. }
  12.  
  13. if($mot_de_passe == "pinguin")
  14. {
  15. ?>
  16.  
  17. <?php
  18. setcookie("cookie_name", "$mot_de_passe", time());
  19. ?>
  20.  
  21. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</a>">
  22. <html xmlns="<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>" xml:lang="fr" lang="fr">
  23.  
  24. <head>
  25. <title>Ma page web</title>
  26. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
  27. <link rel="stylesheet" type="text/css" href="style.css" />
  28.  
  29. </head>
  30.  
  31. <body>
  32.  
  33. <p>Contenu de la page</p>
  34.  
  35. </body>
  36.  
  37. </html>
  38.  
  39. <?php
  40. }
  41.  
  42. else
  43. {
  44. ?>
  45.  
  46. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</a>">
  47. <html xmlns="<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>" xml:lang="fr" lang="fr">
  48.  
  49. <head>
  50. <title>Ma page web</title>
  51. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
  52. <link rel="stylesheet" type="text/css" href="style.css" />
  53.  
  54. </head>
  55.  
  56. <body>
  57.  
  58. <p> </p>
  59. <p> </p>
  60. <p> </p>
  61. <p> </p>
  62.  
  63. <p>Pour des raisons de sécurité, l'accès de ce site est soumis à identification.</p>
  64. <p>Veuillez entrer le mot de passe :</p>
  65.  
  66. <form action="index.php" method="post">
  67. <p>
  68. <input type="text" name="mot_de_passe" /> <input type="submit" value="Entrer" />
  69. </p>
  70. </form>
  71.  
  72. </body>
  73.  
  74. </html>
  75.  
  76. <?php
  77. }
  78. ?>

Si : il y a une ligne blanche avant le "bloc" du setcookie..

dartyduck >> Tant que tu restes dans du code PHP, ne referme pas la balise <?php ... ?>.. Sinon, c'est interprété comme du code HTML, ce qui est proscrit avant l'envoi des en-têtes (headers)..

Ca donnera donc ça :
  1. <?php // ici aucun caractère avant l'ouverture de ta balise php, pas d'espace, pas de retour chariot (retour à la ligne, quoi)
  2.  
  3. if (isset($_POST['mot_de_passe'])) // Si la variable existe
  4. {
  5. // On se crée une variable $mot_de_passe avec le mot de passe entré
  6. $mot_de_passe = $_POST['mot_de_passe'];
  7. }
  8. else // La variable n'existe pas encore
  9. {
  10. $mot_de_passe = ""; // On crée une variable $mot_de_passe vide
  11. }
  12.  
  13. if($mot_de_passe == "pinguin")
  14. {
  15.  
  16. // ici pas de fermeture de balise php !
  17.  
  18. setcookie("cookie_name", "$mot_de_passe", time());
  19.  
  20.  
  21. // Ensuite, le mieux est encore de lancer le DOCTYPE depuis un "echo", aussi pour éviter une ligne blanche avant (IE ne tolère pas de ligne blanche ou toute autre forme de choses avant le DOCTYPE). Tu referas le même principe pour ton 'else'..
  22.  
  23. echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</a>">
  24. <html xmlns="<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>" xml:lang="fr" lang="fr">'."\n\n";
  25.  
  26. ?> // et tu refermes ta balise php ici..
  27.  
  28. // ici la suite.....

Ca paraît simple, mais c'est un piège assez courant, surtout quand on se met à jouer avec plusieurs scripts, notamment emboîtés à travers des fichiers..

:jap: 
Expert Programmation

Fait une vérif sur ta page accueil :

  1. if(isset($_COOKIE['...'])) // si le coockie existe
  2. {
  3. if($_COOKIE['...'] == '...') // et si sa valeur correspond à l'identifiant d'accès au site
  4. {
  5. // on affiche la page sans s'identifier
  6. }
  7. else
  8. {
  9. // on demande l'identification
  10. }
  11. }
  12. else
  13. {
  14. // on demande l'identification
  15. }


Technique simplissime et efficace, même si pas très élégante...

voici ce que j'ai fait:
  1. <?php
  2.  
  3. if (isset($_POST['mot_de_passe'])) // Si la variable existe
  4. {
  5. // On se crée une variable $mot_de_passe avec le mot de passe entré
  6. $mot_de_passe = $_POST['mot_de_passe'];
  7. }
  8. else // La variable n'existe pas encore
  9. {
  10. $mot_de_passe = ""; // On crée une variable $mot_de_passe vide
  11. }
  12.  
  13. if($mot_de_passe == "demigne" or $mot_de_passe == "lemoine")
  14. {
  15. setcookie("cookiename", "$mot_de_passe", time());
  16.  
  17. <echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</a>">
  18. <html xmlns="<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>" xml:lang="fr" lang="fr">'."\n\n";
  19. ?>

et le message que ca me donne qd je valide le mot de passe (ou meme quand il est faut d'ailleurs):
  1. Parse error: syntax error, unexpected '<' in /mnt/112/sdc/5/2/monsite/index.php on line 18
Expert Programmation

:/ 
L'erreur vient du < devant echo.

Et tu ne va pas aller bien loin avec un echo pour écrire toute ta page html !

Préfère :
  1. # if($mot_de_passe == "demigne" or $mot_de_passe == "lemoine" )
  2. # {
  3. # setcookie("cookiename", "$mot_de_passe", time());
  4. ?>
  5.  
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</a>">
  7. <html xmlns="<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>" xml:lang="fr" lang="fr">
  8.  
  9. <?php
  10. }
  11. ?>

Maintenant j'ai des nouveaux messages d'erreur. Ca me soule, je vaislaisser tomber, tant pis pour lemot de passe, c'est trop d'emmerdes et en plus je fais comme vous me dites mais je comprends pas ce que je fais, et ca me plait pas de pas comprendre. en plus j'aurais bien aimé vous donner l'adresse du site pour que vous voyez par vous meme mais j'ai pas envie qu'il se fasse référencer, et ce sera le ca. ou alors tu me donne ton mail et je t'envoie le lien, et on continue à en discuter sur le forum. c'est toi qui vois...
Expert Programmation

Je pense effectivement que si tu en comprends pas ce que tu fais, tu devrais laisser temporairement le temps de te mettre réellement au php... On ne va pas pouvoir t'aider tant que tu ne sauras pas ce que tu fais.

Reste avec le .htaccess, et tant pis pour le mot de passe. Du moins tant que tu ne maîtrises pas le php ;) 

Problème résolu:
ma page index.php contient seulement la demande de mot de passe, et j'ai donc créé une page accueil.php pour la page d'accueil (logique). Pour éviter d'avoir à faire mes ajouts (mise à jour) en double (et sur la page index, et sur la page accueil) j'ai intégré un include("accueil.php") dans ma page index, et du coup tout roule parfaitement ainsi.
Pour les cookies je verrai ca plus tard.
Merci à toi Marsien pour ta disponibilité.
Lassé par la pub ? Créez un compte