Newsgroup: it.comp.www.php
Titolo: Creazione dinamica della variabili.

In una pagina ho una form con n campi differenti da riempire.
Uso questo script ($tot e $nome ora li inserisco qui ma in realtà sono
assegnati da una form in precedenza)
<form>
<?
  $tot     = 20;
  $nome = "ciccio";
  for ($i  = 0; $i < $tot ; $i++) {
      Campo n° <? echo "$i"+1 ?> <input type="text" name="<? echo $nome.$i
?>" value=""> <br>
  }
segue....
?>
</form>
A questo punto invio tutti i dati ad una pagina dove voglio stampare il nome
del campo di testo ed il relativo valore.
<?
if (!$tot) {
     echo ("Non ricevo il totale dei campi");
} else {
     echo "Totale campi = $tot";
   for ($i=0; $i<$tot; $i++){
      echo "Valore per  ";
      echo $nome.$i ;
->->->  echo "= $nome.$i<br>"; <-<-<-   ( qui dovrei ottenere echo $ciccio1,
$ciccio2, ... )
   }
}
?>
Qui ho il problema. Non riesco a stampare il valore dellla variabile
composta da $nome e $i.
Io dovrei fare in modo che alla riga evidenziata appai echo $ciccio1,
$ciccio2........ ma come sto operando ottengo
il nome del campo piuttosto che il valore perché concateno due variabili e
stampo il valore della prima + il valore della seconda mentre
io dovrei stampare il valore di una variabile risultante dall'unione di
$nome e $i.
Qualche consiglio?

 assegnati da una form in precedenza)
Hi,
per usare le variabili dinamiche devi considerare la sintassi $$var (o
$$ciccio) per cui se  $ciccio = "gatto", $$ciccio = $gatto.
Per stampare si può usare la sintassi
echo "Ciao ${$ciccio}, che verrebbe come
echo "Ciao $gatto"
Puoi anche impostare array ${$ciccio}[]  e ${$ciccio[]}
Nel primo caso 6 indicizzato $gatto[], nel secondo $gatto1, $gatto2, ecc...
Infine potrai usare:
while (list ($indice, $valore) = each ($array)) {
$$indice = $valore;
}
per estrarre i dati.
Da manuale :-))
ciao,
Salvo

Si, usare i vettori.
Magari ti pare una cosa complessa, ma i vettori puoi paragonarli allo stesso
sistema che usi tu,
solo che ci sono le parentesi quadre.
ciao[0]="primociao";
ciao[1]="secondociao";
La cosa carina è che per generare il form non ti serve neppure sapere o
inserire nelle variabili il numero, infatti basta:
<?php
$quanti=20
for ($i=0;$i<$quanti;$i++){ ?>
    Campo N° <?php echo($i+1);?> <input type="text" name="vettore[]">
<?php
}
?>
ed in automatico avrai una pagina formata da 20 campi text.
Quando invierai la pagina otterrai una sola variabile con dentro 20 valori.
Per leggerla basterà:
$daleggere=count($vettore);
for ($q=0;$q<$daleggere;$q++){ ?>
Valore numero <?php echo($q+1);?> Valore <?php echo($vettore[$q]);?><BR>
<?php
}
?>
Prova :-))
J

 ha scritto nel messaggio
news:9vhse8$i5d$1...@nreada.inwind.it...


Dato che ti ho consigliato un sistema totalmente diverso da quello che
intendevi,
un sistema per generare variabili in runtime è:
for ($i=0;$i<50;$i++) {
$"ciao$i"=$i;
}
Questo genererà:
$ciao1=1,$ciao2=2,$ciao3=3 etc etc etc
Addirittura è possibile inserire il nome di una variabile in un'altra
variabile con $$ciao
Esempio: $$BabboNatale=5;
Se $BabboNatale="Befana" il comando scritto sopra significa:
$Befana=5;
J

Ma in quale pagina del manuale sono nascosti questi tesori? :-))
--
Ciao, Piero.
http://www.qsl.net/ik2vtj
http://www.ardf.it
Togli  /  Remove
NONVOGLIOSPAM
dall'indirizzo  /  from address
"J" <jj@thecloud.o> ha scritto nel messaggio
news:9vhtps$k5i$1...@serv1.iunet.it...


Attenzione :-)
$pippo=5;
$casa=6;
significa:
la variabile pippo punta ad una cella di memoria con dentro il valore 5.
la variabile casa punta ad una cella di memoria con dentro il valore 6.
Se scrivi
$casa=$pippo
stai dicendo: "hey tu, cella di memoria di casa, leggi il valore della cella
di memoria pippo e copiati il suo valore"
Quando tu invece dici $casa=&$pippo
stai dicendo "hey tu, cella di memoria di casa, identificati con la cella di
memoria di pippo".
In pratica nel primo caso hai due celle di memoria ben definite, una per
ogni variabile.
Nel secondo caso hai due variabili che puntano alla stessa cella di memoria.
L'esempio classico è, dopo aver fatto l'assegnamento $casa=&$pippo, provare
a cambiare il valore di $pippo. Vedrai che anche $casa cambia valore.
Esempio:
$pippo=5;    // pippo vale 5
$casa=6;     // casa vale 6
$casa=$pippo // pippo vale 5, casa vale 5
$pippo=7; //pippo vale 7, casa vale ancora 5
secondo esempio:
$pippo=5;    // pippo vale 5
$casa=6;     // casa vale 6
$casa=&$pippo // pippo vale 5, casa vale 5
$pippo=7; //pippo vale 7, anche casa ora vale 7
Ciao
J

Correzione:
dire "anche casa vale 7" è errato.
La dicitura corretta sarebbe: anche $casa punta alla cella di memoria a cui
punta $pippo, cella in cui è memorizzato il valore 7.
Quindi "$casa punta alla cella di memoria contenente il valore 7" è la
scrittura corretta. $casa vale 7 è un modo di dire formalmente scorretto.
Quando si parla di assegnamento per valore ($casa=$pippo-> si passano il
valore contenuto nella cella di memoria) o per riferimento ($casa=&$pippo->
si passano l'indirizzo della cella di memoria) la terminologia è importante
per non creare confusione.
J

Grazie a tutti per l'aiuto!
Ora ho un bel po di materiale da studiare :-)

 si passano l'indirizzo della cella di memoria) la terminologia č


 Qualche consiglio?
Allora, se il tuo problema è solo quello di inviare una serie di campi di
testo a un'altra pagina, una soluzione potrebbe essere la seguente.
Nella pagina che contiene i campi da inviare il codice PHP del form è:
<form action="form2.php" method="get">
<?php
    $tot = 5;
    $nome = "ciccio";
    $nomeCampo = array();
    for ($i = 0; $i < $tot ; $i++) {
        $nomeCampo[$i] = $nome . $i;
        echo("Campo n. " . ($i + 1) . "<input type=\"text\" name=\"" .
$nomeCampo[$i] . "\" value=\"\"><br>\n");
  }
?>
<button type="submit">invia il modulo</button>
</form>
Nella pagina che visualizza i campi ("form2.php") il codice è questo:
<?php
foreach($HTTP_GET_VARS as $key => $value)
    echo "Valore del campo $key = $value<br>\n";
?>
L'array associativo $HTTP_GET_VARS contiene tutti i campi inviati dal
modulo. Nel tuo caso - perlomeno da come lo hai presentato - non si pone il
problema di distinguere fra array di elementi (SELECT, pulsanti radio o
checkbox) e singoli campi di testo, quindi in teoria dovrebbe andarti bene
così.
Se invece il modulo include elementi multipli (come, appunto, elementi
SELECT eccetera) allora bisognerà apportare una piccola modifica allo script
della seconda pagina.
Ciao
Roberto

Elimina "$nomeCampo" dalla prima pagina (in realtà non serve), così:
<form action="form2.php">
<?php
    $tot = 5;
    $nome = "ciccio";
    for ($i = 0; $i < $tot ; $i++) {
    echo("Campo n. " . ($i + 1) . "<input type=\"text\" name=\"" . ($nome .
$i) . "\" value=\"\"><br>\n");
  }
?>
<button type="submit">INVIA</button>
Ciao
Roberto

 wrote in
news:9vhufr$fb94u$
1...@ID-83989.news.dfncis.de
: 

dal manuale php, sezione "variabili":
Variable variables
Sometimes it is convenient to be able to have variable variable names.
That is, a variable name which can be set and used dynamically. A normal
variable is set with a statement such as: 
$a = "hello";
A variable variable takes the value of a variable and treats that as the
name of a variable. In the above example, hello, can be used as the name
of a variable by using two dollar signs. i.e. 
$$a = "world";
At this point two variables have been defined and stored in the PHP
symbol tree: $a with contents "hello" and $hello with contents "world".
Therefore, this statement: 
echo "$a ${$a}";
produces the exact same output as: 
echo "$a $hello";
 
i.e. they both produce: hello world. 
In order to use variable variables with arrays, you have to resolve an
ambiguity problem. That is, if you write $$a[1] then the parser needs to
know if you meant to use $a[1] as a variable, or if you wanted $$a as the
variable and then the [1] index from that variable. The syntax for
resolving this ambiguity is: ${$a[1]} for the first case and ${$a}[1] for
the second. 
ciao

 Ma in quale pagina del manuale sono nascosti questi tesori? :-))
Ma lui aveva un problema leggermente diverso: il passaggio di nomi e vaolri
di campi di testo fra pagine, se non ho capito male :-)
Roberto

 wrote in
news:B8438FDE.5AD5%ro...@tiscalinet.it
: 

bisogna usare variabili variabili. credimi.
anziché
echo $nome.$i che stampa il valore di $nome concatenato col valore di $i:
$pippo=$nome.$i;
echo $$pippo;
cioè: se $nome è "pippo"
e lui cicla per scrivere
<input... name=pippo1>
<input... name=pippo2>
<input... name=pippo3>
facendo $nome.$i avrai "pippo1" e non $pippo1.
invece scrivendo $pippo=$nome.$i dici che $pippo vale "pippo1" e $$pippo1 
avrà il valore contenuto nella var $pippo1.
per me non c'è niente di più semplice!
ciao

 facendo $nome.$i avrai "pippo1" e non $pippo1.
Ma certo che si.
Sono io che proprio non avevo ben capito il problema posto da NEWS :-)
Ciao
Roberto

 composta da $nome e $i.
Prova questo script, magari diventa piu' chiaro...
<?
$a1 = "Ciao";
$a2 = "Hello";
$a3 = "bye";
for ($i=1; $i <=3; $i++)
        echo ${"a".$i};
?>
quindi nel tuo script: echo ${$nome.$i};