Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822

    PHP : query che viene eseguita anche se dovrebbe essere terminata

    Ciao

    ho questa funzione

    codice:
    function scheda_tecnica($tessera="", $anno_inizio="", $anno_fine="", $tipo_frontespizio="")
    {  
      // SERINN = 1 significa che il tesserato si è iscritto quell'anno
      
      
      /* Se esiste cancello la precedente scheda tecnica in formato HTML */
    	
       if (is_file("tmp.htm"))
    			unlink("tmp.htm");
    			
       $query_iscrizione = "SELECT INGRESSO FROM ana_rinn01be WHERE serinn=1 "; 
       
       if  (($anno_inizio<>"") AND ($anno_fine<>""))   
    	  $stringa_data = " AND RINNOVO BETWEEN '$anno_inizio' AND '$anno_fine' ";	
       
       if  (($anno_inizio<>"") AND ($anno_fine==""))  
    	  $stringa_data = " AND RINNOVO = '$anno_inizio' ";	
       
       if  (($anno_inizio=="") AND ($anno_fine<>""))   
    	  $stringa_data = " AND RINNOVO = '$anno_fine' ";
       
       if ($tessera != "")
    	  $stringa_tessera = " AND INGRESSO = '$tessera' ";
       
       
       $query_iscrizione  .= $stringa_data .  $stringa_tessera . " ORDER BY INGRESSO " ;
       $dati_iscrizione = mysql_query($query_iscrizione) or die (mysql_error());
       $n = mysql_num_rows($dati_iscrizione);    
       
       $n = 1000;
      // echo "
    $n valori
    
    $query_iscrizione"; exit;
       
       
      
       
       if ($n == 0)  // Non trovo nessun tesserato, interrompo subito l'elaborazione
       {
    	 echo "
    		<script language ='javascript'>	
     alert ('ATTENZIONE ! Non è stato trovato nessun tesserato con i requisiti richiesti !')
    			location.href='tecniche.php'	
    			
    		</script>
    		
    		";		
    			
       }
       elseif ($n > 100)
       {		
    		 
    		echo "
    		<script language='javascript'>
    				 
    var r=confirm('ATTENZIONE ! Sono stati trovati $n record ! Questo potrebbe portare a tempi di attesa di alcuni minuti. Procedere ugualmente ? ');			
    			if (r == false)					 
    				location.href='tecniche.php'
    			
    						
    		</script>	
    		";
    		
        }
    Nell'esempio ho impostato manualmente il valore $n = 1000 per vedere che succede. Il controllo guarda se n = 0 , interrompe l'elaborazione, se invece $n > 1000 dovrebbe chiedere che fare.

    Nel mio caso invece, nonostante entri nel caso if ($n > 1000) in quanto tra i vari test fatti in precedenza ho messo una stringa

    codice:
     "sono qui"; exit
    in realtà non mostra il messaggio del ELSEIF, continua l'elaborazione dopodiché si ferma e mi chiede che fare.

    Nel codice ho riportato solo la parte che viene prima della elaborazione vera e propria. La parte immediatamente successiva è questa :

    codice:
    $stringa = "";
    	$stringa_stampare = "";
    	$conta_frontespizio = 1;
    	 
       while ($row_iscrizione = mysql_fetch_array($dati_iscrizione))
       {         
    		
    		$mail = array();
    		$fax = array
    
    ..........
    Il while è dopo !! Come mai invece si impalla e non fa quello che deve fare ?

    SCUSATE ho fatto una modifica al codice del ELSE
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  2. #2
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    Chiaramente so i prolbemi di integrazione tra PHP e JS, però dato che in altre parti del programma ho gia usato (positivamente anche se con query piu semplici) questo tipo di "effetto" vorrei trovare un modo, uno qualsiasi, per avvisare l'utente che la query che ha generato potrebbe inchiodare il PC per 5-6 minuti.
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  3. #3
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    no no no no.. secondo me stai facendo un pò di confusione e il problema riguarda appunto JS e PHP.

    pretendi che il js (lato client) interrompa l'esecuzione di uno script PHP (lato server). non tornano i conti che dici?
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  4. #4
    Originariamente inviato da ivy_76
    Chiaramente so i prolbemi di integrazione tra PHP e JS, però dato che in altre parti del programma ho gia usato (positivamente anche se con query piu semplici) questo tipo di "effetto" vorrei trovare un modo, uno qualsiasi, per avvisare l'utente che la query che ha generato potrebbe inchiodare il PC per 5-6 minuti.

    intanto il pc che si pianta non è quello del cliente ma è il tuo server... e poi per far piantare un server dovresti fare una query, fatta male, su milioni di record... insomma, fai prima a paginare qualche decina di risultati piuttosto che chiedere all'utente cosa fare...

    EDIT: milioni di record, bastano solo qualche centinaia di migliaia
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    In due parole il programma funziona cosi : la segretaria seleziona dei filtri tramite i quali vede a monitor un elenco di persone che fanno parte del suo club. In base ai filtri che vengono effettuati ci saranno piu o meno persone nell'elenco. Questo elenco viene poi convertito in un documento PDF che potra essere stampato, salvato o inviato via mail.


    Lo so anche io che JS + PHP creano un problema nel sincronismo tra i dati e che PHP viene eseguito dal server che restituisce l'equivalente HTML con JS ecc ecc ... io sto cercando una soluzione qualsiasi al seguente problema:

    Faccio una query che impiega 5 o anche 10 minuti per generare un grosso documento in PDF (non per estrarre i dati da MySQL) composto dai dati estratti da MySQL. Vorrei riuscire a estrarre il numero di record che comporranno il mio documento PDF (dato che ho gia estratto vedi $n) e mostrare un avviso all'utente (come ho gia mostrato nel codice) in modo che almeno sappia che se il suo computer non fa niente (anche se il server gestisce i dati il cliente non lo sa perché normalmente chi usa i computer sono delle capre oppure perché non gli interessa) è perché è impegnato a creare il documento che ha richiesto.

    Adesso invece ottengo due risultati per quanto riguarda i messaggi che voglio che compaiano a video:

    1. se ci sono pochi record, supponiamo 80, il programma funziona "in tempo reale" e il JS funziona. Il cliente puo scegliere se interrompere l'elaborazione o se continuare

    2. se ci sono parecchi record, supponiamo 3000, il programma elabora i dati e dopo 5 minuti o giu di li, mostra il messaggio di avviso che invece dovrebbe essere prima

    NB: 3000 record sono tanti se parliamo del documento PDF (non dell'estrazione da MySQL che avviene in una frazione di secondo) che viene creato dato che con le funzioni FPDF, per generare un unico documento di quel tipo si allaga la RAM e il processore del server si inchioda.
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  6. #6
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    l'unica soluzione 'affrontabile',a mio parere, è quella di provare a 'giocare di flush()' e output buffer....

    [list=1][*]crei un output buffer[*]fai un flush immediato di un bel div centrale che ti dice di attendere qualche istante. con un link di annullamento[*]premuto il pulsante il sistema torna alla schermata precedente, viceversa continua a girare in background... il chè vuol dire che se i record sono pochi il div non darà il tempo all' utente di interagire e mostrerà la sua lista[/list=1]


    potrebbe funzionare

    guarda questo esempio

    clicca qui e provalo in locale...
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  7. #7
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    Interessante .... vedo un po di modificarlo alle mie esigenze !

    Grazie 1000
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.