Salut aux spécialistes !
Voici mon Pb:
J'ai une page pour modifier une fiche et qui ne doit etre accessible qu'a 2/3 personnes uniquement.
J'ai écrit un code php au tout début de cette page avec les login et password. Si c'est OK, on accède à un tableau détaillé pour vérifs avant modifs proprement dite.
Mais là est mon Pb.
En cliquant sur un lien modifier quelconque de la liste principale, il m'affiche une fiche (la première de cette liste qui porte le n°2 (la 1 n'existe pas).
J'ai tout essayé y compris de mettre $id = $_GET["id"]; dans la page de login puis dans celle qui affiche le tableau détaillé (les deux sont sur une et même page en fait !).
Voici ci-dessous un extrait du code:
<?
session_start(); // A placer obligatoirement avant tout code html
$_SESSION['connect']=0; //initialise la variable 'connect'
if (isset($_POST['mot_de_passe']) AND isset($_POST['login'])) // Si les variables existent
{
$mot_de_passe=$_POST['mot_de_passe'];
$login=$_POST['login']; //On récupère les données envoyées par la méthode POST du formulaire
d'identification
}
else // Les variables n'existent pas encore
{
$mot_de_passe=""; // On crée une variable $mot_de_passe vide
$login=""; // On crée une variable $login vide
}
if (($mot_de_passe == "txikito" AND $login == "txiki") OR ($mot_de_passe == "tintinotibet" AND $login == "tintin"))
// Si le mot de passe et le login sont bons (valable pour 1 utilisateur ou plus).
{
$_SESSION['connect']=1; // Change la valeur de la variable connect. C'est elle qui nous permettra de savoir
s'il y eu identification.
$_SESSION['login']=$login; // Permet de récupérer le login pour personnaliser la page d'authentification par exemple
// On affiche la page cachée.
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>Fiche détaillée du logiciel</title>
<link href="scripts_styles/form.css" rel="stylesheet">
******* la suite de la page *******
<?
// ======================================
// On recupere la variable "id" correspondant au logiciel choisi
// ======================================
$id = $_GET["id"]; // La manipulation de $id est plus simple que celle de $_POST["id"]
// ======================================
// On se connecte et on choisi la base de données
// ======================================
mysql_pconnect("localhost","root","") or die ("Impossible de se connecter à MySQL");
mysql_select_db("txiki") or die("Impossible de sélectionner la base de données");
//=======================================
// requête SQL qui affiche les infos de la fiche correspondante au lien cliqué
//=======================================
$select = "select * FROM logiciels WHERE id='$id'"; // On selectionne seulement la ligne qui correspond au logiciel
choisi
$result = mysql_query($select) or die ('Erreur : '.mysql_error() );
$row= mysql_fetch_row($result); // mysql_fetch_row genere un tableau correspondant a la ligne selectionnée de la
BDD
// Les informations sont accessibles par $row["id"], $row["nom"], $row["source"]...
// ================================
// Affichage de la fiche dans un tablea&u dynamique
// ================================
echo "<table class='tabliste' width='60%' bgcolor='#FFFFFF' border='1' cellspacing='0' cellpadding='3'
align='center'>\n";
// première ligne on affiche le titre "Fiche logicielle" dans 2 colonnes fusionnées
echo "<tr text-align='center' padding='3px' class='blanc'>";
echo "<td colspan='2' bgcolor='#7F9DB9'><h2> Fiche logicielle </h2></td>";
echo "</tr>\n";
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par lot de 2 lignes.
echo "<tr bgcolor='#FFA54A' text-align='center'>";
echo "<td width='50%' class='td-fiche'> N° d'enregistrement: <strong>" .$row['0']."</strong></td>"; // première
ligne pour le n° d'enregistrement (id)
echo "<td width='50%' class='td-fiche-droite'> Date d'enregistrement: <strong>" .$row['1']."</strong></td>"; //
première ligne pour le n° d'enregistrement (id)
******** Suite du tableau de la fiche détaillée ********
// fin du tableau.
mysql_close();
?>
</form>
<br />
<table width="60%" border="0" align="center" cellpadding="4" cellspacing="0">
<tr>
<td colspan="3" align="center"><img src="boutons-catalogue/valider-modification.png" width="150"
height="21" onClick="document.location.href='insert_modifs.php'"></td>
// j'utilise un bouton à cause d'IE et NT4 qui affichent un bouton gris tout vilain
</body>
</html>
// fin de la page fiche détaillée et page de login
// le tout dans la même page
<?
}
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" />
<link href="scripts_styles/form.css" rel="stylesheet">
</head>
<body>
<p> </p>
<h1 align="center"> Cette page est réservée aux administrateurs uniquement ! </h1>
<h3 align="center" class="echec"> Veuillez entrer le login et mot de passe : </h3>
<table width="300px"><tr>
<form action="modification.php" method="post">
<p align="center"><input type="text" name="login" /></p>
<p align="center"><input type="password" name="mot_de_passe" /></p>
<p align="center"><input type="submit" value="Valider" /></p>
</form>
</tr></table>
</body>
</html>
<?
} // Fin du else
// Fin du code :)
?>
Je pense que l'id est perdu dès la page du login (bien qu'ici je ne l'ai pas mis mais le résultat est le même).
Comment dois-je écrire ce $_GET et surtout à quel endroit ?
Si je le supprime ça fonctionne mais alors les modifs seront accessibles à tous ce qui n'est pas le but.
Merci pour vos conseils !
J'ai cherché et recherché mais en vain, HELAS !
Peut-etre aussi que je m'y prend comme manche (je ne sais même pas si c'est vraiment sécurisé, ce système de login.
J'ai trois pages a protéger ainsi (un formulaire pour un ajout, puis les modifs et suppression de fiches.
D'ailleurs, je bloque aussi sur les modifs (je ne veux pas toucher a l'id mais juste les champs (certains champs sans savoir à l'avance lesquels).
Voilà ! j'espère que je n'ai pas été trop long.....

