[risolto] Mostrare a video il risultato di una query con stesso anno e mesi diversi

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Buongiorno a tutti, rieccomi...
Il titolo non e' chiarissimo, lo so.
Si tratta di questo:
Ho una tabella calendario che raduna tutte le lezioni e per ciascuna lezione è memorizzata la data con ciascun dato in campi separati: giorno, mese, anno, giorno della settimana.
Per mostrare a video il calendario devo ottenere:
- L'anno
poi - il mese
e per ciascun mese le lezioni del periodo.
Poi passare al mese successivo della selezione, scriverlo, e poi tutte le lezioni.
Tipo:
2014
GENNAIO
lezione 1
lezione 2
...
FEBBRAIO
lezione 1
lezione 2

Naturalmente la selezione non partirà sempre da gennaio...
Pensavo a un ciclo FOREACH, ma non riesco a ottenere il calendario come mi serve.
Non riesco a effettuare il ragionamento corretto per ottenere questo risultato.
Qualcuno puo' darmi una mano?
Grazie
 

html5today

Nuovo Utente
17 Feb 2014
9
0
0
HTML5
www.html5today.it
Ciao! Sebbene non abbia proprio chiarissima la tua domanda, penso che basti che tu faccia prima una query con l'anno, poi nella pagina di ogni anno metti una lista dei mesi linkata alla pagina di ogni singolo mese che mostra le lezioni di quel mese.

Insomma una roba del genere:

PHP:
<?php

  $mesi = array('gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno', 'luglio',  'agosto', 'settembre', 'ottobre', 'novembre','dicembre');

  // facciamo una lista con sottoliste
  echo '<ul>';

  // parti da questo anno e mostra i prossimi 5 anni  
  for ($anno = date('Y'); $anno <= date('Y') + 5; $anno++)
  {
    echo '<li>Anno ' . $anno;
    echo '<ul>
    foreach ($mesi as $mese)
    {
      // qui puoi mettere il link alla pagina di ogni singolo mese, oppure fare direttamente la query per le lezioni di quel mese
      echo '<li>' . $mese . '</li>';
    }
    echo '</ul>';
    echo '</li>';
  }
  echo '</ul>';

?>

Bah, facci sapere se questa soluzione ha senso... ;)
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
si, ha senso...
Alla query per anno ci ero arrivato, non ero arrivato a pensare di creare un array con i mesi e quindi il FOREACH.
Mi si era grippato il cervello...
Intanto grazie, poi vi faccio sapere.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se non ho capito male tu hai una tabella del tipo (metto i nomi a caso)
Codice:
id
anno
mese
giorno
lezione
potresti provare a fare cosi
PHP:
<?php
//dati ci connessione
$q1=mysqli_query("SELECT anno FROM tabella GROUP BY anno ORDER BY anno");
$anni=mysqli_fetch_assoc($q1);//array degli anni
$q2=mysqli_query("SELECT mese FROM tabella GROUP BY mese ORDER BY mese");
$mesi=mysqli_fetch_assoc($q2);//array dei mesi
echo "<table>";
echo "<tr><td>anno</td><td>mese</td><td>giorno</td><td>lezione</td></tr>";
foreach($anni as $anno){
	echo "<tr><td>$anno</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>";
	foreach($mesi as $mese){
		echo "<tr><td>&nbsp;</td><td>$mese</td><td>&nbsp;</td><td>&nbsp;</td></tr>";
		$q3=mysqli_query("SELECT * FROM tabella WHERE anno='$anno' AND mese='$mese' ORDER BY giorno");
		while($riga=mysqli_fetch_assoc($q3)){
			$gg=$riga['giorno'];
			$lez=$riga['lezione'];
			echo "<tr><td>&nbsp;</td><td>&nbsp;</td><td>$gg</td><td>$lezione</td></tr>";
		}
	}
}
echo "</table>";
?>
guarda che l'ho buttato giu al volo, quindi tutto da verificare

ops: avevano già risposto
 
Ultima modifica:

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Allora, ho applicato il ragionamento di cui sopra...
Questa è la funzione in questione:
PHP:
function anteprima1anno() {
	$anno = $_SESSION['annoStart'];
	include 'connect.php';
			$query = ("SELECT * FROM calendario WHERE pubblica = 1 && anno = $anno");
			$fatto = mysql_query($query);
			mysql_close();
			
			$num=mysql_numrows($fatto);
			if ($num == 0) {
				echo "Non ci sono lezioni abilitate alla pubblicazione nel $anno";
			}
			echo "<p align='center' class='h22b'>$anno</p>";
			
		$mesi = array('1', '2', '3', '4', '5', '6', '7',  '8', '9', '10', '11','12');

foreach ($mesi as $mese) {
	
	if ($mese == 1){$mese = "gennaio";}
	 if ($mese == 2){$mese = "febbraio";}
	 if ($mese == 3){$mese = "marzo";}
	 if ($mese == 4){$mese = "aprile";}
	 if ($mese == 5){$mese = "maggio";}
	 if ($mese == 6){$mese = "giugno";}
	 if ($mese == 7){$mese = "luglio";}
	 if ($mese == 8){$mese = "agosto";}
	 if ($mese == 9){$mese = "settembre";}
	 if ($mese == 10){$mese = "ottobre";}
	 if ($mese == 11){$mese = "novembre";}
	 if ($mese == 12){$mese = "dicembre";}
	echo "<p align = 'center' class'h22b'>$mese</p>";
?>
				
<table width="100%%" border="0" cellspacing="0" cellpadding="0" class="h7">
    
<?php

	/*visualizzo i dati delle lezioni */
	
	$i=0;
 	while ($i < $num) { 
     $id=mysql_result($fatto,$i,"id_lezione");
	 $giorno=mysql_result($fatto,$i,"giorno");
	 $weekday=mysql_result($fatto,$i,"weekday");
	 $t7invita=mysql_result($fatto,$i,"t7invita");
	 $chef=mysql_result($fatto,$i,"chef");
	 $titolo=mysql_result($fatto,$i,"titolo");
	 $sottotitolo=mysql_result($fatto,$i,"sottotitolo");
	 $dettagli=stripslashes(mysql_result($fatto,$i,"dettagli"));
	 $dettagli = str_replace("\n","<BR>",$dettagli);
	 $euro=mysql_result($fatto,$i,"euro");
	 $posti=mysql_result($fatto,$i,"posti");

?>

<tr>
    <td width="70" class="h5b">Cod.<br />lezione:<br /><? echo $id; ?></td>
    <td width="100" class="h5b"><? echo "$weekday, $giorno"; ?></td>
    <td colspan="3" class="h5b">Posti Disponibili: <? echo $posti; ?></td>
    </tr>
  <tr>
    <td>&nbsp;</td>
    <td colspan="4" class="h5b"><? echo $t7invita; ?></td>
    </tr>
  <tr>
    <td>&nbsp;</td>
    <td colspan="4" class="h7b">Chef: <? echo $chef; ?></td>
    </tr>
  <tr>
    <td>&nbsp;</td>
    <td colspan="4" class="h5b"><? echo $titolo; ?></td>
    </tr>
  <tr>
    <td>&nbsp;</td>
    <td colspan="4"><? echo $sottotitolo; ?></td>
    </tr>
  <tr>
    <td>&nbsp;</td>
    <td colspan="4" class="h7"><? echo $dettagli; ?></td>
    </tr>
  <tr>
    <td>&nbsp;</td>
    <td colspan="2" align="right" class="h5b">&nbsp;</td>
    <td width="244" colspan="2" align="right"  class="h5b">€ <? echo $euro; ?></td>
  </tr>
<?php
	 
     $i++;

	}
		
}
}

?>

</table>

Ma mi si stampa l'anno correttamente e poi prima dell'elenco delle lezioni mi mette sia gennaio che febbraio (che sono gli unici due mesi attualmente presenti nel 2014)
Se volete dare un occhiata dal vivo (al momento si puo' scegliere solo il 2014):
http://www.teatro7.com/backoffice/calendarioPubblicato.php

grazie...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
sei sicuro che funzi?
Fatal error: Call to undefined function anteprimapiumesi() in /htdocs/public/www/backoffice/calendarioPubblicato.php on line 164
poi non capisco perche ti vuoi incasinare in quel modo soprattutto con i mesi.
es.
PHP:
<?php
//.....
$mesi = array('gen', 'feb', 'mar',ecc...);
foreach ($mesi as $mese){//così non devi fare tutta quella sfilza di if
echo "<p align = 'center' class'h22b'>$mese</p>"; 
//...

}
//...
?>
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
E comunque e' tutto sbagliato...
Selezionando l'anno 2014, mi mostra le stesse lezioni in tutti i dodici mesi...
Ci devo ripensare.
La serie di if serviva, nella mia testa, a richiamare funzioni e quindi ricerche diverse, a seconda di cio' che l'utente sceglie nel form: solo un anno, solo un mese di un anno, un periodo tra più mesi, o un periodo fra più anni.
Adesso è sviluppata solo la funzione che risponde alla selezione di un solo anno.
Comunque dovrei in qualche modo testare se nella selezione richiesta ci siano lezioni da pubblicare e QUALI mesi ci sono. E poi impaginarli nella mia tabella col ciclo WHILE.
Se avete qualche spunto di ragionamento, mi aiuterebbe...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
prova una cosa del genere
PHP:
<?php
//dati ci connessione
function calendario($a1,$a2,$m1,$m2){
/* dove
$a1 -> $_POST['anno1']
$a2 -> $_POST['anno2']
$m1 -> $_POST['mese1']
$m2 -> $_POST['mese2']
*/
	//crei dinamicamente la querystringa in funzione degli anni che inputi
	$wh="";
	if($a1 !="==" && $a2 !="=="){//input entrambi
		$wh="WHERE anno BETWEN '$a1' AND '$a2'";
	}elseif($a1 !="==" && $a2 =="=="){//input solo anno partenza
		$wh="WHERE anno >= '$a1'";
	}elseif($a1 =="==" && $a2 !="=="){//input solo arriwo
		$wh="WHERE anno <= '$a2'";
	}
	$qa=mysqli_query("SELECT anno FROM talbella $wh GROUP BY anno ORDER BY anno");
	if(mysqli_num_rows($qa) == 0){
		echo "non trovata corrispondenza nell'intervallo cercato";
	}else{
		while($a=mysqli_fetch_array($qa)){
			$anni[]=$a['anno'];//estrae gli hanni che hai in tabella
		}
		//crei dinamicamente la querystringa dei mesi inputati per il periodo di anni inputato
		$wh="WHERE 1=1";
		if($m1 !="==" && $m2 !="=="){//input entrambi
			$wh="AND mese BETWEN '$m1' AND '$m2'";
		}elseif($m1 !="==" && $m2 =="=="){//input solo anno partenza
			$wh="AND mese >= '$m1'";
		}elseif($a1 =="==" && $a2 !="=="){//input solo arriwo
			$wh="AND mese <= '$m2'";
		}
		foreach($anni as $anno){
			$q=mysqli_query("SELECT mese FROM tabella $wh AND anno='$anno' GROUP BY mese ORDER BY mese");
			if(mysqli_num_rows($q > 0){
				$m=mysql_fetch_array($q);
				$periodo[$anno]=$m['mese'];
			}
		}
		if(!is_array($periodo)){
			echo "non trovata corrispondenza nell'intervallo cercato";
		}else{
			echo "<table>";//qui ti organizzi la tabella come vuoi io metto solo un campo a caso
			$mm=array('','gen','feb');//ecc... tutti i mesi, partendo con un posto vuoto
			foreach($periodo as $anno => $mese){
				$q=mysql_query("SELECT * FROM tabella WHERE anno='$anno' AND mese='$mese' ORDER BY giorno");
				$mese=(int)$mese;
				$mese_let=$mm[$mese];
				if(mysqli_num_rows($q)>0){
					while($riga=mysqli_fetch_assoc($q)){
						$giorno=$riga['giorno'];
						$titolo=$riga['titolo'];
						echo "<tr><td>$anno</td><td>$mese_let</td><td>$giorno</td><td>titolo</td></tr>";
					}
				}
			}
			echo "</table>";
		}
		
	}
	
}//fine function
//****TEST******
calendario($_POST['anno1'],$_POST['anno2'],$_POST['mese1'],$_POST['mese2']);
?>
attento al valore delle <select> per non selezianate ho messo ==
e non ho messo i controlli in caso di errore, es. anno di partenza maggiore di quello di arrivo, io metterei un controllo del genere
PHP:
<?php
//dentro la funzione all'inizio....
if($a1 > $ a2){
	$tr=$a1;
	$a1=$a2;
	$a2=$tr;//cioè inverto (swap)
}
//...analogo per il mese
?>

comunque da provare se funziona
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao html5
se noti ho scritto che ho omesso i controlli
è evidente che tutti i dati devono essere controllati
ma qualcosina l'utente deve (dovrebbe) fare
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
grazie delle ooservazini.
Ora integro il mio codice (che avevo variato rispetto alla prima stesura) con il codice proposto sopra (o meglio il concetto).
Appena funziona tutto come voglio io, vi faccio sapere...
Non sono velocissimo, (per fortuna) ho anche un altro paio di cose da curare e non riesco mai a cominciare e finire una cosa senza interruzioni!
A presto, e se vi viene qualche altra idea, accetto ogni suggerimento.
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
e finalmente funziona tutto come mi serve.
Grazie per i suggerimenti. Integrando quello che mi avete suggerito con alcune variazioni richieste dal mio committente ho risolto.
Alla prossima e grazie di tutto.
 
Discussioni simili
Autore Titolo Forum Risposte Data
N [RISOLTO] Mostrare a video le checkbox selezionate con PHP e MySQL PHP 4
L (risolto) MySQL 0
B getElementById su piu id(Risolto) Javascript 7
L Esercitarsi con Js [RISOLTO] Javascript 4
C [RISOLTO]Inserimento variabile php in input html PHP 20
L risolto visualizzazione e ordinamento dati PHP 1
moustache [RISOLTO] SQL PHP IIS PHP 8
Sergio Unia Ricezione email con destinatari multipli [Risolto] PHP 2
L update tabelle in php mysql [risolto] PHP 6
M Semplice visualizzatore di immagini [risolto con plugin wp] PHP 7
L [RISOLTO] Stampa a video risultato count in html PHP 13
L [RISOLTO] Eliminare una discussione creata PHP 3
tomorc [HTML] Problema con scroll bar (risolto) HTML e CSS 0
A [PHP] Problema query insert [RISOLTO] PHP 14
B [PHP] recuperare IP dei server in load balancing [RISOLTO] PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
elpirata [RISOLTO][Javascript] Datapicker e autocompletamento campo input Javascript 2
elpirata [RISOLTO][Mysql] Problema insert valori apostrofati MySQL 1
elpirata [RISOLTO][Mysql] Contare le occorrenze in un campo tipo varchar MySQL 2
G [MS Access] Gestione biglietti [RISOLTO] MS Access 2
G [MS Access] Casella combinata & Query [RISOLTO] MS Access 4
G [MS Access] Query mese corrente con conteggio [RISOLTO] MS Access 2
M [RISOLTO]Windows media player non mi funziona più su win 10 pro 64 bit Windows e Software 2
C [RISOLTO][PHP] Errore di sintassi PHP 8
IT9-Gpp [RISOLTO] Leggere variabile restituita da success Ajax 3
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [RISOLTO][PHP] Funzione ONclick PHP 14
C [RISOLTO][PHP] Conteggio righe di una tabella PHP 4
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
Tommy03 [RISOLTO][PHP] Webserver o devserver? PHP 2
Sergio Unia Recupero dati da una vecchia versione MySql [Risolto] MySQL 4
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
A [RISOLTO]Inserimento Immagini da pc a MySql PHP 15
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
felino Risolto - [Wordpress][WooCommerce] PayPal Checkout e campi di fatturazione WordPress 2
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
elpirata [PHP] [RISOLTO]Sovrascrivere testo in una tabella PHP 2
A [RISOLTO]Recuperare dati inviati con json tramite php PHP 4
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
elpirata [PHP][RISOLTO] Errore di tipo Notice: Undefined index - Come risolvere quando si hanno tante var PHP 10
S Problema in PHP per invio file XML - RISOLTO- PHP 8
A [Javascript] [RISOLTO] Doppio "submit", in uno stesso "Form" , che puntino ad "action" diversi Javascript 1
marino51 [Risolto]videochat di messenger ha smesso di funzionare sul telefonino Smartphone e tablet 1
A [Javascript] [HTML] RISOLTO...Allungare un box all'apertura della pagina No Mouse over Javascript 9
ken_korn [Javascript][Risolto] browser.tab.Tabs.favIconUrl non funziona Javascript 5
A [RISOLTO] HighChart e PHP PHP 4
A [RISOLTO] PHP Selezionare tutti i file con stessa estensione PHP 2
A [RISOLTO] Table elaborata da codice PHP con dati da DB non visualizzata in IFRAME PHP 15

Discussioni simili