IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Arrêt du script


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 52
    Par défaut Arrêt du script
    Bonjour,

    J'ai un petit problème : je dois réaliser l'impression d'environ 600 pages html. Pour ce faire, j'utilise la fonction javascript print puis recharge la page avec l'identifiant de la page suivante à imprimer. Cependant, lorsque mon script est ''complet'', il s'arrête après que l'impression soit faite : tout le code après est ignoré. Lorsque je commente la ligne pour imprimer mon code fonctionne normalement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
     
    <?php 
    	include "./dao.php";
    ?>
     
    <script src="./jquery/jquery-2.2.3.min.js"></script>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
    	<link rel="stylesheet" href="./stylePrint.css" />
        <title>Fiche materiel</title>
    </head>
    <body>
    	<center>
    		<?php
    				if(isset($_GET['id'])){
    					$mat = $dao->getMateriel($_GET['id']);
    					if($mat){
    						$noinv = $mat->getNoInventaire();
    						echo '
    							<h3>'.$noinv.'</h3>
    							<img src="./img/'.$_GET['id'].'.png">
    						';
    						echo '<script> window.print(); </script>';  //imprime la page courante. Bloque le script (non voulu)
    						$_GET['id']++;
    						header("Refresh:0, url=print.php?id=".$_GET['id']);
    					}
    				}
    				else{
    					echo '
    						<h3>Lancer l\'impression</h3>
    						<input type="submit" value="Valider" id="print">
    					';
    				}
     
     
    		?>
    	</center>
     
    	<script>
    		$("#print").click(function(){
    			window.location.replace("print.php?id=1");
    		});
    	</script>
    </body>
    </html>
    Je ne comprend pas pourquoi...

    Merci de votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 946
    Par défaut
    Bonjour

    Je n'y connais vraiment pas grand chose en javascript, j'ai essayé de décortiqué votre code, et plusieurs interrogations me viennent :
    - peut-on incrémenter une variable globale? J'aurais tendance à utiliser une variable locale pour récupérer les info à imprimer, incrémenter cette variable, puis aller chercher la page correspondante à la valeur de cette variable locale.
    - pourquoi ne pas passer par une boucle, du style, for id = 1 to xx, imprimer la page id?
    - enfin je ne comprends pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script>
    		$("#print").click(function(){
    			window.location.replace("print.php?id=1");
    		});
    	</script>
    Avec mes yeux de néophyte, j'ai l'impression qu'on reste à la page 1?

    Pierre

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il manque une action (else) :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    					if($mat){
    						$noinv = $mat->getNoInventaire();
    						echo '
    							<h3>'.$noinv.'</h3>
    							<img src="./img/'.$_GET['id'].'.png">
    						';
    						echo '<script> window.print(); </script>';  //imprime la page courante. Bloque le script (non voulu)
    						$_GET['id']++;
    						header("Refresh:0, url=print.php?id=".$_GET['id']);
    					} else {
    						header("Refresh:0, url=print.php"); // ?? (ou quoi d'autre ?)
    					}

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 52
    Par défaut
    - peut-on incrémenter une variable globale? J'aurais tendance à utiliser une variable locale pour récupérer les info à imprimer, incrémenter cette variable, puis aller chercher la page correspondante à la valeur de cette variable locale.
    Oui, ça marche bien comme je le souhaite.

    - pourquoi ne pas passer par une boucle, du style, for id = 1 to xx, imprimer la page id?
    On ne peut pas (à ma connaissance) donner l'url d'une page à imprimer. Je dois donc imprimer la page courante, puis recharger la page avec l'id suivant. Là encore ça fonctionne.

    - enfin je ne comprends pas
    J'associe juste le fait de cliquer sur le bouton à un rechargement de la page en commencant à id=1 et donc on rentre dans la boucle.

    Il manque une action (else) :
    Non non, lorsque $mat == false ma boucle est terminé et puis c'est fini. C'est pas quelque chose en prod c'est juste pour moi.


    Problème toujours non résolu, mon code fonctionne mais c'est la méthode window.print qui stoppe le code, sans message d'erreur, sans rien...

    Merci de vos réponses

  5. #5
    Membre chevronné
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Par défaut
    Bonjour,

    A partir du moment où du code HTML ou un 'echo' sont interprétés, les entêtes sont envoyées et il n'est plus possible de les modifier via l'instruction header().

    Dans votre code, il y a du contenu envoyé avant votre instruction header(), cela ne peut pas fonctionner.

    Vois la doc: http://php.net/manual/fr/function.header.php

    Vous pouvez éventuellement remplacer votre header() par l'équivalent en javascript. (document.location = ''nouvelle url'

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 52
    Par défaut
    Merci beaucoup, le problème venait en effet de là, je commencais à devenir fou

    Cependant j'ai deux nouveaux ''problèmes'' :

    - Si je ne met pas un temps de pause d'au moins 5 secondes (le temps que l'impression soit envoyé à l'imprimante), le script est tout de même bloqué.
    - Le nouveau bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    echo '<script> window.print(); </script>';
    sleep(5);
    $_GET['id']++;
    echo '<script> document.location = "print.php?id='.$_GET['id'].'"; </script>';
    Ici le sleep(5) (ou n'importe quoi d'autre j'ai essayé avec des alert) s'effectue AVANT le window.print

    Une explication ?

    Merci encore pour la réponse, même si je dois attendre 5sec entre chaque je peux maintenant le faire de manière automatique.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Un kill dans un script shell qui arrête le script
    Par woodruff28 dans le forum Linux
    Réponses: 4
    Dernier message: 04/07/2011, 22h32
  2. Réponses: 2
    Dernier message: 20/02/2008, 11h16
  3. Réponses: 9
    Dernier message: 24/12/2007, 11h27
  4. Arrêt de script après exécution
    Par mathieugamin dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/08/2007, 14h56
  5. Script qui s'arrète !! Comment faire autrement ?
    Par Xplosif² dans le forum C++
    Réponses: 5
    Dernier message: 25/02/2006, 22h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo