Newsgroup: it.comp.www.php
Titolo: Problema strano.. molto strano

Ciao a tutti, mi sta succedendo una cosa strana con un sito php+mysql,
sarò breve e ometterò quello che credo non importi:
ho un database con un campo denominato "data" nel formato "date" e che,
per esempio, la data di oggi appare così: "2006-08-07"
In una pagina php devo ricreare la data scomponendo le tre componenti e
sostituendo il mese con l'abbreviazione letteraria (quindi 08 diventa
AGO)
utilizzo questa procedura:
$data = explode ('-',"$rec_data"); //estraggo in un array i 3 valori
$anno = $rec_data[0];
$giorno = $rec_data[2];
switch ($data[1])
	{
	case 01 : $mese = "GEN"; break;
	case 02 : $mese = "FEB"; break;
	case 03 : $mese = "MAR"; break;
	case 04 : $mese = "APR"; break;
	case 05 : $mese = "MAG"; break;
	case 06 : $mese = "GIU"; break;
	case 07 : $mese = "LUG"; break;
	case 08 : $mese = "AGO"; break;
	case 09 : $mese = "SET"; break;
	case 10 : $mese = "OTT"; break;
	case 11 : $mese = "NOV"; break;
	case 12 : $mese = "DIC"; break;
	}
echo "$giorno - $mese - $anno";
Ebbene
con 10 dei 12 mesi funziona tutto correttamente però se immetto una
data di agosto (08) oppure di settembre (09) mi dice:
Notice: Undefined variable: mese in c:\****sito locale******\index.php
on line 100
e sotto dovrebbe stampare 02 - AGO - 2006 invece stampa 02 - - 2006
Proprio non capisco il motivo, con gli altri mesi funziona bene ma con
agosto e settembre mi da errore
IN PIU'
se la stringa data è 2007-08-02 (quindi aggiungo un anno)
mi stampa 02 - LUG - 2006  (mi cambia il mese e l'anno!!!!)
CI CAPITE QUALCOSA? Spero tra l'altro di essere stato chiaro

 
Magari la prossima volta utilizza un Oggetto per il messaggio più 
esplicativo... "Problema strano... molto strano" non fa capire a cosa ti 
riferisci, e molti, soprattutto quelli più bravi neanche lo aprono il 
messaggio.

 $giorno = $rec_data[2];
^^^^^^^^^^^^^^^^^^^^^^^^^
occhio a quello che esplodi!
hai esploso data, rec_data è invariato
<?php
$rec_data = "2007-07-01";
$data = explode ('-', $rec_data); //estraggo in un array i 3 valori
print_r($data);
$anno = $data[0];
$giorno = $data[2];
$mesi = array( "error" ,"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio",
"Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre",
"Dicembre" );
print("\n$giorno - ".$mesi[$rec_data[0]]." - $anno\n");
?>
-- 
una volta qui era tutto <table>

 $rec_data[0] e $rec_data[2] sicuro??? :-P
Ho trascritto male io: $rec_data contiene la stringa, la esplodo nella
variabile $data quindi:
$rec_data = "2006-08-02";
$anno = $data[0];  //quindi 2006
$mese = $data[1];  //quindi 08
$giorno = $data[2];  //quindi 02
le vostre correzioni magari sono giuste però il mio problema è un
altro, mi rimane il dubbio sul perchè con i mesi 08 e 09 da errore ma
con gli altri no
?????
ps: scusate x il pessimo oggetto del post

 print("\n$giorno - ".$mesi[$rec_data[0]]." - $anno\n");
Ma LOL :-D ... fa caldo anche li??? :-P
motion musso aka: sathia ha scritto:


Il problema l'ho risolto grazie a voi:
case 08
è diventato
case "08"
ed ora trattandolo da stringa funziona correttametne, rimane però
l'enigma del perchè con 10 mesi funzionava e con 08 e 09 no
:)
in ogni caso vi ringrazio

}
A occhio credo che non gli garbi, giustamente aggiungo, il fatto di 
confrontare un numero "strano" (per esempio 05) con una stringa normale 
"05".
prova a mettere tra virgolette tutti i casi:
case "01"
case "02"
ecc.
OPPURE
trasforma i $data in valori interi:
intval($data[1]) e poi metti:
case 1
case 2
ecc.
ciao,
Luca(riello) 

 con gli altri no
Perche` un numero che inizia con 0 viene considerato ottale (in C e
derivati, quindi anche in PHP), e 08 ottale non esiste, tantomeno 09 (si
scrivono rispettivamente 010 e 011).
Bye.
-- 
Alessandro Pellizzari

Gamaweb ha scritto:

Il problema è delle conversioni implicite di php... è meglio non 
abusarne mai...
comunque con l'array come suggerito da sathia è più bello da vedere...
$data = explode ('-', $rec_data); //estraggo in un array i 3 valori
$anno = $data[0];
$giorno = $data[2];
$mesi = array( "error" ,"GEN", "FEB", "MAR", "APR", "MAG", "GIU", "LUG", 
"AGO", "SET", "OTT", "NOV", "DIC" );
echo "$giorno - {$mesi[(int) $data[1]]} - $anno";
?>

 
sě che fa caldo :/
che cane!


Non si finisce mai di imparare, questa cosa del sistema ottale non la
sapevo
ora si
GRAZIE MILLE A TUTTI

e le if inline al posto della switch? esteticamente non è brutto da 
vedere.  :)
$mese=	  $data[1]=="01" ? "GEN"
	: $data[1]=="02" ? "FEB"
	: $data[1]=="03" ? "MAR"
	: $data[1]=="04" ? "APR"
	: $data[1]=="05" ? "MAG"
	: $data[1]=="06" ? "GIU"
	: $data[1]=="07" ? "LUG"
	: $data[1]=="08" ? "AGO"
	: $data[1]=="09" ? "SET"
	: $data[1]=="10" ? "OTT"
	: $data[1]=="11" ? "NOV"
	: "DIC";
anche se arrivo tardi, io di solito queste cose le risolvo con:
setlocale(LC_ALL, 'it_IT'); // questo se il sistema non è settato 
sull'italico idioma.
$td=strptime($rec_data, '%Y-%m-%d'); // da stringa a array.
$data=date("%d %M %Y", mktime(0, 0, 0, $td['tm_mon'], $td['tm_mday'], 
$td['tm_year']+1900)); // da array a stringa
print $data; //et voilà.
