Newsgroup: it.comp.www.php
Titolo: problemino sugli array e soluzione elegante

Premesso che sono abbastanza nuovo a PHP e che comunque ho qualche 
esperienza di programmazione con altri linguaggi.. mi chiedevo se 
qualcuno poteva aitarmi a trovare una soluzione elegante a questo problema
Ho fatto una routine che si può richiamare sull apagina web della scuola 
  e che dice di quali studenti è il compleanno nei sette giorni seguenti.
All'inizio era per riportare il compleanno del giorno corente poiho 
pensato di dar etutt la settimana...
Ovviamente la soluzione
for ($i=1;$i<8;$i++){
	birthday($month,$day++);
}	
da qualche problema quando ci si avvicina alla fine del mese.. dovrei 
quindi far eun controllo su $day e quando arriva a
28 x il mese 2
30 x i mesi 4 6 9 11
31 x i mesi 1 3 5 7 8 10 12
riportarlo a 1 e aumentare il mese (se il mese è 12 dovrei rimetterlo a 1)
tutto questo ovviamente potrei farlo con una serie di if infinita :-) ma 
mi sembrava una cosa poco elegante, non ho dimestichezza con gli array 
associativi e con altre finezze di php.. qualcuno può darmi qualche dritta?
grazie,
daniele

e che dice di quali studenti è il compleanno nei sette giorni seguenti.
Salute, illustrissimo! :-)
Il sistema migliore e' quello di usare sempre e comunque la UNIX timestamp
(secondi dal 1-1-1970) che permette di ignorare i giorni e i mesi.
$oggi = time();
for ($day = 1; $day < 8; $day++)
{
	$month	= date('m', $oggi + $day*86400;
	$day	= date('d', $oggi + $day*86400;
	birthday($month, $day);
}
 
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.

 }
ok a parte la variabile del ciclo che mi aveva distratto un attimo 
dandomi i compleanni di date quasi random... dopo aver messo una 
variabile di ciclo funzia benissimo.. senza tutti quegli if che avevo messo
daniele

 associativi e con altre finezze di php.. qualcuno puň darmi qualche
dritta?
Piů semplice sarebbe, fare una routine che genera
la data per sette giorni, cosi non incontri problemi
con i giorni dei mesi, in questo modo vengono considerati anche gli anni
bisestili
//Routine che genara la data per i prossimi 7 giorni
//compreso oggi
$date_d = date (d);
$date_m = date (m);
$date_Y = date (Y);
                 for ($i=1; $i < 7; $i++){
$date_init = date(" d-m-Y ", mktime(0,0,0,$date_m,($date_d)+$i,$date_Y));
 //CODE ADD...
}
partendo dal presupposto
che le date siano su un file "dat_compleanni.txt"
con questa struttura  "
03-10-1970=dario leone
12-10-1970=mario gatto
13-10-1970=lucio tigre
13-10-1971=erminio puma
" ...si dovrebbe creare un modo che apre il file
riga per riga e mi restituisce un' array di righe
$file_url= fopen("dat_compleanni.txt", 'r') ;
    $dates= array();
  while ($line = @fgets($file_url, 1040))
  { $dates[]="$line";
  }
ora l' array $dates contiene un valore per ogni riga
Array
(
    [0] => 18-10-1970=dario leone
    [1] => 12-10-1970=mario gatto
    [2] => 13-10-1970=lucio tigre
    [3] => 13-10-1971=erminio puma
)
ora va implementata la routine che genera le date,
aggiungendo un metodo che
controlla se nell' array esiste una o piů date, in un determinato
giorno fornito dal Timestamp
  function chi_e_nato($data){
// importo l' array in modo globale
   global $dates;
// inizio loop
  foreach($dates as $k => $line){
// estraggo i giorni e mese
  $GiornoMese= substr($line, 0,5);
// l' anno
  $Year= substr($line, 6,4);
// il nome
  $nome= ereg_replace("^.*=", "&nbsp;&#8226; ", $line);
// controllo la data che riceve
// dal timestamp se corrisponde almeno
// ad una del file dat_complenni.txt
// componendo una semplice stringa
   if($data==$GiornoMese) {
   $comp .= ucwords($nome).' ...anno'." $Year <br />";
               }
      }
 return  $comp;
}
Ora va aggiunta la funzione chi_e_nato() nel
loop della routine, e il mini datario č fatto
spero di esserti stato d' aiuto
Se ti serve il codice completo fammi sapere
che te lo mando, contattami su
web....@iol.it
Ciao...

 
per ora va bene così.. ma in futuro mi riservo di chiederti una infinità 
di cose, soprattutto per quanto riguarda ereg et familia :-)
daniele

> 	birthday($month, $day);
AAAAGGGGHHHH!!!
Voleva essere $mm = e $dd = :-(((
Leonardo in ginocchio sui ceci


= $inizio AND CONVERT(CONCAT(YEAR(NOW()),MONTH(A7),DAYOFMONTH(A7)), date)
<= $fine;
	$inizio e' date('Ymd'), (o piu' 86400 per domani)
	$fine	e' date('Ymd', time() + 86400 * $NumGiorni);
Leonardo



In realtà, se usi un database, potresti risolvere con una tabella
temporanea.
scrivo un' esempio
-- creo la tabella
create table tem_time(
d1 date not null,
primary key(d1),
unique (d1));
-- la popolo
Insert into tem_time values (Curdate());
Insert into tem_time values (Curdate()+1);
Insert into tem_time values (Curdate()+2);
Insert into tem_time values (Curdate()+3);
Insert into tem_time values (Curdate()+4);
Insert into tem_time values (Curdate()+5);
Insert into tem_time values (Curdate()+6);
-- eseguo la query
select  CONCAT( DAYOFMONTH(t.d1),'-',Month(t.d1)) as curr,
concat(s.a2,' ',s.a3) as studente, a18 as classe
from tem_time t
left outer join anagraf s on
CONCAT( DAYOFMONTH(s.a7),'-',Month(s.a7))=
CONCAT( DAYOFMONTH(t.d1),'-',Month(t.d1));
-- elimo la tabella teporanea
drop table tem_time;
ciao.....

 Salute, illustrissimo! :-)
allora ne approfitto... saranno i pargoli che mi fanno passare le notti 
in bianco, saranno le macchie solari, sarà che ieri era venerdì 17 e mi 
son tirato dietro una sfiga colossale ma ho un problema su questo pezzo 
di codice:
La variabile $email non è definita all'inizio, per cui dovrebbe 
visualizzare il form (ie lo fa, firebird invece si comporta come se 
$email fosse definita, anche se la stampa di prova non da nessun output)
Riesci a capire cosa c'`e di sbagliato in quello che ho scritto? deve 
esserci una stupidaggine da qualche parte, ho sempre passato dei valori 
con gli input e sono sempre andati sia con ie che con mozilla.)
Sto testando in locale su winodoze con appserv 2.qualcosa
<?php
echo "<p> \$email=$email";
echo "<br> \$posta=$posta";
echo "<br> \$file=$file";
echo "<br> \$corso=$corso";
echo "<br> \$status=$status";
if (isset($email)) {
// invio della mail
	echo "<br>pippero l'email sarà inviata al più presto <br>\n";
	echo "\$email=$email";
} else {
// visualizzazione del form
?>
<form name="lista" method="post" action="<?php echo"$PHP_SELF";?>">
   <p>Iscrizione/Cancellazione liste corso TIC presso Itisvinci.com</p>
   <p>
     <select name="corso">
       <option value="0" selected>Scegli una mailing list</option>
       <option value="corso49">Lista corso 1049</option>
       <option value="corso50">Lista corso 1050</option>
       <option value="corso51">Lista corso 1051</option>
       <option value="corso52">Lista corso 1052</option>
     </select>
   </p>
   <p>E-mail <input type="text" name="email" size="30" maxlength="50">
   Subscribe <input name="status" type="radio" value="subscribe">
   Unsubscribe <input name="status" type="radio" value="unsubscribe">
  <input name="file" type="hidden" id="file" value="ml-tic.php">
   <input type="submit" name="Submit" value="Invia">
   </p>
</form>
<?php
} ?>

 Sto testando in locale su winodoze con appserv 2.qualcosa
mi ricorreggo il problema si prenseta solo con firebird 0.6.1 e con la 
0.7 il mozillone che avevo messo da parte perchč un pochettopesantuccio 
si comporta da vero signore...
adesso provo a rovinare tutto installando la 1.5 cosě vediamo di perdere 
un'altro paio di orette...:-(

 Sto testando in locale su winodoze con appserv 2.qualcosa
sul server funzia xfettamente... ho provato a riavviare il tutto ma con 
firebird da sempre lo stesso problema... si comporta come se $email 
fosse settato a qualcosa.. e non esegue correttamente l'if... sarà che 
mozilla in qualche modo si spara la variabile che ha in memoria sul 
server boh? o un problema del server locale non ne ho idea...

$email fosse definita, anche se la stampa di prova non da nessun output)
Per sicurezza comunque e' meglio se usi $_REQUEST['email'].
Inoltre io specifico sempre &XXX=(numero sempre diverso) per fregare la
cache di IE, che ogni tanto fa troppo la furba.
Per il resto mi pare che quella parte di codice vada bene. I'm baffled.


 Per il resto mi pare che quella parte di codice vada bene. I'm baffled.
si presenta solo con firebird... strano molto strano..

 Per sicurezza comunque e' meglio se usi $_REQUEST['email'].
ho guardato suun paio di libri e sul bigmanual di php m anon trovo 
traccia di $_REQUEST.. mi è parso di vedere qualcun altro usarlo sul 
gruppo... ma non sono ancora riuscito ad abituarmi a gestire le news con 
thunderbird..
dove posso trovare info?

 Per sicurezza comunque e' meglio se usi $_REQUEST['email'].
ok il mio bigmanual php era troppo vecchio per riportare la funzione...