Sauvegarde de clic sur boutons, dans une feuille excel [Résolu]

Signaler
Messages postés
32
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
27 février 2006
-
Messages postés
32
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
27 février 2006
-
Salut à tous,
je dispose d'une page avec 4 boutons contenant des liens vers des fichiers pdf.
un clique sur un bouton fait appel à une fonction sauve qui va enregistrer dans un fichier excel l'appui sur ce bouton.
Pour cela, j'ai dû utiliser la méthode post dans un formulaire avec les 4 boutons submit.

Malheureusement, avec cette méthode, dès que je réactualise ma page, sans appuyer sur un bouton, j'enregistre automatiquement un appui dans mon fichier excel:
mon code ressemble à ça:

Formulaire des boutons:
<form name=\"click\" method=\"POST\" action=\"validformulaireOK.php\">

,
</form>
<form name=\"click\" method=\"POST\" action=\"validformulaireOK.php\">

,
</form>
<form name=\"click\" method=\"POST\" action=\"validformulaireOK.php\">

,
</form>



switch case:

switch($_POST['valid'])
{
case "1" : $ge='oui';
session_register('ge');
$_SESSION['ge']=$ge;
sauve();
break;
case "2" : $fp='oui';
session_register('fp');
$_SESSION['fp']=$fp;
sauve();
break;
case "3" : break;
default : break;

fonction sauve:
function sauve()
{
$ref=$_SESSION['ref'];
$employe=$_SESSION['employe'];
$date=$_SESSION['date'];
$ge=$_SESSION['ge'];
$fp=$_SESSION['fp'];
/******************** enregistrement des données dans lun fichier excel ********************************/
//le fichier, une fois ouvert, renvoit un pointeur $file
$nomfichier="C:\Program Files\EasyPHP1-8\www\documents/testxls.csv";
//ouverture du fichier en mode a+: lecture en début et écriture en fin de fichier
$file = fopen($nomfichier,"a+");
$chaine=fread($file,filesize($nomfichier));
if(!$chaine)
{
$contenu=" REFERENCE ; EMPLOYE ; JOUR ;FICHE PRODUCTION;PHOTOS\n";
fputs($file,$contenu); // enregistrement des données ds le fichier
$contenu=" $ref ; $employe ; $date ; $ge ; $fp \n";
}
else $contenu=" $ref ; $employe ; $date ; $ge ; $fp \n";
//écriture dans le fichier puis fermeture
fputs($file,$contenu); // enregistrement des données ds le fichier
fclose($file);

Si quelqu'un avait une petite idée...
C'est assez dur à comprendre, si vous avez des kestions, faut pas hésiter, ça m'aiderait beaucoup!!!!!

8 réponses

Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Salut,

Le problème vient du rechargement de la page (réactualisation). Lors de cette action, le navigateur renvoit les même informations que lors de la précédante soumission. Donc aussi les info passées en POST (sauve-moi).

Pour cela, il existe des codes sur ce site. Par exemple, des petits script pour éviter que les gens votent deux fois...

Dans le principe, il faut que tu identifie les pages que tu fait afficher. Puis lors de la soumission de nouvelles données, vérifier que cette soumission provient bien de la dernière page affichée...

Je m'explique mieux :
------------- un page à afficher -------------
<?php
session_start();

// Là, tu identifie la page que tu va afficher
$id = uniqid(time()); // identifiant unique
$_SESSION['IDpage'] = $id; // sauvegarde de l'id en session

?>
<html>

<form>
<!-- Là, tu envoi son matricule à la page... il sera transmit lors de chaque soumission -->
" />
</form>

</html>
-------------------------------------------------------

-------------- traitement des données soumise ---------
<?php
// c'est très simple... tu compares !
$IDpage = isset($_POST['IDpage']) ? $_POST['IDPage'] : '';
if( $IDpage==$_SESSION['IDpage'] ) {
// C'est OK... C'est bien la réponse de la page que tu viens d'envoyer
}
else {
// Les données ne proviennent pas de la page que tu attendais (réactualisation ?)
}
?>
----------------------------------------------

Tout ça est bien beau... mais nécessite les Cookies !!!
Il y'a bien d'autres façno de faire. Cherches sur le site.

Voili, A+
Messages postés
164
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
7 octobre 2009

cacoucatatonique
Messages postés
164
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
7 octobre 2009

pour faire une page xls moi jutilise la methode suivante:

l'appel je le fait par un simple bouton

<?

echo
"
sortir le récapitulatif de ce type d'article sous excel";

echo "<form action='dl_excel.php' method='POST'>



</form>";

?>



et je vais vert une page de generation de fichier xls:



<html>



<head>

<title></title>

<style type="text/css">

<!--

body {

background-color: #CCCC99;

}

-->

</style>

</head>







<?php



$connexion = mysql_connect("****","*****","*****")

or die ("probleme de connection");

$db = mysql_select_db("chimie",$connexion)

or die ("probleme de selection de base de donnée");



$choix=$_POST['choix'];



if ($choix=="Ré")

{$choix1="Réactifs";}

if ($choix=="Co")

{$choix1="Consommables";}

if ($choix=="Pi")

{$choix1="Pièces détachées";}



echo "$choix1";



$link="SELECT prod FROM mois1" ;

$result = mysql_query($link);

$num_rows = mysql_num_rows($result);

$num=$num_rows+1;



$file = ("commentaires.xls"); // le fichier doit déjà exister



if(!$myfile = fopen($file, "w")) //on ouvre le fichier

{

print("erreur: ");

print("'$filename' n'existe pas!\n");

exit;

}

fputs($myfile,"article\tjanv\tfevr\tmars\tavr\tmai\tjuin\tjuil\taoût\tsept\toct\tnov\tdec\ttotal année\n");



$t=2;

for ($i=1;$i<$num;$i++)

{



$req="SELECT prod,temp3 FROM stock WHERE ID='$i' " ;

$query = mysql_query($req);

$data = mysql_fetch_array($query, MYSQL_ASSOC);



$prod=$data['prod'];$temp3=$data['temp3'];



if ($temp3==$choix)

{


$req="SELECT janvier, fevrier, mars, avril, mai, juin, juillet,
aout, septembre, octobre, novembre, decembre FROM mois1 WHERE
prod='$prod'" ;

$query = mysql_query($req);

$data = mysql_fetch_array($query, MYSQL_ASSOC);



$janvier=$data['janvier'];$fevrier=$data['fevrier'];$mars=$data['mars'];$avril=$data['avril'];$mai=$data['mai'];

$juin=$data['juin'];$juillet=$data['juillet'];$aout=$data['aout'];$septembre=$data['septembre'];$octobre=$data['octobre'];$novembre=$data['novembre'];

$decembre=$data['decembre'];

//ecriture


fputs($myfile,"$prod\t$janvier\t$fevrier\t$mars\t$avril\t$mai\t$juin\t$juillet\t$aout\t$septembre\t$octobre\t$novembre\t$decembre\t=SOMME(B$t:M$t)\n
");

//on insère
une tabulation \t pour changer de colonne et un retour chariot \n pour
changer de ligne

$t++;

}

}

//fermeture fichier

fclose($myfile); //on ferme le fichier

echo "La table a été sauvegardée...";



$date = date("d-m");

$file = ('commentaires.xls');

$file_copy = ($date.$choix1.'.xls');



copy($file,$file_copy);



$req="UPDATE excel SET lien='$file_copy' WHERE ID='1'" ;

$resultat = mysql_query($req)

or die ("la requete ne peut etre execute flex");



mysql_close(); // 9. on ferme la connexion



header("location:$file_copy");

?>



</html>



part cette methode il ny a aucun probleme, le fichier de sortie est de
la forme xls, parcontre il faut que le fichier commentaire soit deja
existant!!!

cacoucatatonique
Messages postés
32
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
27 février 2006

Je vais essayer
Messages postés
32
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
27 février 2006

oups, petit pb d'écriture, je recommence

je vais essayer la méthode des id uniques mais j'aurais voulu savoir si l'utilisation des cookies était obligatoire?

en tout cas merci pour vos reponses, ça fait plaisir d'avoir des explications bien détaillées!

@+
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Les Cookies sont nécessaires pour l'utilisation des sessions... Donc c'est pour ça (et uniquement) qu'ils sont nécessaires pour l'histoire des id.

Pour contourner le problème... il faut passer les identifiants de session dans l'URL. Enfin bref une question de configuration.

Bonne chance !
Messages postés
164
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
7 octobre 2009

bien deja la fonction ecriture tu peut l'utiliser sans passer par une
session en fesant passer les parametres par POST , si tu veux etre sur
que la page s'efectue que lorsque tu le desire, tu test la variable qui
passe par POST et si elle n'est pas vide tu effectue l'ecriture par
exemple.

et en faite l'iddée de l'ID unique c'est la création d'une table tempon
qui va me servir à faire passer tous les paramettre necessaire à la
fonction que je veux effectuer, je fait la meme chose quand j'utilise
la fonction fpdf, je suis pas un tres grand expert en la matiere mais
c'est un moyen facile et relativement rapide de faire passer plusieurs
variables de page en page et cela grace à une table tempon situé dans
dnas ma bdd.

cacoucatatonique
Messages postés
32
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
27 février 2006

merci mec, ton idée sur les idpages m'a bien aidé!
j'avais laissé de côté qq jours et puis j'ai réussi à m'en sortir avec
tchao et bon week end.