prob de variable de session - PHP - Programmation
Marsh Posté le 15-06-2004 à 16:16:52
si vous voulez + de précision je peux vous filer l'adresse avec login et mdp pour tester
Marsh Posté le 15-06-2004 à 16:19:02
il faut tester les variables de sessions à l'entrée dans gestsuivindf.php. Si ce n'est pas la direction, il faut détruire la session et rediriger vers la page de login
Marsh Posté le 15-06-2004 à 16:37:17
tu as bien mis un session_start() sur les deux pages?
(si j'ai bien compris il y a deux fichiers différents?)
Marsh Posté le 15-06-2004 à 16:57:49
lut T509,
a l'entree g bien le login de direction. mais lorsque on entre dans la page sauvendf le login change. ze capte plus grand chose. ya des session start sur toutes mes pages.
Marsh Posté le 15-06-2004 à 16:58:52
en fait ya 3 pages : une form_ndf qui correspond au formulaire de note de frais.
Marsh Posté le 15-06-2004 à 17:15:33
ca fait gestsuivindf --> form_ndf --> sauve_ndf --> recharge gestsuivindf
Marsh Posté le 16-06-2004 à 09:41:40
donne ton code, les messges d'erreur, ...
Marsh Posté le 16-06-2004 à 09:57:22
voici le code épuré de sauve_ndf :
<? session_start();
$log = $_SESSION['login'];
include("sql.inc.php" );
include("authenticate.php" );
print("<script language='javascript'>window.alert('login1 : $log');</script>" );
if ($mode=='add') {
if (file_exists($fichier)) {
print ("<script language='javascript'>alert('Le fichier $fichier existe déja'); window.history.back();</script>" );
exit;
}
else {
$fd = fopen ("$fichier","a+b" );
}
}
else if($mode=='modif' || $mode=='valid' || $mode=='corriger' || $mode=='refuser')
{
$fd = fopen ("$fichier","w" );
}
//ouverture du fichier
$j=1;
if (count($HTTP_POST_VARS) != 0 ) {
$form_args=$HTTP_POST_VARS;
} else {
$form_args=$HTTP_GET_VARS;
}
// on ignore les 3 premiers paramètres passés : nom du fichier phpid et action
$nb_args=5;
for ($i=0;$i<=$nb_args;$i++){next($form_args);}
for ($i=0;$i<count($form_args);$i++) {
$v = current($form_args);
$content = $v;
$content = "$content|";
if($j=='9') {
$content = "$content\n";
$j=0;
}
$j++;
$content = stripslashes($content);
if (!fwrite($fd, $content)) {
print "Impossible d'écrire dans le fichier ($fichier)";
exit;
}
next($form_args);
}
// Enregistrement dans la base de données
// mode ajout
if ($mode=='add') {
$sql="INSERT INTO intra_ndf VALUES ('','$fichier','$matricule','$etat','$annee','$mois')";
if (mysql_query($sql)) {
print("<script language='javascript'>window.alert('Enregistrement dans la base OK'); window.opener.location.reload();window.close();</script>" );
}
}
// mode modification
else if ($mode=='modif') {
$sql="UPDATE intra_ndf SET etat='$etat' where fichier='$fichier'";
if (mysql_query($sql)) {
print("<script language='javascript'>window.alert('Enregistrement dans la base OK'); window.opener.location.reload();window.close();</script>" );
}
}
// mode validation
else if ($mode=='valid') {
$sql="UPDATE intra_ndf SET etat='$etat' where fichier='$fichier'";
if (mysql_query($sql)) {
print("<script language='javascript'>window.alert('Enregistrement dans la base OK');</script>" );
//header("Location:../gestsuivindf.php" );
}
}
// mode corriger
else if ($mode=='corriger') {
$sql="UPDATE intra_ndf SET etat='$etat' where fichier='$fichier'";
if (mysql_query($sql)) {
print("<script language='javascript'>window.alert('Enregistrement dans la base OK'); window.opener.location.reload(); window.open('form_ndf.php?login=$log&mode=valid&fichier=$fichier&annee=$annee&mois=$mois');window.close();</script>" );
}
}
//mode refuser
else if ($mode=='refuser') {
$sql="UPDATE intra_ndf SET etat='$etat' where fichier='$fichier'";
if (mysql_query($sql)) {
print("<script language='javascript'>window.alert('Enregistrement dans la base OK'); window.opener.location.reload(); window.close();</script>" );
}
}
fclose($fd);
?>
Marsh Posté le 16-06-2004 à 10:02:48
et voila le code non epure de form_ndf :
<? session_start();
include("sql.inc.php" );
include("authenticate.php" );
$log = $_SESSION['login'];
print("login : ".$log);
if($mode<>'add') {
if($db <>0)
{
$request = "select matricule from intra_ndf where fichier='$fichier'";
$result = mysql_query($request);
if($result <> FALSE) {
while ($y=mysql_fetch_array($result)) {
$matricule=$y["matricule"];
$request2 = "select * from intra_users_intranet where matricule='$matricule'";
$result2 = mysql_query($request2);
$users_tbl= mysql_fetch_array($result2);
$nom=$users_tbl['nom'];
$prenom=$users_tbl['prenom'];
$login=$users_tbl['login'];
$matricule=$users_tbl['matricule'];
}
}
else print("pb" );
}
}
?>
<html>
<head>
<title>NOTE DE FRAIS</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<LINK REL=stylesheet TYPE="text/css" HREF="../ndf.css">
<?
if (empty($annee)){$annee = date("y" );}
if (empty($mois)) {$mois = date("m" );}
$mois_tbl=array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Aout','Septembre','Octobre','Novembre','Décembre');
$mois_tbl2=array('01','02','03','04','05','06','07','08','09','10','11','12');
$NbrJours = date("t", mktime(0,0,0,$mois,1,$annee));
$b=date("ym", mktime(0,0,0,$mois,1,$annee));
$firstdate=date("d/m/Y",mktime(0,0,0,$mois,1,$annee));
$lastdate=date("d/m/Y",mktime(0,0,0,$mois+1,0,$annee));
print("<SCRIPT LANGUAGE=\"JavaScript\">" );
for ($i = 1; $i <= $NbrJours ; $i++)
{
$id=$b.$i;
echo " function calc$i() { \n";
echo " document.form.".$login.$id."9.value = Number(document.form.".$login.$id."2.value) + Number(document.form.".$login.$id."3.value) + Number(document.form.".$login.$id."4.value) + Number(document.form.".$login.$id."5.value) + Number(document.form.".$login.$id."6.value) + Number(document.form.".$login.$id."7.value) + Number(document.form.".$login.$id."8.value) } \n\n";
}
echo "function calcT() { \n";
echo " document.form.WLT.value = ";
for ($i = 1; $i <= $NbrJours ; $i++)
{
$id=$b.$i;
echo "Number(document.form.".$login.$id."9.value) + ";;
}
echo " \" uros\" }\n\n";
?>
</script>
</head>
<body>
<div align="center">
<table width="650" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td valign="bottom"><table width="182" border="1" align="left" cellpadding="5" cellspacing="0" bordercolor="#333333">
<tr>
<td> <table width="100%" border="0" cellpadding="4" cellspacing="0">
<tr>
<td width="42%"><strong>NOM :</strong></td>
<td width="58%"><? print($nom); ?></td>
</tr>
<tr>
<td><strong>Prénom :</strong></td>
<td><? print($prenom); ?></td>
</tr>
<tr>
<td><strong>Matricule :</strong></td>
<td><? print($matricule); ?></td>
</tr>
</table>
</td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0">
<tr>
<td><strong>PERIODE </strong>:</td>
<td><? print("du $firstdate<br>au $lastdate" ); ?></td>
</tr>
</table></td>
</tr>
</table></td>
<td width="450" align="center"><table width="250" border="0" cellspacing="3">
<tr>
<td align="center"><img src="../images/logo-ndf.gif" width="210" height="80"></td>
</tr>
<tr>
<td><table width="100%" border="1" cellpadding="4" cellspacing="0" bordercolor="#333333">
<tr>
<td align="center"><strong>NOTE DE FRAIS </strong></td>
</tr>
</table></td>
</tr>
</table></td>
<td width="182"><table width="100%" border="1" cellpadding="3" cellspacing="0" bordercolor="#333333">
<tr>
<td width="44%"><strong>ANNEE : </strong></td>
<? //Debut du formulaire selection annee en mode add
if ($mode=='add'){
print("<form name=\"form1\"><td valign=\"middle\">" );
print("<select name=\"menu_annee\" onChange=\"location.href='?login=$log&mode=$mode'+document.form1.menu_annee.value+document.form2.menu_mois.value\">\n" );
print("<option value=\"&annee=04\" " );
if ($annee=='04') {print("selected" );}
print(">2004</option>\n" );
print("<option value=\"&annee=05\" " );
if ($annee=='05') {print("selected" );}
print(">2005</option>\n" );
print("<option value=\"&annee=06\" " );
if ($annee=='06') {print("selected" );}
print(">2006</option>\n" );
print("</select></td></form>" );
}
else {
print("<td valign=\"middle\">20$annee</td>" );
}
?>
</tr>
<tr>
<td><strong>MOIS : </strong></td>
<? //Debut du formulaire selection mois en mode add
if ($mode=='add'){
print("<form name=\"form2\"><td valign=\"middle\"><select name=\"menu_mois\" onChange=\"location.href='?login=$log&mode=$mode'+document.form1.menu_annee.value+document.form2.menu_mois.value\">\n" );
for ($i=0;$i<=11;$i++) {
$m = $i + 1;
print("<option value=\"&mois=$mois_tbl2[$i]\" " );
if ($mois==$mois_tbl2[$i]) {print("selected" );}
print(">$mois_tbl[$i]</option>\n" );
}
print("</select></td></form>" );
}
else {
$i=abs($mois)-1;
print("<td valign=\"middle\">$mois_tbl[$i]</td>" );
}
?>
</tr>
</table></td>
</tr>
</table>
<form action="" method="post" name="form">
<?
$date = date("_ym", mktime(0,0,0,$mois,1,$annee));;
if (empty($fichier)) {
$fichier = "../ndf/ndf_$login$date.ndf";
}
?>
<input type='hidden' name='login' value="<? print($log); ?>">
<input type='hidden' name='fichier' value="<? print($fichier); ?>">
<input type='hidden' name='mode' value="<? print($mode); ?>">
<input type='hidden' name='etat' id='etat' value="">
<input type='hidden' name='mois' value="<? print($mois); ?>">
<input type='hidden' name='annee' value="<? print($annee); ?>">
<table width='650' border='1' align='center' cellpadding='1' cellspacing='0' bordercolor="#333333">
<tr align="center" valign="middle">
<td rowspan="2"><strong>Date <br>
</strong></td>
<td rowspan="2"><strong>Désignation </strong></td>
<td colspan="6"><strong>Montants détaillés des frais </strong></td>
<td rowspan="2"><strong>Forfait</strong></td>
<td rowspan="2" bgcolor="#6699FF"><strong>TOTAL</strong></td>
</tr>
<tr align="center" valign="middle">
<td colspan="2"><strong>Voiture (*)</strong></td>
<td><strong>Parking Autoroute</strong></td>
<td><strong>Frais de repas</strong></td>
<td><strong> Hôtel</strong></td>
<td><strong>Divers</strong></td>
</tr>
<tr align="center" valign="middle">
<td bgcolor="#CCCCCC"> </td>
<td bgcolor="#CCCCCC"> </td>
<td>Essence</td>
<td>ou nbr kms</td>
<td bgcolor="#CCCCCC"> </td>
<td bgcolor="#CCCCCC"> </td>
<td bgcolor="#CCCCCC"> </td>
<td bgcolor="#CCCCCC"> </td>
<td bgcolor="#CCCCCC"> </td>
<td bgcolor="#6699FF"> </td>
</tr>
<?PHP
if($mode=='modif' || $mode=='valid') {$fp=fopen($fichier,"r" );}
for ($i = 1; $i <= $NbrJours ; $i++)
{
if($mode=='modif' || $mode=='valid') {
$ligne = fgets($fp,1024); // On se déplace d'une ligne
$var = explode("|",$ligne); // Champs séparés par |, on en fait un tableau
}
if($mode=='add'){$var=array('','','','','','','','','0.00');}
$id=date("ym", mktime(0,0,0,$mois,1,$annee)).$i;
echo " <tr align='center' valign='middle'> \n";
echo " <td> <b>$i/$mois/$annee</b> </td> \n";
echo " <td> <input name='".$login.$id."1' type='text' size='20' value='".$var[0]."'></td> \n";
echo " <td> <input name='".$login.$id."2' type='text' size='5' onKeyUp='javascript:calc$i();calcT();verifvoit(\"".$login.$id."2\",\"".$login.$id."3\" )' onBlur='javascript:verifnum(\"".$login.$id."2\" )' value='".$var[1]."'></td> \n";
echo " <td> <input name='".$login.$id."3' type='text' size='5' onKeyUp='javascript:calc$i();calcT();verifvoit(\"".$login.$id."2\",\"".$login.$id."3\" )' onBlur='javascript:verifnum(\"".$login.$id."3\" )' value='".$var[2]."'></td> \n";
echo " <td> <input name='".$login.$id."4' type='text' size='5' onKeyUp='javascript:calc$i();calcT()' onBlur='javascript:verifnum(\"".$login.$id."4\" )' value='".$var[3]."'></td> \n";
echo " <td> <input name='".$login.$id."5' type='text' size='5' onKeyUp='javascript:calc$i();calcT()' onBlur='javascript:verifnum(\"".$login.$id."5\" )' value='".$var[4]."'></td> \n";
echo " <td> <input name='".$login.$id."6' type='text' size='5' onKeyUp='javascript:calc$i();calcT()' onBlur='javascript:verifnum(\"".$login.$id."6\" )' value='".$var[5]."'></td> \n";
echo " <td> <input name='".$login.$id."7' type='text' size='5' onKeyUp='javascript:calc$i();calcT()' onBlur='javascript:verifnum(\"".$login.$id."7\" )' value='".$var[6]."'></td> \n";
echo " <td> <input name='".$login.$id."8' type='text' size='5' onKeyUp='javascript:calc$i();calcT()' onBlur='javascript:verifnum(\"".$login.$id."8\" )' value='".$var[7]."'></td> \n";
echo " <td bgcolor='#6699FF'> <input name='".$login.$id."9' type='text' size='10' value='".$var[8]."'> <font color='white'></font></td> \n";
echo " </tr> \n";
}
?>
<tr align="center" valign="middle">
<td colspan="10"> </td>
</tr>
<tr align="center" valign="middle">
<td>Total</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td bgcolor="#6699FF">
<?
if($mode=='modif' || $mode=='valid') {
$ligne = fgets($fp,1024); // On se déplace d'une ligne
$var = explode("|",$ligne); // Champs séparés par |, on en fait un tableau
}
?>
<input name="WLT" type="text" size="14" value='<? if (!empty($var)) {print($var[0]);} ?>'>
</td>
</tr>
</table>
<div align="center"><br>
<script language="JavaScript">
function verif_form(etape)
{
if (etape=='sauvegarder') {document.form.etat.value='0';}
else if (etape=='envoyer') {document.form.etat.value='1'; }
else if (etape=='valid') {document.form.etat.value='2'; }
else if (etape=='corriger') {document.form.etat.value='1'; document.form.mode.value='corriger'}
else if (etape=='refuser') {document.form.etat.value='3'; document.form.mode.value='refuser'}
document.form.action='sauve_ndf.php';
document.form.submit();
}
// Fonction verifiant la saisie des montants
function verifnum(champ)
{
var a=document.form.elements[champ].value;
if (isNaN(a)) {
alert("Erreur de saisie. Vous devez saisir un nombre" );
document.form.elements[champ].value="";
document.form.elements[champ].focus();
}
}
//Fonction vérifiant que l'utilisateur n'a saisi qu'un seul champs dans l'intitulé voiture : soit essence soit kms
function verifvoit(champ, champ2)
{
var a=document.form.elements[champ].value;
var b=document.form.elements[champ2].value;
if ( a !== "" ) {
if ( b !== "" ) {
alert("Vous ne devez saisir qu'un des champs : Essence ou Kms" );
document.form.elements[champ].value="";
document.form.elements[champ2].value="";
}
}
}
</script>
<?
if($mode=='add' || $mode=='modif')
{
print(" <input type=\"button\" name=\"SAUVEGARDER\" value=\"SAUVEGARDER\" onclick=\"verif_form('sauvegarder')\">" );
print("<br><br><input type=\"button\" name=\"ENVOYER\" value=\"ENVOYER A CONSEPT\" onclick=\"verif_form('envoyer')\">" );
}
else if($mode=='valid') {
print(" <input type=\"button\" name=\"CORRIGER\" value=\"CORRIGER\" onclick=\"verif_form('corriger')\">" );
print(" <input type=\"button\" name=\"REFUSER\" value=\"REFUSER\" onclick=\"verif_form('refuser')\">" );
print("<br><br><input type=\"button\" name=\"VALIDER\" value=\"VALIDER\" onclick=\"verif_form('valid')\">" );
}
?>
</div>
</form>
<br>
Bugs & Remarques à envoyer à : <a href="mailto:wilfried.launay@consept-informatique.com">wilfried.launay@consept-informatique.com</a>
</body>
</html>
<? if($mode=='modif' || $mode=='valid') {fclose($fp);} ?>
Marsh Posté le 16-06-2004 à 10:03:58
le login change à l'entree de sauve_ndf. ça doit venir alors de form_ndf...
Marsh Posté le 16-06-2004 à 10:28:12
Et ya quoi dans authenticate.php ?
Parce que dans un de tes fichiers tu inclus authenticate.php avant de déclarer $log=$_SESSION['login'] et dans l'autre après.
De plus : merci de mettre ton code entre des balises [ cpp ] et[ /cpp]
Marsh Posté le 16-06-2004 à 10:34:42
Code :
|
Marsh Posté le 16-06-2004 à 10:55:38
Ben ça serait bien de donner l'adresse avec login et mdp pour voir.
Une chose bizarre déjà dans "form_ndf"
Code :
|
Pourquoi faire passer une valeur contenue dans ta session ($log=$_SESSION['login']) dans un champ caché (et le faire passer en $_POST, donc).
Je n'ai pas examiné tout ton code, mais essaie déjà d'éliminer cette ligne !
PS : et puis édite tes premiers messages avec du code en rajoutant les balises [ cpp] steuplait !
Marsh Posté le 16-06-2004 à 11:31:33
Code :
|
pour sauve_ndf
Marsh Posté le 16-06-2004 à 11:32:39
Code :
|
et pour form_ndf
Marsh Posté le 16-06-2004 à 11:35:33
je te file l'adresse : http//www.consept-informatique.com/intranet/
login util (pour creer note de frais) : dmo et mdp: mornet
login direction (pour validation) : wla et mdp: will
Marsh Posté le 16-06-2004 à 12:40:53
Je crois que l'erreur vient du javascript.
En login direction, en en cliquant sur corriger une note de frais, l'ai eu un message d'alerte "attention login1, dmo", c'est pas normal, j'etais sous wla.
Le traitement Valider, ne fait rien
Ensuite cela peut aussi venir du fait que tu utilises les pop-up pour ouvrir les fenêtres de validation.
Marsh Posté le 16-06-2004 à 14:13:12
je sais je m'etais planté de source pour le form_ndf.
mais le "login1 : dmo" c normal c moi qui veut afficher la var $log.
Marsh Posté le 16-06-2004 à 14:17:48
g remis la source ou la validation fonctionne. mais le login change toujours.
Marsh Posté le 16-06-2004 à 14:19:54
http://www.consept-informatique.com/intranet/
Au fait, tu sais qu'il y a une faute d'orthographe dans ton nom de domaine ?
Marsh Posté le 16-06-2004 à 14:21:31
tu parle du s de conSept, c normal la boite s'apelle comme ca.
Marsh Posté le 16-06-2004 à 14:32:58
J'ai bien compris, ce doit être un jeu de mot, mais pour quelqu'un d'extérieur, cela peut paraitre bizarre et amener des questions sur le sérieux.
En ce qui concerne tes pages, il doit y avoir un cafouilli dans les variables.
Sous wla, j'ouvre une note de frais pour la valider., une pop-up s'ouvre avec la note de frais. Une fois que cette note est validée, cette même pop-up passe à l'affichage sous le login dmo.
J'ai donc à ce moment là 2 fenêtres 1 dmo et 1 wla.
Un rafraichissement de la fenêtre WLA la transforme en DMO
A un moment, tu dois surement écraser ta variable de login de session avec le login de la personne dont la note est en cours de validation.
j'ai du mal à t'aider car PHP/HTML/Javascript sont très fortement imbriqués
Marsh Posté le 16-06-2004 à 14:59:19
tu as vérifié cette variable de session que tu dois écraser à un moment ?
à différentes étapes de ton processus, enregistre dans un fichier log l'état de ta variable de session avec la zonne d'appel. exple :
verif session - login : ...
verif données - login : ...
valisation - login ...
Marsh Posté le 16-06-2004 à 15:16:27
je vois pas comment faire si tu pouvais m'avancer ce serai cool.
je pete un cable ça fait + de 2 jours que je cherche ce put1 de bug. heureusement g du soutien
Marsh Posté le 16-06-2004 à 15:39:23
ben tu ajoute une fonction dans tes scripts :
Code :
|
ensuite tu place des appels dans tes scripts
log_session("login", "etape 1 : login = " );
Tu auras après avoir testé ton bug, un fichier log.txt que tu pourras analyser
Marsh Posté le 16-06-2004 à 16:25:14
merci g crée le log.txt
et c'est bon g repere le probleme, ca marche......
merci de ta patience et de ton soutien...
Youpi
Marsh Posté le 16-06-2004 à 16:27:16
Explique nous ce qui se passait et à quel moment.
Marsh Posté le 16-06-2004 à 16:34:13
en fait c'etait au nivo de ma requete2
Code :
|
deux variables avaient le meme nom.
g change $login=$users_tbl['login']; en $login1 et tous les autres du code et c du bonheur.....
Marsh Posté le 16-06-2004 à 16:41:55
Bon, c'est cool.
Marsh Posté le 15-06-2004 à 16:07:07
bonjour,
g deux pages gestsuivindf.php qui affiche la liste des notes de frais et qui n'est accessible que par la direction selon le login.
et sauve_ndf.php qui enregistre la validation ou non de la note de frais. Mon prob c que qd une personne soumet une ndf à la direction, celle ci la valide ou la refuse. Jusque la c cool. Qd on recharge gestsuivindf.php, la variable change et gestsuivindf.php s'affcihe avec le login de la personne qui soumettait la ndf.
je voudrait savoir pkoi et si on peut forcer la recharge avec le login direction?
merci