Newsgroup: it.comp.www.php
Titolo: [PHP] - Le classi

Ho creato la seguente classe e l'ho inserita in un file classi.php che
includo nelle pagine dove viene richiamata:
<?php
class recapito {
var $tipologia;
var $numero;
var $noter;
var $visibile;
function add_rec($a,$b,$c,$d) {
$this->tipologia = $a;
$this->numero = $b;
$this->noter = $c;
$this->visibile = $d;
}
}
?>
Ho la seguente pagina in cui inserisco i recapiti popup.php:
<html>
<body>
<form name="form1" action="popup.php?id=1" method="post">
<table width="100%">
<tr>
<td>Tipologia:</td>
<td>
<select name="tipo">
<option value="" selected>--Seleziona--</option>
<option value="telefono">Telefono</option>
<option value="cell">Cell</option>
<option value="email">E-mail</option>
<option value="fax">Fax</option>
</select>
</td>
</tr>
<tr>
<td>Numero:</td>
<td><input type="text" name="numero" value=""></td>
</tr>
<tr>
<td>Note:</td>
<td><textarea rows="5" cols="20" name="noter"></textarea></td>
</tr>
<tr>
<td>Visibile:</td>
<td><input type="checkbox" name="visibile" value="1"></td>
</tr>
<tr><td colspan="2" height="15"></td></tr>
<tr><td colspan="2" height="15"><input type="button" name="salva"
value="salva" onClick="java script:salvaCont()"></td></tr>
</table>
<?
if ($_GET['id']==1){
$arr_new=$_SESSION['arr'];
$tipo=$_POST['tipo'];
$numero==$_POST['numero'];
$noter=$_POST['noter'];
$visibile=$_POST['visibile'];
//creo una variabile di tipo recapito;
$rec = new recapito;
$rec-> add_rec($tipo,$numero,$noter,$visibile);
$lung=count($arr_new);
//aggiungo all'array il nuovo recapito
$arr_new[$lung]=$rec;
$lung2=count($arr_new);
$_SESSION['arr']=$arr_new;
// per un controllo mi stampo tutti i recapiti presenti nell' array
for ($contatore=0; $contatore < $lung2; $contatore++) {
echo $contatore." - ".$arr_new[$contatore]->tipologia."<br>";
}
}
?>
</form>
</body>
</html>
La cosa strana è che ogni volta che stampa mi stampa solo l'ultima
"tipologia" inserita infatti per esempio dopo due inserimenti in cui ho
inserito
prima "Telefono" e poi "Email" (quindi la lunghezza dell'array sarà
2).
mi stampa :
0:
1: Email
se inserisco un'altra tipologia per esempio "fax" mi stamperà:
0: 
1: 
2: fax 
Perchè perde i valori deli altri oggetti????

> Perchè perde i valori deli altri oggetti????
Non è che ti dimentichi di fare session_start() a inizio pagina ?
Per passare gli oggetti da una pagina all'altra cerca di usare le funzioni  
serialize e unserialize prima di inserirli in sessione.  
http://www.php.net/serialize
Tac
-- 
La netiquette prevede sign di al massimo quattro righe.
Purtroppo la mia sign in quattro righe non ci stà.

Si la session_start() l'ho fatta.
Quindi correggimi se sbaglio con riferimento al codice precedente:
$_SESSION['arr']=serialize($arr_new);
e 
$arr_new=unserialize($_SESSION['arr']);
Ho capito bene?

  
wrote:

Si, e occhio che il codice non è troppo chiaro e contiene alcuni errori  
(una delle assegnazioni la fai con == invece che con =).
Prova qualcosa del tipo (non testato):
$arr_new = array();
if (isset ($_SESSION['arr])){
	$arr_new = unserialize ($_SESSION['arr']);
}
$arr_new[] = $rec;
foreach ($arr_new as $elemento){
	print ($elemento->tipologia);
}
$_SESSION['arr'] = $arr_new;
In generale cerca di utilizzare nomi piu' esplificativi e, se non hai  
dimestichezza con i cicli, l'istruzione di foreach è in generale piu'  
semplice ed è meno facile sbagliare.
Per controllare velocemente il contenuto di una variabile, usa var_dump ().


Grazie ora funziona tutto!!!
Senti un ultima cosa, sai mi sono avvicinato da poco al php,
qual'è la diff tra un ciclo for e un foreach??
GRAZIE ANCORA

  
wrote:

Figurati, un linguaggio nuovo è sempre ostico.
Foreach cicla su tutti gli elementi di un array, mentre for è un ciclo  
piu' generico, potresti usarlo per fare cose del tutto diverse se volessi.
Le prime pagine del manuale php sono molto esplificative, leggile bene.
//cicla su tutti gli elementi di un array. La variabile $value
//diventa di volta in volta l'elemento corrente
foreach ($array as $key=>$value){
	echo 'valore:'.$value;
}
//come sopra ma viene settata anche la variabile $key che
//rappresenta l'indice in cui è presente il valore.
foreach ($array as $key=>$value){
	echo 'chiave: '.$key.', valore:'.$value;
}
I due cicli sopra sono piu' o meno l'equivalente di
for ($key = 0; $key < count ($array); $key++){
	echo $array[$key];
}
La differenza è che il ciclo for presume che gli indici siano tutti  
numerici e non ci siano buchi fra uno e l'altro. Darebbe errore nel caso  
di:
$array = array();
$array[1] = 'uno';
$array['prova'] = 'semplice prova';
$array[4] = 'quattro';
Il ciclo for, infatti è totalmente slegato dall'array in se (mentre  
foreach necessita di un array per funzionare).
Un esempio anomalo:
//ciclo di 5 secondi, stampa la parola 'secondo' ogni secondo che passa
for ($time = time(); time() < $time + 5; ){
	sleep(1);
	echo 'secondo<br>';
	flush();
}
In genere il ciclo for ti dà la possibilità di specificare un'istruzione  
di inizializzazione, la condizione che deve rimanere per tutta la durata  
del ciclo, ed una istruzione da eseguire alla fine di ogni ciclo.
Il fatto che venga usato per ciclare sugli array è, in un certo senso,  
puramente accidentale.
Ci sono altre piccole differenze ma direi che non ha senso parlarne ora,  
visto che sei agli inizi con php.
In genere foreach rende estremamente piu' difficile sbagliare e quindi fà  
perdere meno tempo. Il codice, inoltre, è in genere piu' pulito e molto  
piu' leggibile.
In compenso un ciclo for è in genere maggiormente ottimizzato.
Ciao
