Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Come ridurlo?!?

  1. #1
    Utente di HTML.it L'avatar di Lucada
    Registrato dal
    Apr 2005
    Messaggi
    176

    Come ridurlo?!?

    Ciao, allora sto effettuando uno script collegato ad un archivio di news e funziona in questa maniera.

    Mi controlla mese per mese gli ultimi dodici mesi... se c'è qualche news inserita mi visualizza il nome del mese che se poi io cliccherò mi apre l'intero archivio di quel mese... altrimenti non mi stampa quel mese.

    Ora lo script che sono riuscito a fare... (per scorciarlo lo posto su un campione di due mesi tanto si capisce) è già lunghino su due mesi figuratevi su dodici... volevo sapere se c'era qualche maniera o consiglio per ridurlo.

    Ciao e Grazie.

    codice:
    <?
    $conn = mysql_connect('localhost','xxxxxx','xxxxxx') or die("Errore nella connessione a MySql: " . mysql_error()); 
    		mysql_select_db('xxxxxxxx',$conn) or die("Errore nella selezione del db: " . mysql_error()); 
    
    $data = date(Y) . "-" . date(m) . "-01";
    
    #Controllo primo mese archiviato precedente a quello odierno
    
    $query = "Select * FROM daeliminare WHERE data between '" . $data . "' - INTERVAL 1 MONTH and NOW()";	
    $ris = mysql_query($query,$conn) or die("Errore nella query: " . mysql_error());
    $result = mysql_num_rows($ris);
    
    
    if ($result != 0) {
    
    	$riga = mysql_fetch_array($ris);
    	$esplosa = explode('-', $riga['data']);
    	$mese = $esplosa[1];
    	
    	if ($mese == 01) {
    		echo "Gennaio" . $esplosa[0];
    	} elseif ($mese == 02) {
    		echo "Febbraio" . $esplosa[0];
    	} elseif ($mese == 03) {
    		echo "Marzo" . $esplosa[0];
    	} elseif ($mese == 04) {
    		echo "Aprile" . $esplosa[0];
    	} elseif ($mese == 05) {
    		echo "Maggio" . $esplosa[0];
    	} elseif ($mese == 06) {
    		echo "Giugno" . $esplosa[0];
    	} elseif ($mese == 07) {
    		echo "Luglio" . $esplosa[0];
    	} elseif ($mese == 08) {
    		echo "Agosto" . $esplosa[0];
    	} elseif ($mese == 09) {
    		echo "Settembre" . $esplosa[0];
    	} elseif ($mese == 10) {
    		echo "Ottobre" . $esplosa[0];
    	} elseif ($mese == 11) {
    		echo "Novembre" . $esplosa[0];
    	} elseif ($mese == 12) {
    		echo "Dicembre" . $esplosa[0];
    	} else {}		
    		
    } else {
    	echo "Trovato Niente";
    }
    
    
    #Controllo secondo mese archiviato precedente a quello odierno
    
    $queryp = "Select * FROM daeliminare WHERE data between '" . $data . "' - INTERVAL 2 MONTH and '" . $data . "' - INTERVAL 1 MONTH";	
    $risp = mysql_query($queryp,$conn) or die("Errore nella query: " . mysql_error());
    $resultp = mysql_num_rows($risp);
    
    
    if ($resultp != 0) {
    
    	$rigap = mysql_fetch_array($risp);
    	$esplosap = explode('-', $rigap['data']);
    	$mesep = $esplosap[1];
    	
    	if ($mesep == 01) {
    		echo "Gennaio" . $esplosap[0];
    	} elseif ($mesep == 02) {
    		echo "Febbraio" . $esplosap[0];
    	} elseif ($mesep == 03) {
    		echo "Marzo" . $esplosap[0];
    	} elseif ($mesep == 04) {
    		echo "Aprile" . $esplosap[0];
    	} elseif ($mesep == 05) {
    		echo "Maggio" . $esplosap[0];
    	} elseif ($mesep == 06) {
    		echo "Giugno" . $esplosap[0];
    	} elseif ($mesep == 07) {
    		echo "Luglio" . $esplosap[0];
    	} elseif ($mesep == 08) {
    		echo "Agosto" . $esplosap[0];
    	} elseif ($mesep == 09) {
    		echo "Settembre" . $esplosap[0];
    	} elseif ($mesep == 10) {
    		echo "Ottobre" . $esplosap[0];
    	} elseif ($mesep == 11) {
    		echo "Novembre" . $esplosap[0];
    	} elseif ($mesep == 12) {
    		echo "Dicembre" . $esplosap[0];
    	} else {}		
    		
    } else {
    	echo "Trovato Niente";
    }
    
    mysql_close($conn);
    ?>
    Il vero io è quello che tu sei, non quello che gli altri hanno detto di te. [Paulo Coelho]

  2. #2
    Mi sembra il festival del girotondo....

    Scusa... ma se estrai i dati di un determinato mese a che ti serve tutta quella sequela di if ed elseif. Fai un array con il nome dei mesi in italiano che abbia come indice associativo il numero del mese e sei a posto. Personalmente utilizzo un array inglese/italiano.
    codice:
    $mesi = array('January'=>'Gennaio', 'February'=>'Febbraio', 'March' =>'Marzo',
                   'April' =>'Aprile', 'May'=>'Maggio', 'June'=>'Giugno', 'July' =>'Luglio',
                   'August' =>'Agosto', 'September' =>'Settembre', 'October'=>'Ottobre',
                   'November'=>'Novembre', 'December'=>'Dicembre');
    estrai il nome in inglese:
    codice:
    $query = "Select *, date_format(data, '%M') as mese 
    FROM daeliminare 
    WHERE data between CURDATE() - INTERVAL 1 MONTH and CURDATE()";
    poi fai il check sull'array...
    codice:
    if ($result > 0) {
       $value = $riga['mese'];
       $mese = $mesi[$value];
       } else {
    	  echo "Trovato Niente";
              }
    Di piu'... poiche' sara' una routine di check ricorsiva che cambia solo il numerello per il chek del mese, fai una funzione a cui passerai solo il numero dei mesi da controllare...


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di Lucada
    Registrato dal
    Apr 2005
    Messaggi
    176
    Oki fin qua ho capito...

    ...ma per quanto riguarda la routine... mmmm.

    Alur te dici in poche parole di non riscrivere ogni volta la query del db ma una funzione che mi cambia la data e mi ri esegue la query... giusto?

    Se così.. mmm un esempino? Magari anceh su un altra cosa senza scrivere codice ad hoc per questo giusto per capire... tnx 1000.
    Il vero io è quello che tu sei, non quello che gli altri hanno detto di te. [Paulo Coelho]

  4. #4
    per esempio:
    codice:
    Function forDelete($val) {
    
    $mesi = array('January'=>'Gennaio', 'February'=>'Febbraio', 'March' =>'Marzo',
                   'April' =>'Aprile', 'May'=>'Maggio', 'June'=>'Giugno', 'July' =>'Luglio',
                   'August' =>'Agosto', 'September' =>'Settembre', 'October'=>'Ottobre',
                   'November'=>'Novembre', 'December'=>'Dicembre');
    
    $query = "Select *, date_format(data, '%M') as mese 
    FROM daeliminare 
    WHERE data between CURDATE() - INTERVAL $val MONTH and CURDATE()";
    
    $risp = mysql_query($query);
    $result = mysql_num_rows($risp);
    
    if ($result > 0) {
       $riga = mysql_fetch_assoc($risp);
       $value = $riga['mese'];
       $mese = $mesi[$value];
       } else {
    	  $mese = "Trovato Niente";
              }
    return $mese;
    }
    
    $num = 2; // n. dei mesi che ti interessano
    
    echo forDelete($num);
    Basta richiamare la funzione dove ti serve. puoi anche estrarre i dati fuori dalla funzione dichiarando pero' globali i dati da esportare.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di Lucada
    Registrato dal
    Apr 2005
    Messaggi
    176
    Un ultima cosa... se facessi tutto in un ciclo for... o while?

    Tanto a me interessa fino a 12... e cioè un anno intero.

    Quindi faccio ciclare il tutto per 12 volte cambiando in variabile il numero del mese e poi ovviamente alla fine mettente $variabile = $variabile +1;

    Potrebbe andar bene lo stesso no?

    Tnx 1000
    Il vero io è quello che tu sei, non quello che gli altri hanno detto di te. [Paulo Coelho]

  6. #6
    puoi fare come ti pare...

    anche ad estrarre tutto in una volta sola ordinando il result set per data. Che e' poi lo stesso che fare un ciclo for o while ... non ti pare?


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di Lucada
    Registrato dal
    Apr 2005
    Messaggi
    176
    Oki... tnx mille!
    Il vero io è quello che tu sei, non quello che gli altri hanno detto di te. [Paulo Coelho]

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.