Probleme avec site protégé par mot de passe

dartyduck

Grand Meuble Suprême
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.
 

marsien

Grand Maître
il faut que tu utilises des sessions et/ou des cookies. Regarde en php les variables $_SESSION et $_COOKIE :merci:
 

dartyduck

Grand Meuble Suprême
Bon alors, ca va pas du tout, je nage grave... Voici ce que j'ai fait et qui marche:
[cpp]
<?php

if (isset($_POST['mot_de_passe'])) // Si la variable existe
{
// On se crée une variable $mot_de_passe avec le mot de passe entré
$mot_de_passe = $_POST['mot_de_passe'];
}
else // La variable n'existe pas encore
{
$mot_de_passe = ""; // On crée une variable $mot_de_passe vide
}

if($mot_de_passe == "pinguin")
{
?>
[/cpp]

Et ce que j'ai ajouté et qui ne marche pas:
[cpp]
<?php
setcookie("monsite", "$mot_de_passe", time());
?>
[/cpp]

J'ai de plus un message d'erreur:
[cpp]
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
[/cpp]
La ligne 19 correspondant à la ligne du code "setcookie()"

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

marsien

Grand Maître
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.
 

dartyduck

Grand Meuble Suprême
alors voici ma page, (sans le contenu html, et de toute facon tout le monde s'en fout):
[cpp]
<?php

if (isset($_POST['mot_de_passe'])) // Si la variable existe
{
// On se crée une variable $mot_de_passe avec le mot de passe entré
$mot_de_passe = $_POST['mot_de_passe'];
}
else // La variable n'existe pas encore
{
$mot_de_passe = ""; // On crée une variable $mot_de_passe vide
}

if($mot_de_passe == "pinguin")
{
?>

<?php
setcookie("cookie_name", "$mot_de_passe", time());
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

<head>
<title>Ma page web</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
<link rel="stylesheet" type="text/css" href="style.css" />

</head>

<body>

<p>Contenu de la page</p>

</body>

</html>

<?php
}

else
{
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

<head>
<title>Ma page web</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
<link rel="stylesheet" type="text/css" href="style.css" />

</head>

<body>

<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

<p>Pour des raisons de sécurité, l'accès de ce site est soumis à identification.</p>
<p>Veuillez entrer le mot de passe :</p>

<form action="index.php" method="post">
<p>
<input type="text" name="mot_de_passe" /> <input type="submit" value="Entrer" />
</p>
</form>

</body>

</html>

<?php
}
?>
[/cpp]
 

Johan_et_Pirlouit

Grand Maître
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 :
[cpp]
<?php // ici aucun caractère avant l'ouverture de ta balise php, pas d'espace, pas de retour chariot (retour à la ligne, quoi)

if (isset($_POST['mot_de_passe'])) // Si la variable existe
{
// On se crée une variable $mot_de_passe avec le mot de passe entré
$mot_de_passe = $_POST['mot_de_passe'];
}
else // La variable n'existe pas encore
{
$mot_de_passe = ""; // On crée une variable $mot_de_passe vide
}

if($mot_de_passe == "pinguin")
{

// ici pas de fermeture de balise php !

setcookie("cookie_name", "$mot_de_passe", time());


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

echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">'."\n\n";

?> // et tu refermes ta balise php ici..

// ici la suite.....
[/cpp]
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..

:merci:
 

dartyduck

Grand Meuble Suprême
mon pb de cookie ne veut pas se résoudre. Une fois indentifié, des que je clique sur le lien "acceuil" il me redemande de m'identifier... ca me saoule, et ca va encore plus saouler mes visiteurs!
 

marsien

Grand Maître
Fait une vérif sur ta page accueil :

Code:
if(isset($_COOKIE['...'])) // si le coockie existe
{
  if($_COOKIE['...'] == '...') // et si sa valeur correspond à l'identifiant d'accès au site
  {
    // on affiche la page sans s'identifier
  }
  else
  {
    // on demande l'identification
  }
}
else
{
  // on demande l'identification
}

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

dartyduck

Grand Meuble Suprême
je comprends pas tres bien comment faire cette vérif, car elle se telescope avec mon if d'identification...
 

dartyduck

Grand Meuble Suprême
voici ce que j'ai fait:
[cpp]
<?php

if (isset($_POST['mot_de_passe'])) // Si la variable existe
{
// On se crée une variable $mot_de_passe avec le mot de passe entré
$mot_de_passe = $_POST['mot_de_passe'];
}
else // La variable n'existe pas encore
{
$mot_de_passe = ""; // On crée une variable $mot_de_passe vide
}

if($mot_de_passe == "demigne" or $mot_de_passe == "lemoine")
{
setcookie("cookiename", "$mot_de_passe", time());

<echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">'."\n\n";
?>
[/cpp]
et le message que ca me donne qd je valide le mot de passe (ou meme quand il est faut d'ailleurs):
[cpp]
Parse error: syntax error, unexpected '<' in /mnt/112/sdc/5/2/monsite/index.php on line 18
[/cpp]
 

marsien

Grand Maître
:/
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 :
Code:
# if($mot_de_passe == "demigne" or $mot_de_passe == "lemoine" )
# {
# setcookie("cookiename", "$mot_de_passe", time());
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

<?php
}
?>
 

dartyduck

Grand Meuble Suprême
Pourquoi tu mets des # ?? ca me verdit tout (genre commentaire) sous notepad++
 

marsien

Grand Maître
C'est un bug du copié/collé des zones de code sur PPC ; désolé, il faut les enlever :)
 

dartyduck

Grand Meuble Suprême
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...
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 079
Messages
6 716 702
Membres
1 586 247
Dernier membre
MrAzgarIII
Partager cette page
Haut