Newsgroup: it.comp.www.php
Titolo: esecuzione di uno script con barra di progressione (Ajax+php? )

Buongiorno a tutti,
ho fatto un piccola ricerca su internet, ma ho trovato pochi esempi e a 
volte non propriamente funzionanti.
Come recita l'oggetto, potreste indirizzarmi verso qualche tutorial ben 
fatto ( o se avete suggerimenti vostri, meglio ancora), su come 
realizzare una barra di progressione che mi indichi a che punto è 
arrivata l'esecuzione di uno script php?
In pratica ho costruito un modulo newsletter per un mio gestionale e 
ovviamente quando clicco su "invia messaggio agli iscritti" mi rimane la 
pagina d'invio finchè non ha finito di inviare. Solo in questo caso mi 
porta alla pagina "success".
Ora che il numero di iscritti è divenuto copioso e che lo script viene 
utilizzato da terze persone, mi è già capitato che mi chiamassero per 
dire: ma che succede qui? io vedo sempre la stessa pagina? Ho riavviato 
tutto....bla bla...generando cis doppi o tripli invii.
Mi piacerebbe poter contare su una barra di progressione (ma pure solo 
un numero percentuale che cambia) che indichi il punto in cui siamo con 
l'esecuzione.
Di nuovo: suggerimenti? Tutorial?
Grazie mille
Franz

 tutto....bla bla...generando cis doppi o tripli invii.
Da qualche parte nel database ti salvi il numero totale di invii, e il
numero di invii effettuati, poi con una funzione ajax (tramite
setInterval, diciamo 2 secondi?) controlli interroghi il db, calcoli
la percentuale di inviati, e poi aggiorni la barra, o tramite css (e
in tal caso questo articolo capita a fagiolo: 
http://css-tricks.com/examples/ProgressBars/
)
oppure.. bhè vedi te ci sono mille modi.
Tieni conto, però, che quando l'utente clicca su 'invia newsletter' tu
dovresti solo preparare i dati, poi inviarli tramite chiamata ajax,
altrimenti la pagina finisce di caricarla quando lo script PHP è bello
che finito e tanti saluti alla barra (pensandoci, puoi usare una
funzione ajax a mò di cron tramite setInterval, ma l'utente sarà
obbligato a lasciare la pagina aperta finchè non ha finito)
Però ripeto, la cosa migliore per le mail è avere un cron o cmq
qualcosa che vada in background, non è il massimo obbligare l'utente a
tenere aperta una pagina del sito..

 suggerimenti?
Mandi subito l'utente alla pagina "success" e poi gli notifichi la 
conclusione (corretta o errata) del lavoro con una email.

 conclusione (corretta o errata) del lavoro con una email.
eh ma la barra di progresso fà figo ;)

 volte non propriamente funzionanti.
incuriosito da questa tua richiesta ho fatto una prova... che va "limata" 
magari ti è utile
nella pagina html c'è questo codice
<body>
       <div id="container">
            <div id="header"><div id="header_left"></div>
            <div id="header_main">Max's AJAX File Uploader</div><div 
id="header_right"></div></div>
            <div id="content">
                <form action="upload.php" method="post" 
enctype="multipart/form-data" target="upload_target" 
onsubmit="startUpload();" >
                     <p id="f1_upload_process">Loading...<br/><img 
src="loader.gif" id="mmm" name="mmm" align="left"/><br/></p>
                     <p id="f1_upload_form" align="center"><br/>
                         <label>File:
                              <input name="myfile" type="file" size="30" />
                         </label>
                         <label>
                             <input type="submit" name="submitBtn" 
class="sbtn" value="Upload" />
                         </label>
                     </p>
                     <iframe id="upload_target" name="upload_target" src="#" 
style="width:0;height:0;border:0px solid #fff;"></iframe>
                 </form>
             </div>
                     </div>
                   <div id="footer"><a href="
http://www.ajaxf1.com
" 
target="_blank">Powered by AJAX F1</a></div>
</body>
in pratica vi sta in  hidden la scritta "loading..." e un immagine con la 
barretta che scorre che appare quando inizia l'upload .... ho preso 
l'esempio da una pagina gia fatta che generava un uploader generico dove 
appariva fissa quest'immagine di barra stile barbiere per intenderci e poi 
ne ho modificato il codice nella pagina upload.php per far "scorrere" questa 
barra oltre che creare l'effetto diciamo "barbiere".... ecco upload.php
<?php
   // Edit upload location here
 for ($i=0;$i<=10000;$i++) {
  ?>
   <script language="javascript" 
type="text/javascript">eval(window.top.window.progressLOAD(<?php echo 
220*$i/10000; ?>));</script>   << aggiunto da me
   <?
 }
?>
<script language="javascript" 
type="text/javascript">window.top.window.stopUpload(<?php echo $result; 
?>);</script>
le funzioni stopupload e start upload non fanno altro che nascondere o 
rendere visibili le parti fl_uploadprocess e fl_uploadform... in piu ho 
aggiunto questo progressLOAD (in pratica qui non faccio altro che ciclare 
fino a 10000 e poi gli passo la percentuale moltiplicato 220 che è la 
dimensione dell'immagine) che non fa altro che cambiare il margin-left (o 
comunque una qualunque altra proprietà css) all'immagine...
function progressUNLOAD(a){
  a=220-a;
      document.mmm.style.marginLeft = "-"+a+"px";
      return true;
}
in realtà nella provba si vede st'immagine che scorre da una parte all'altra 
dello schermo ma perchè il css era fatto male ... basta giocarci un po su
non so se sono stato chiaro nella descrizione perdonami :P