Message d'attente lors de l'execution d'un script

Mammouth du PHP | 693 Messages

28 mai 2007, 10:05

Bonjour,

J'ai un script assez long qui doit s'executer (a peu près 5 minutes) lors de l'insertion de données. Comment faire pour que les utilisateurs aient un message d'attente ?

jed
Eléphant du PHP | 218 Messages

28 mai 2007, 10:08

Oufff... en effet 5mn c'est pas de la tarte... A part une animation flash je voie pas...

Petit nouveau ! | 7 Messages

28 mai 2007, 10:12

Tu peux faire cela en JavaScrit avec un display off au lancement de ton code et display on à la fin.
J'essai de retrouver le bout de code et je l'envoi.

@+

Edit : Vala, j'avais fait un truc dans ce genre =>

Avant le début du code php

Code : Tout sélectionner

<div name="wait" id="wait" align="center"><img src='une gif animée'></div>
et à la fin du code php

Code : Tout sélectionner

<script language="javascript"> document.all['wait'].style.visibility="hidden"; </script>

Mammouth du PHP | 693 Messages

28 mai 2007, 11:07

OK, merci.

Sinon, il me semblait que la page était envoyé une fois le code executé. Je me trompe ?

En fait, vu qu'il y a redirection à la fin du sciprt, ca serait plutot
ce code mais bon, merci pour l'idée.

Code : Tout sélectionner

<script> document.location.replace('adresse') </script>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 mai 2007, 11:37

Je me trompe peut être, mais il me semble bien que la page html est envoyée au fur et à mesure (et c'est d'ailleurs ce qui pose problème avec les headers quand du code est transmis au navigateur au préalable).

Tu peux donc normalement faire afficher une page d'attente avec une animation pour indiquer que ca travail, avant de commencer ton traitement php.

L'intérêt de l'affichage/masquage en javascript est assez limité si tu fais une redirection ensuite, mais cela peut être pratique lorsque l'on reste sur la même page, le temps que celle-ci soit chargée :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 693 Messages

28 mai 2007, 11:42

Je l'avais bien compris :wink:

Je vais donc tester la solution.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 mai 2007, 12:47

Cette solution est non-viable pour plusieurs raisons :

1/ même si le code est envoyé au buffer au fur et à mesure, la taille du buffer, donc le délai avant envoi du code vers le navigateur est configurable par le serveur ... donc soumis à modification

2/ certains navigateurs (comme IE) attendent d'avoir reçu tout le code pour l'afficher.

La solution que j'envisagerais, serait d'afficher une page simple contenant le message d'erreur et une redirection HTML <meta refresh> pointant sur le script prennant du temp.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 5924 Messages

28 mai 2007, 14:43

Sinon il y a une solution très simple : réduit la lourdeur de tes requètes...

Mammouth du PHP | 693 Messages

30 mai 2007, 13:59

Et bien cette so:ution n'est pas trop possible, car j'ai environ 300 noms pour lesquels il faut à chaque fois que je charge une page pour récupérer des informations.

Finalement, je pense que je vais me touner vers Ajax qui me semble adapté à la situation.

Petit nouveau ! | 1 Messages

25 janv. 2017, 18:51

Bonjour, je voudrais simplement effacer traitement en cours après la boucle de recherche, une solution , ci joint le code
<?php
echo '<b> </br></br>';
echo '<table border=1 summary="">';
echo '<tr>';
echo '<td width=250 align="center" bgcolor="lightskyblue">Date</td>';
echo '<td width=150 align="center" bgcolor="lightskyblue">N° Facture</td>';
echo '<td width=300 align="center" bgcolor="lightskyblue">Code client </td>';
echo '<td width=50 align="center" bgcolor="lightskyblue">Client</td>';
echo '<td width=50 align="center" bgcolor="lightskyblue">Montant TTC</td>';
echo '<td width=80 align="center" bgcolor="lightskyblue">Solde</td>';
echo '</tr>';
echo '<div id="msg" >Traitement en cours ...</div>';
$sql="SELECT DATE_FORMAT(facture.datefac,'%d/%m/%Y') date,facture.idfac,facture.idclient,facture.nomcli,facture.mtttc,facture.solde FROM facture WHERE 1 ORDER BY facture.datefac DESC ";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data = mysql_fetch_assoc($req))
{
echo '<tr>';
echo '<td width=150 align="center">'.$data['date'].'</td>';
$x=$data['idfac'];
echo "<td><center><a href=\"affichefacture.php?ref=".$x."\">$x<width='20' height='20' ></a></center></td>";
//echo '<td width=300 align="center">'.$data['idfac'].'</td>';
echo '<td width=300 align="center">'.$data['idclient'].'</td>';
echo '<td width=300 align="center">'.$data['nomcli'].'</td>';
echo '<td width=300 align="center">'.$data['mtttc'].'</td>';
echo '<td width=50 align="center">'.$data['solde'].'</td>';
echo '</tr>';
}
// C'est la que je voudrais cacher le message traitement en cours ..
?>
Merci d'avance pour votre aide