8791 sujets

Développement web côté serveur, CMS

Bonjour a tous,

J'ai mis en place un formulaire (avec l'aide du site du zero) auquel peuvent accéder que certaines personnes.

j'ai donc mis en place un protection par mot de passe qui fonctionne mais... sur la page, j'ai normalement un formulaire et après validation sur la même page un résumé des données entrées dans le formulaire mais depuis la mise en place du mot de passe, je n'ai plus que le résumé.

Je n'ai plus d'accès au formulaire en lui même.

Je fais donc de nouveau appel à vos lumières pour me dire quelle erreur j'ai bien pu faire.

Je vous remercie par avance pour votre aide.

<?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 == "bidule") // Si le mot de passe est bon
{
// On affiche la page cachée.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<html xmlns="http://www.w3.org/1999/xhtml">







<head>



  <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" />



  <title>Coupures d'eau</title>
<body style="color: rgb(0, 0, 0); background-color: rgb(232, 232, 232);" alink="#ee0000" link="#0000ee" vlink="#551a8b"><div style="text-align: center;"><img style="width: 936px; height: 103px;" alt="Bannière Grandvelle et le Perrenot" src="Images/banniere2.PNG"><br></div>
<br>
<center><a href="index.php">Accueil</a> | <a href="Grandvelle_en_detail.php">Histoire</a> | <a href="Renseignements.php">A votre service</a> | <a href="Resume_conseils.php">Vie Municipale</a> | <a href="Infos%20Pratiques.php">Infos Pratiques</a> | <a href="Le%20conseil%20Municipal.php">Le Conseil Municipal</a><br/><br/></center>


</head>



<body>



<?php if (empty($_POST))



	{



	?>



<br />



<br />



<br />



<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" name="Les_coupures">



<div align="center">



<table width="314" border="0">



  <tr>



    <td width="162">Lieu :</td>



    <td width="11"> </td>



    <td width="127"><input



 name="Lieu" /></td>



  </tr>



  <tr>



    <td>Date :</td>



    <td> </td>



    <td><input



 name="Date" /></td>



  </tr>



  <tr>



    <td>Horaire de début de coupure :</td>



    <td> </td>



    <td><input



 name="HoraireD" /></td>



  </tr>



  <tr>



    <td>Horaire prévisible de fin de coupure :</td>



    <td> </td>



    <td><input



 name="HoraireF" /></td>



  </tr>
</table>



</div>



<br />


<div align="center">



<input name="Validation" type="submit" /> 



<input name="Reset" type="reset" />



</div>



</form>











<?php } 







if (!empty($_POST))



{



//Recup des variables.



$Date = $_POST['Date'];



$Lieu = $_POST['Lieu'];



$HoraireD = $_POST['HoraireD'];



$HoraireF = $_POST['HoraireF'];


// info pour la connexion



$host_db = "localhost";//host



$login_db = "login";//login



$pass_db = "lmdp";//mot de passe



$db_db = "base";//nom de la base


	//script de connexion 



	$mysql_host="" . $host_db . ""; 



	$mysql_login="" . $login_db . ""; 



	$mysql_pass="" . $pass_db . ""; 



	$mysql_dbnom="" . $db_db . ""; 



	$db=mysql_connect($mysql_host,$mysql_login,$mysql_pass); //connexion a la base



	mysql_select_db($mysql_dbnom,$db);// selection de base

// insertion sql



$sql = mysql_query("INSERT INTO coupures ( `ID` , `Date` , `Lieu` , `HoraireD` , `HoraireF` ) VALUES ( '', '" . $Date . "' , '" . $Lieu . "' , '" . $HoraireD . "' , '" . $HoraireF . "' )");

?>



<!-- tableau recap -->







<table width="981" border="1" cellspacing="0" cellpadding="0">



  <tr>



    <td width="62"><div align="center">Date</div></td>



    <td width="62"><div align="center">Lieu</div></td>



    <td width="71"><div align="center">Horaire de Début</div></td>



    <td width="73"><div align="center">Horaire de Fin</div></td>

  </tr>



  <tr>






    <td><center><strong><?php echo $Date;?></strong></center></td>



    <td><center><strong><?php echo $Lieu;?></strong></center></td>



    <td><center><strong><?php echo $HoraireD;?></strong></center></td>



    <td><center><strong><?php echo $HoraireF;?></strong></center></td>

  </tr>



</table>



<?php }?>



</body>


</html>
<?php
}
else // le mot de passe n'est pas bon
{
// On affiche la zone de texte pour rentrer le mot de passe.
?>
<!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>Page protégée par mot de passe</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
<p>Veuillez entrer le mot de passe :</p>
<form action="essai.php" method="post">
<p>
<input type="text" name="mot_de_passe" /> <input type="submit" value="Valider" />
</p>
</form>
<p>Cette page est réservée aux conseillers municipaux de la ville de Grandvelle et le Perrenot.</p>
    </body>
</html>
<?php
} // Fin du else
// Fin du code
?>

Modifié par lonewolf (11 Jul 2008 - 19:02)
ton premier test interdit l'acces au deuxime formulaire donc forcement
car
<?php if (empty($_POST)) ne se réaliseras jamais on tombe toujours sur le cas ou les données on déjà été renseignée puisque le mot de passe est passé par post.

de plus tu ne devrais pas faire d'insertion avant de verifier la validité des infos.

tu ferais mieux de t'appuyer sur un champ caché ou une variable session.

sinon

une solution simple tu mets le login et le mot de passe sur une autre page

ou tu peux permettre au gens non identifié de remplir le formulaire mais les refuser si le couple login/mot de passe est pas bon. en placant les 2 formulaires dans un seul.
Modifié par CPascal (10 Jul 2008 - 21:30)
Salu,

Alors deja quand tu va envoié ton formulaire tu va directement buté sur ton loggin il va retesté ton login a chaque fois donc ca marchera pas en mettant ton login dans une variable de session "$_SESSION['la-variable']" on enregistre le mdp dns une variable qui se transmisse sur tt les pages et les reactualisation grace à "session_start" au debut de ton code si tu ne comprend pas reporte toi au chapitre des session sur le SDZ [site du zéro].

Après quand tu afficher ton formulaire tu teste une variable POST qui n'est pa defini d'ailleur donc tu teste aucune variable... Et de plus comment tu vx testé un variable POST si tu na pa envoié de post avant donc la je comprend pa trop pourquoi tu a fais comme ca.

Donc j'ai remplacé le debut de ton code pour les sessions en espérant que ton hébergement prend les sessions PHP.
eu pour info si tu inclut cette page dans une autre page PHP enleve "session_start" dans cette page te remete le en hauit de page mais vraiment en haut sa doit etre le 1° ligne de ta page de la page qui inclut celle la.

Après je tes modifiés les condition avec tes $_POST.

Aussi fait attention /!\ à bien regrouper ton code et pas l'éparpiller partout [même si je ne regoupe pas forcément comme il faut c'est plus dence]. Il ne faut que ca fasse un block illisibel aussi mais pas non plus ecrire une ligne et en sauté 10 avant de réécrire une autre ligne Smiley langue

Voila je te donne ton code qui je pense marchera avec les modif que j'ai faite.

A ui aussi si ta une belle erreur de session créé un repertoire sessions avec ou sans s je c'est pu à la racine de ton FTP.

<?php
session_start()

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é
    $_SESSION['mdp'] = $_POST['mot_de_passe'];
}
else // La variable n'existe pas encore
{
     $_SESSION['mdp'] = ""; // On crée une variable $mot_de_passe vide
}
 
if ( $_SESSION['mdp'] == "bidule") // Si le mot de passe est bon
{
// On affiche la page cachée.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" />
</head>
<title>Coupures d'eau</title>
<body style="color: rgb(0, 0, 0); background-color: rgb(232, 232, 232);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<div style="text-align: center;">
<img style="width: 936px; height: 103px;" alt="Bannière Grandvelle et le Perrenot" src="Images/banniere2.PNG">
<br>
</div>
<br>
<center>
<a href="index.php">Accueil</a> | <a href="Grandvelle_en_detail.php">Histoire</a> | <a href="Renseignements.php">A votre service</a> | <a href="Resume_conseils.php">Vie Municipale</a> | <a href="Infos%20Pratiques.php">Infos Pratiques</a> | <a href="Le%20conseil%20Municipal.php">Le Conseil Municipal</a>
<br/><br/>
</center>


<?php if (empty($_GET['sql']))
{?>

<br /><br /><br />
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>&sql=1" name="Les_coupures">
<div align="center">
<table width="314" border="0">
<tr>
<td width="162">Lieu :</td>
<td width="11"> </td>
<td width="127"><input name="Lieu" /></td>
</tr>
<tr>
<td>Date :</td>
<td> </td>
<td><input name="Date" /></td>
</tr>
<tr>
<td>Horaire de début de coupure :</td>
<td> </td>
 <td><input name="HoraireD" /></td>
</tr>
<tr>
<td>Horaire prévisible de fin de coupure :</td>
<td> </td>
<td><input name="HoraireF" /></td>
</tr>
</table>
</div>
<br />
<div align="center">
<input name="Validation" type="submit" /> 
<input name="Reset" type="reset" />
</div>
</form>


<?php } 
if (!empty($_GET['sql']))
{
//Recup des variables.
$Date = $_POST['Date'];
$Lieu = $_POST['Lieu'];
$HoraireD = $_POST['HoraireD'];
$HoraireF = $_POST['HoraireF'];


// info pour la connexion
$host_db = "localhost";//host
$login_db = "login";//login
$pass_db = "lmdp";//mot de passe
$db_db = "base";//nom de la base


	//script de connexion 
	$mysql_host="" . $host_db . ""; 
	$mysql_login="" . $login_db . ""; 
	$mysql_pass="" . $pass_db . ""; 
	$mysql_dbnom="" . $db_db . ""; 
	$db=mysql_connect($mysql_host,$mysql_login,$mysql_pass); //connexion a la base
	mysql_select_db($mysql_dbnom,$db);// selection de base

// insertion sql
$sql = mysql_query("INSERT INTO coupures ( `ID` , `Date` , `Lieu` , `HoraireD` , `HoraireF` ) VALUES ( '', '" . $Date . "' , '" . $Lieu . "' , '" . $HoraireD . "' , '" . $HoraireF . "' )");

?>



<!-- tableau recap -->
<table width="981" border="1" cellspacing="0" cellpadding="0">
  <tr>
  <td width="62"><div align="center">Date</div></td>
 <td width="62"><div align="center">Lieu</div></td>
 <td width="71"><div align="center">Horaire de Début</div></td>
<td width="73"><div align="center">Horaire de Fin</div></td>
</tr>
<tr>
 <td><center><strong><?php echo $Date;?></strong></center></td>
 <td><center><strong><?php echo $Lieu;?></strong></center></td>
 <td><center><strong><?php echo $HoraireD;?></strong></center></td>
 <td><center><strong><?php echo $HoraireF;?></strong></center></td>
 </tr>
</table>
<?php }?>
</body>
</html>
<?php
}
else // le mot de passe n'est pas bon
{
// On affiche la zone de texte pour rentrer le mot de passe.
?>
<!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>Page protégée par mot de passe</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
<p>Veuillez entrer le mot de passe :</p>
<form action="essai.php" method="post">
<p>
<input type="text" name="mot_de_passe" /> <input type="submit" value="Valider" />
</p>
</form>
<p>Cette page est réservée aux conseillers municipaux de la ville de Grandvelle et le Perrenot.</p>
    </body>
</html>
<?php
} // Fin du else
// Fin du code
?>


Sur ce je vais mangé j'ai fain je reste à ta disposition!

Bonne soirée

ValOo
Modifié par valoo49 (10 Jul 2008 - 21:33)
Bonjour Valoo et merci pour ton aide,

j'ai essayé le code mais ca ne me retourne qu'une page blanche sans message d'erreur.

je n'ai plus accès à la demande de mot de passe.

La solution en deux fichiers est effectivement interessante.

a écrit :
Valoo49 a écrit :
Après quand tu afficher ton formulaire tu teste une variable POST qui n'est pa defini d'ailleur donc tu teste aucune variable... Et de plus comment tu vx testé un variable POST si tu na pa envoié de post avant donc la je comprend pa trop pourquoi tu a fais comme ca.


Si c'est le POST que je pense, c'est justement pour qu'il me propose le formulaire mot de passe d'entrée. Puisqu'il n'y a pas eu de variable POST il me le demande automatiquement.

Merci encore pour ton aide

Amicalement
Lonewolf
Voila le code quie je vient de remodifier et testé !

<?php
session_start();

if ($_GET['ac'] == 'dex') //On regarde si c'est le lien de déconnexion
{
$_SESSION = array(); //On vide les tableaux
session_destroy(); //On détruit la session
}

$mdp = 'bidule'; //Mot de passe à tester

if ($_SESSION['mdp'] != $mdp ) //On teste si la variable session correspont au mot de passe
	{
		if (empty($_POST['mdp'])) $_SESSION['mdp'] = $_SESSION['mdp'];
		else $_SESSION['mdp'] = $_POST['mdp'];
	}
else $_SESSION['mdp'] = $_SESSION['mdp'];



if ($_SESSION['mdp'] == $mdp) // On affiche la page protégé si le mdp est bon

{ ?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
</head>
<title>Coupures d'eau</title>
<body style="color: rgb(0, 0, 0); background-color: rgb(232, 232, 232);" alink="#ee0000" link="#0000ee" vlink="#551a8b">
<div style="text-align: center;">
<img style="width: 936px; height: 103px;" alt="Bannière Grandvelle et le Perrenot" src="Images/banniere2.PNG">
<br>
</div>
<br>
<center>
<a href="index.php">Accueil</a> | <a href="Grandvelle_en_detail.php">Histoire</a> | <a href="Renseignements.php">A votre service</a> | <a href="Resume_conseils.php">Vie Municipale</a> | <a href="Infos%20Pratiques.php">Infos Pratiques</a> | <a href="Le%20conseil%20Municipal.php">Le Conseil Municipal</a>| <a href="?ac=dex">Déconnexion</a>
<br><br>
</center>


<?php if (empty($_GET['sql']))
{?>

<br /><br /><br />
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?sql=1" name="Les_coupures">
<div align="center">
<table width="314" border="0">
<tr>
<td width="162">Lieu :</td>
<td width="11"> </td>
<td width="127"><input name="Lieu" /></td>
</tr>
<tr>
<td>Date :</td>
<td> </td>
<td><input name="Date" /></td>
</tr>
<tr>
<td>Horaire de début de coupure :</td>
<td> </td>
 <td><input name="HoraireD" /></td>
</tr>
<tr>
<td>Horaire prévisible de fin de coupure :</td>
<td> </td>
<td><input name="HoraireF" /></td>
</tr>
</table>
</div>
<br />
<div align="center">
<input name="Validation" type="submit" /> 
<input name="Reset" type="reset" />
</div>
</form>


<?php } 
if (!empty($_GET['sql']))
{
//Recup des variables.
$Date = $_POST['Date'];
$Lieu = $_POST['Lieu'];
$HoraireD = $_POST['HoraireD'];
$HoraireF = $_POST['HoraireF'];


// info pour la connexion
$host_db = "localhost";//host
$login_db = "login";//login
$pass_db = "lmdp";//mot de passe
$db_db = "base";//nom de la base


	//script de connexion 
	$mysql_host="" . $host_db . ""; 
	$mysql_login="" . $login_db . ""; 
	$mysql_pass="" . $pass_db . ""; 
	$mysql_dbnom="" . $db_db . ""; 
	$db=mysql_connect($mysql_host,$mysql_login,$mysql_pass); //connexion a la base
	mysql_select_db($mysql_dbnom,$db);// selection de base

// insertion sql
$sql = mysql_query("INSERT INTO coupures ( `ID` , `Date` , `Lieu` , `HoraireD` , `HoraireF` ) VALUES ( '', '" . $Date . "' , '" . $Lieu . "' , '" . $HoraireD . "' , '" . $HoraireF . "' )");

?>



<!-- tableau recap -->
<table width="981" border="1" cellspacing="0" cellpadding="0">
  <tr>
  <td width="62"><div align="center">Date</div></td>
 <td width="62"><div align="center">Lieu</div></td>
 <td width="71"><div align="center">Horaire de Début</div></td>
<td width="73"><div align="center">Horaire de Fin</div></td>
</tr>
<tr>
 <td><center><strong><?php echo $Date;?></strong></center></td>
 <td><center><strong><?php echo $Lieu;?></strong></center></td>
 <td><center><strong><?php echo $HoraireD;?></strong></center></td>
 <td><center><strong><?php echo $HoraireF;?></strong></center></td>
 </tr>
</table>
<?php }?>
</body>
</html>



<?php 
} 
else // le mot de passe n'est pas bon
{
// On affiche la zone de texte pour rentrer le mot de passe.
?>
<!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>Page protégée par mot de passe</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
<p>Veuillez entrer le mot de passe :</p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<p>
<input type="text" name="mdp"> <input type="submit" value="Valider">
</p>
</form>
<p>Cette page est réservée aux conseillers municipaux de la ville de Grandvelle et le Perrenot.</p>
    </body>
</html>
<?php
} // Fin du else
// Fin du code


?>


Jte laisse le lien ou le les testé http://valoo-blog.com/test%20script/Untitled-3.php
Modifié par valoo49 (11 Jul 2008 - 12:29)
Salut,

euh... c'est normal que la première fois le mot de passe ne soit pas testé et qu'après la déconnexion si on veut se re-logguer on ait ce Warning :
a écrit :
Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
Smiley cligne
Merci beaucoup,

Je viens de le tester sur ton lien valoo et effectivement ca marche a merveille.

Je te remercie encore une fois pour l'aide apportée.

Amicalement
Lonewolf
Heyoan a écrit :
Salut,

euh... c'est normal que la première fois le mot de passe ne soit pas testé et qu'après la déconnexion si on veut se re-logguer on ait ce Warning :Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
Smiley cligne

Heu non Smiley murf Faut regarder pourquoi!
Aiie !! petit soucis.

Quelque soit le mot de passe mis, la page s'ouvre.

Je relance donc le post.

Amicalement
Lonewofl
Eu peut etre que la variable SESSION n'est pas détruite donc il passe a chaque fois mais j'ai verifier mon code, moi un seul mot de passe a la possiblité d'ouvrir la page protégé. Regarde si ca modif le code et sans faire exprè switché la partie d'authentification ....

Pour reponde à Heyoan c'est ma conf PHP qui avait beug parceque j'héberge PHP 4, PHP5 et PHP6 sur un mm serveur et il se mélange les pinceaux défoi =) Mais mintenant ca devrai etre bon =)
Re,

Valoo, je t'assure que même sur ton site,le lien que tu as mis est passable avec n'importe quel mot

Je viens de passer le mot de passe avec 'turc', 'machin', etc sans difficulté

Amicalement
Lonewolf

[Edit] Bon j'ai trouvé le problème (qui n'en est pas vraiment un). Si je sors de la page sans m'être déconnecté et même si j'ai vidé mon cache internet, je peux entrer sans difficulté en mettant n'importe quel mot de passe.

Si je me déconnecte proprement, plus de souci.

Merci encore une fois à toi Valoo Smiley prie , et excuse moi d'avoir douté pendant au moins une fraction de seconde. Smiley langue

Résolu
Modifié par lonewolf (11 Jul 2008 - 19:02)