[php] id ne passe pas ? ? ?

Résolu/Fermé
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 4 avril 2007 à 23:15
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 - 8 avril 2007 à 19:01
Bonsoir a tous,
Je suis en train de faire un intranet dont tout le monde aura accès au catalogue et les fiches détaillées. Jusque là: OK !
Par contre, Pour modifier, supprimer une fiche à partir de liste, seul 3/4 personnes habilitées sont autorisées.
J'ai donc mis un code au tout début de la page. Si le login et le pass sont correct, on affiche la page cachée (fiche sous forme de tableau réacapitulatif).
Et là ! misère ! la fiche que j'obtiens à l'écran est la première de la table (rien à voir donc avec le lien cliqué).
Si je supprime ce code de login, ça redeviens normal.
J'ai bien la preuve que l'id n'est déjà pas récupéré ici, au début de cette page login.
Note: ce sont 2 pages en 1, le tableau récapitulatif étant caché au départ.
Le 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 == "******" AND $login == "******") 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.
?>

PS: ici je n'ai pas mis le _GET['id']; mais l'effet est le même, je n'ai pas la bonne page et c'est très embêtant ! :-(((
Il faudra aussi que je remette ce _GET['id']; au début de la page cachée.
Comment et OU dois-je mettre ces codes (car finalement c'est peut-ça mon Pb, l'endroit de l'insertion de ce code ? Non ?
Merci d'avance pour votre participation.
voir: http://txiki.free.fr afficher la liste

9 réponses

Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
5 avril 2007 à 05:51
Hé salut, je ne connais pas beaucoup php mais ça ressemble à tous les autres langages.

Le id suit le nom de la page. Alors _GET['id'] ne fait que prendre le nom après le "?" ?
Une fois que php a le id, qu'est-ce qu'il fait avec?

Serge.

PS. En passant, il demande encore trois caractères dans la page ajout nouvelle fiche.
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
6 avril 2007 à 10:18
Salut Serge !
Bon je reviens (quelques soucis avec la nouvelle version de l'intranet réalisé avec Isotools, une daube comme j'ai jamais vu mais bon !)
Tu a raison pour les langages.
Petite rectification de mon Pb:
Avant de taper le login et le pass, j'ai bien l'id dans la barre url (du fureteur hi hi hi j'aime bien ce terme !)
C'est au moment de valider que l'id devient rien du tout. Il disparait de l'url.
Ma page est composée de 2 pages en fait:
1 le login et pass (formulaire)
Si c'est OK on affiche la page cachée
2 page avec tableau html généré et renseigné par php selon la requete
select * ma_table
.....
Je crois que je l'ai déjà dit mais si je supprime la page login (première partie de la page) c'est bien le bon tableau (résumé avant modif proprement dite) qui s'affiche.
Ensuite, je dois afficher un formulaire avec des champs pré-renseignés selon le contenu de la table mais en GARDANT les options de listes (et ça c'est pas gagné !) avec des echo
0
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
6 avril 2007 à 17:37
Salut Txiki,
Je crois que ton pb est que tu n'entres pas le id dans une variable. Quand tu fais valider, la page est rechargée sans le id, bien sûr.
Il faut entrer le id dans une variable et dire à la page quoi faire avec.

Serge.
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
6 avril 2007 à 23:31
Salut Serge !
Mais oui, je fais un _GET['id'] dans la partie qui précède le code html du tableau récapitulatif (modification.php) et je le remet dans après le head de cette page (toujours modification.php).
Je précise qu'il y a 2 page en une (modification est cachée dans un premier temps, tant que le login et le pass n'ont pas été entrés).
Mais on ne recharge pas la page, elle est simplement cachée ! (cest ça que je pige pas et je suis sur que c'est un truc tout con !) Ha ! chui pas basque pour rien moi ! ;-)))
Tiens le code de la page en question:
<?
session_start();  // Démarrage de la session. 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 = "";
        $login = ""; // On crée des variables $mot_de_passe  et $login vides
}

if (($mot_de_passe == "tintin" AND $login == "txiki") OR ($mot_de_passe == "******" AND $login == "******")OR ($mot_de_passe == "******" AND $login == "******") OR ($mot_de_passe == "******" AND $login == "******"))
// Si le mot de passe et le login sont bons (valable pour 4 utilisateurs). Plusieurs identifiants et mots de passe.

{
		$_SESSION['connect'] = 1;  // Change la valeur de la variable connect. 
		$_SESSION['login'] = $login;  // Permet de récupérer le login afin de personnaliser la navigation

// Si le couple login/pass est correct, on affiche la page cachée.
?>
<!--        
page cachée que l'on va afficher si le couple login/pass est OK --> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
  <head>
  <title>Fiche d&eacute;taill&eacute;e du logiciel</title>
  <link href="scripts_styles/form.css" rel="stylesheet">
  </head>
  <body>
<table width="60%"  border="0" align="center" cellpadding="0" cellspacing="0" id="titre">
	<tr>
    <td id="td-gauche">&nbsp;</td>
    <td id="td-milieu"><h1> Fiche logicielle a modifier</h1></td>
    <td id="td-droit">&nbsp;&nbsp;</td>
	</tr>
</table>
      <br />
<?
$id = $_GET['id']; // on récupère la variable $id de la fiche sélectionnée
// ==================================================
// 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('catalogue') 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["0"], $row["6"], $row["4"]...n°=ordre dans la table

// ===================================================
// Affichage de la fiche dans un tablea&u dynamique 
// ===================================================
  echo "<table width='75%' class='tabmodifs' bgcolor='#FFFFFF' border='2' cellspacing='0' cellpadding='2' align='center'>\n";
// première ligne on affiche le titre "Fiche logicielle" dans 2 colonnes fusionnées
        echo "<tr text-align='center'>";
        echo "<td colspan='2' bgcolor='#FF9900'><h2> Fiche logicielle </h2></td>";
        echo "</tr>\n";
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par lot de 3 lignes.    
  echo "<tr bgcolor='#FFFFFF' text-align='center'>";
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche'><strong class='echec'> N° d'enregistrement: </strong><strong>" .$row['0']."</strong></td>"; // le n° d'enregistrement 
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche-droite'><strong class='echec'> Date d'enregistrement: </strong><strong>" .$row['1']."</strong></td>"; // la date d'enregistrement 
  echo "<tr>";
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche'><strong>Groupe: </strong>" .$row['2']."</td>"; // affiche le groupe du logiciel 
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche-droite'><strong>Catégorie: </strong>" .$row['3']."</td>"; // affiche la catégorie du logiciel 
  echo "</tr>\n";
  echo "<tr>";
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche'><strong>Source: </strong>" .$row['4']."</td>"; // affiche la source du logiciel 
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche-droite'><strong>Editeur: </strong>" .$row['5']."</td>"; // affiche l'éditeur du logiciel 
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche'><strong>Nom: </strong><strong class='echec'>" .$row['6']."</strong></td>"; // affiche le nom du logiciel 
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche-droite'><strong>Ligne du produit: </strong>" .$row['7']."</td>"; // affiche le nom (interne) de la ligne produit
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche'><strong>Socle: </strong>" .$row['8']."</td>"; // affiche le socle nécessaire pour son installation
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche-droite'><strong>Référence DSI: </strong>" .$row['9']."</td>"; // affiche la référence DSI (cat, ref etc...) 
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche'><strong>Standard DSI: </strong>" .$row['10']."</td>"; // affiche le standard de la DSI
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche-droite'><strong>Type de licence: </strong>" .$row['11']."</td>"; // affiche le type de licence (flottante, etc...) 
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche'><strong>Version standard: </strong>" .$row['12']."</td>"; // affiche la version utilisée en standard à TM
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche-droite'><strong>Compatibilité XP: </strong>" .$row['13']."</td>"; // affiche la compatibilité avec XP ou pas 
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche'><strong>Versions en exploitation: </strong>" .$row['14']."</td>"; // affiche le nombre de versions en exploitation
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche-droite'><strong>Type de déploiement: </strong>" .$row['15']."</td>"; // affiche le type de déploiement 
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche'><strong>Type d'installation: </strong>" .$row['16']."</td>"; // affiche le type d'installation 
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche-droite'><strong>Domaine: </strong>" .$row['17']."</td>"; // affiche le domaine d'application
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche'><strong>Fonctionnalité: </strong>" .$row['18']."</td>"; // affiche une courte description de sa fonctionnalité 
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche-droite'><strong>Description: </strong>" .$row['19']."</td>"; // affiche une description plus détaillée 
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche'><strong>Instructions: </strong>" .$row['20']."</td>"; // affiche les instructions particulières s'il y en a
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche-droite'><strong>Pré-requis: </strong>" .$row['21']."</td>"; // affiche les pré-requis nécessaires a son installation
  echo "</tr>\n";
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche'><strong>Référent métier: </strong>" .$row['22']."</td>"; // affiche le référent métier de l'application 
  echo "<td width='50%' bgcolor='#F0F0F0' class='td-fiche-droite'><strong>Commentaires: </strong>" .$row['23']."</td>"; // affiche des commentaires s'il y en a 
  echo "</tr>\n";
  echo "</table>\n";
    // fin du tableau.
mysql_close();
?>
    </form>
      <table width="80%"  border="0" align="center" cellpadding="4" cellspacing="0">
        <tr>
          <td width="100%" colspan="3" align="center"><img src="boutons-catalogue/valider-modification.png" width="150" height="21" onClick="document.location.href='insert_modifs.php'"></td>
        </tr>
  </table>
      <table width="80%"  border="0" align="center" cellpadding="4" cellspacing="0">
        <tr>
          <td colspan="3" align="center"><a href="index.php"><img src="boutons-catalogue/accueil.png" alt="Retour &agrave; la page d'accueil" width="62" height="21" border="0" /></a>&nbsp; <a href="liste.php"><img src="boutons-catalogue/afficher-catalogue.png" alt="Afficher la liste des logiciels du catalogue" width="139" height="21" border="0" /></a>&nbsp; <a href="fiche_ajout.php"><img src="boutons-catalogue/ajouter.png" alt="Ajouter un logiciel au catalogue" width="116" height="21" border="0" /></a>&nbsp;<a href="rechercher.php"><img src="boutons-catalogue/chercher-fiche.png" alt="Chercher un logiciel dans le catalogue" width="128" height="21" border="0" /></a>&nbsp;<a href="javascript:history.go(-1)"><img src="boutons-catalogue/retour.png" alt="Retour &agrave; la page pr&eacute;c&eacute;dente" width="58" height="21" border="0" /></a></td>
        </tr>
        <tr>
          <td align="center" width="35%">&nbsp;</td>
          <td align="center" bgcolor="#E5E5E5" width="30%">
<?
echo "Mis &agrave; jour le: ";
echo date("d - m - Y");
?>
          </td>
          <td align="center" width="35%">&nbsp;</td>
        </tr>
      </table>
  </body>
</html>
<?
}
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>
<h1 align="center"> Cette page est réservée <br />
					aux administrateurs uniquement ! </h1>
<h3 align="center" class="echec"> Veuillez entrer le login et mot de passe : </h3>
	<p>&nbsp;</p>
	<table align="center" width="500px"><tr><td>
	<form action="modification.php" name="authentification" method="post">
	<p align="center"><input type="text" name="login" /></p>
<script type="text/javascript" language="JavaScript">document.authentification.login.focus();</script>
	<p align="center"><input type="password" name="mot_de_passe" /></p>
	<p align="center"><input type="submit" name="valider" value="Valider"></p>
	</form>
	</td></tr></table>
    </body>
</html>
<?
} // Fin du else
?>
Pourtant faut pas etre un expert en php pour faire ça ? ça commence a me prendre la tête grave ! mais graaaaave ! grrrrrrrh!!!!

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
7 avril 2007 à 07:17
Haha! Alors tu vas me devoir la vie deux fois?
Bon, je crois avoir trouvé. Il me semble que la page est rechargée puisqu'il doit relire tout le code pour afficher la page après la demande de mot de passe. Et puis le getId est dans la partie où le mot de passe était correct. Tu dois alors soit prendre le id dès le début soit le demander dans la dernière partie aussi. Ensuite tu dois le réafficher après le "modification.php?" pour pouvoir le reprendre le deuxième coup.
Tu pourrais aussi éviter de redemander le mot de passe s'ils sont déjà enregistrés.

Serge.
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
7 avril 2007 à 12:11
Salut Serge !
Et puis le getId est dans la partie où le mot de passe était correct
Je l'ai mis a plusieurs endroits, le résultat est toulours pareil ? ? ?
Je remarque que en relisant le code ci-dessus que le get id n'est pas présent dans la partie login.

Tu pourrais aussi éviter de redemander le mot de passe s'ils sont déjà enregistrés.
Excelente remarque mais je ne sais pas comment faire pour ? On m'a déjà fait cette remarque mais je ne m'y était pas penché car les tests que je faisais portaient toujours sur une page (je ne m'était pas encore mis en configuration d'utilisation)
Je teste et te tiens au courant.
0
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
7 avril 2007 à 18:15
Bon, il y a deux parties à ta page, et une condition. La condition vérifie le mot de passe immédiatement et là deux choses pourraient se passer (mais une seule en fait est possible la première fois qu'elle ouvre):
1- si le mot de passe n'est pas reconnu, elle présente la page de demande de mot de passe et re-appelle la page en validant. Cette partie ne prend pas note du id.
2- si le mot de passe est bon, elle présente la page à modifier. Cette partie prend note du id, si présent. Mais avec ton code, le id n'est pas noté le coup d'avant.

Il faut donc que la partie 1- (qui est en fait la deuxième partie de ton code) prenne note du id et le réaffiche comme précédemment.

Pour garder ouverte une session, une fois le mot de passe validé, je crois que la méthode habituelle se sert de "cookies" qui expirent lorsque le visiteur ferme le fureteur, ou l'onglet furetant le site.

Serge.
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
8 avril 2007 à 16:32
Salut Serge !
Bouuuu ! je suis a la maison et me rend compte que les options de controle ne fonctionnent plus pour Firefox. Je n'ai fait que copier sur clé usb ce que j'avais au bureau pourtant !
var va = document.forms['formulaire'].reference_DSI.value; 
	if(va == "") // liste déroulante
	{
		alert ('Veuillez entrer la référence DSI');
		document.forms['formulaire'].reference_DSI.focus();
		return false;
	}
	if((va!="catalogu&eacute;")||(va!="r&eacute;f&eacute;renc&eacute;")||(va!="&eacute;valuation")||(va!="rebut&eacute;"))
	{ 
		alert ('La référence doit faire partie des choix suggérés'); 
		document.forms['formulaire'].reference_DSI.focus();
		return false; 
	}
Il me semble que ça fonctionnait sous IE6 pour tant !
ça m'affiche en permanence le alert ci-dessus (? ? ?)
J'ai ajouté des value aux options pour avoir le texte complet (étant de longueur différentes, j'ai opté pour cette solution finalement).
Que s'est-il passé ?
Je dois quand même vérifier au bureau mardi mais il me semble que ça fonctionnait....
Je ne suis pas sorti de l'auberge ! ! !
Quant au passage de l'id, j'ai pas très bien pigé tes explications.
Je ne vais quand même pas me le faire corriger par toi !
C'est cette saloperie de page de login qui m'embrouille les neuronnes ! je ne sais plus quoi faire (et ils attendent après moi, les chefs. Je commence a disjoncter.
Le week end de Paque s'annonce très, très difficle ! Enfermé chez moi à m'enerver grave !
0
Serge_La Messages postés 407 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 3 mars 2009 47
8 avril 2007 à 19:01
C'est le matin ici. Je viens d'entrer en ligne.

S'il affiche la 2ième alert seulement, c'est probablement une faute de frappe ou une faute dû au code des accents. Faut vérifier que les value testées sont identiques au value que tu as mis dans le html. C'est différent si l'un a
&eacute;
et l'autre a é. De plus, c'est possible que certains fureteurs transforment
&eacute;
en é dans le transport de la variable. Faut voir où ça bogue. C'est possible de contourner le problème, quel qu'il soit.

Pour le id, relis mes explications. Le plus simple serait d'ajouter le getId dans la section qui ne l'a pas. Et d'ajouter le code pour réafficher le id (au moment de valider).

Tu peux m'engager aussi, si tu veux. C'est pas cher (dix dols l'heure, ou cinq euros). Du travail dans le code comme ça fait travailler les cellules. Faut rester calme et faire une pause quand tout s'embrouille. C'est certain que ça va marcher d'une manière ou de l'autre. Aies confiance.
0