Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/08/2011, 09h57   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Par défaut Temps d'exécution d'une fonction

Bonjour à tous,

D'avance excusez-moi si ma question vous parait débile, mais bon, allez :

J'ai une fonction 1 qui s'exécute à la suite d'un POST.
Selon le nombre de données envoyées, le traitement peut-être plus ou moins long. Il y a une boucle, qui passe les données en revue et appelle une autre fonction 2 qui exécute un traitement MySQL.

Ensuite, il y a un return sur la fonction 1 avec un message de succès, et on revient sur le formulaire.
Etant donné que celui-ci est destiné à être imprimé, le message succès s'affiche dans un alert JS.
En gros ça donne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
function fonction1($dataform){
 
 
      foreach($dataform['toto'] as $val){
 
            fonction2($val);
      }
 
$succes = "OK";
return $succes;
}
 // et dans la page du form :
 
$succes = fonction1($_POST);
echo '<script language="javascript">alert(\''.$succes.'\');window.close();window.opener.refresh_page(\'page.php\');</script>';
Le truc, c'est que les traitements de la fonction 2, les entrées en BDD, sont assez aléatoires et fantaisistes...
Alors ma question est : est-il possible que l'alerte JS s'affiche AVANT que la boucle et ses traitement soient complètement terminés du fait que le JS est exécuté par le navigateur ?

Si vous avez une idée sur la question, je veux bien la partager...
Merci !
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 10h30   #2
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Précision un peu foldingue :

Dans la fonction 2, une série d' UPDATE mySQL, si je fais un echo à chaque tour de boucle, ça parait mieux fonctionner.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 12h32   #3
Membre Expert
 
Avatar de kdmbella
 
Homme Demazy Mbella
Développeur Web
Inscription : août 2010
Messages : 620
Détails du profil
Informations personnelles :
Nom : Homme Demazy Mbella
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : août 2010
Messages : 620
Points : 1 470
Points : 1 470
moi j'avoue ne pas comprendre ce problème !
__________________
Trois personnes peuvent garder un secret si deux d'entre elles sont mortes. :Benjamin Franklin
L'humanité se divise en trois catégories : ceux qui ne peuvent pas bouger, ceux qui peuvent bouger, et ceux qui bougent : Benjamin Franklin
Le hasard, c'est le déguisement que prend Dieu pour voyager incognito: Albert Einstein
bon je m'arrête là au risque de me faire buter
kdmbella est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 13h12   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Comment faire un alert("OK") avant de savoir si ça l'est réellement ?



PS : tu peux remplacer avantageusement ton JS par du HTML/CSS

Code :
1
2
3
4
5
@media print {
    .no-print {
        display : none ;
    }
}
Code :
<p class="no-print">Traitement effectué avec succès</p>
Ainsi le message de confirmation ne sera jamais imprimé.

(oui je déteste le JS et ai toujours fait tout ce que je pouvais pour l'éviter )
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 13h22   #5
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour,

Et bien, "OK", c'est sensé l'être puisque la variable $succes est retournée par la fonction 1, à la fin, donc normalement quand tout est exécuté (return $succes).

Par contre, je ne connaissais pas le "no-print" HTML/CSS et je vais le tester.
Merci !
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 13h29   #6
Invité régulier
 
Inscription : mai 2009
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 12
Points : 7
Points : 7
Citation:
Envoyé par renaud26 Voir le message
Et bien, "OK", c'est sensé l'être puisque la variable $succes est retournée par la fonction 1, à la fin, donc normalement quand tout est exécuté (return $succes).
Je me méfie de "c'est censé l'être", cela veut dire que tu peux te contenter d'un Pour envoyer du HTML avant la fin je placerais un flush(); juste après ton
Code :
echo '<script language="javascript">alert(\''.$succes.'\'...
qu'il faut déplacer avant le foreach de la fonction 1.
Mais c'est dangereux étant donné que le traitement n'est pas terminé.

Tu peux aussi placer cela dans le foreach :
Code :
1
2
3
4
5
6
7
8
 
$taille = sizeof($dataform['toto']);
foreach($dataform['toto'] as $val){
 
    fonction2($val);
    echo $taille--;
     flush();
}
ainsi ton utilisateur voit un compteur
jinfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h21.


 
 
 
 
Partenaires

Hébergement Web