alfredom15 (Normal User)
Newbie
Messaggi: 12
Iscritto: 01/03/2014
|
Salve , sono un ragazzo di 19 anni con la passione per la programmazione , e dopo aver approfondito il c++ , il basic e il java, da poco mi sono affacciato al mondo del php. Ora mi e' sorto un problema quasi banale : ho tre pagine in php , la prima fa inserire un numero cui la pagina dopo troviamo N textbox quante il numero scritto in precedenza. Ora dentro queste textbox autogenerate va inserito un valore che verrà richiamato nella pagina 3.
Siccome le textbox potrebbero anche essere 1000, come faccio ad evitare di scrivere tutto il codice a mano , ma bensì inserire in un ciclo che ad esempio attribuisca una variabile incrementata (non so se sia possibile , per questo chiedo) finchè non si raggiunge il numero delle textbox (ad esempio :
Codice sorgente - presumibilmente PHP |
<?php $a="a"; $cont=0; do { $a=$_POST[$(nome textbox)] $a++; $cont++ $(nome textbox)++; } while(cont <= $(numero inserito all' inizio)
|
Ecco il codice che utilizzo adesso
Codice sorgente - presumibilmente Plain Text |
<?php
session_start();
if($_SESSION['primo']=1)
{
$a = $_POST['a'];
}
if($_SESSION['primo']=2)
{
$a = $_POST['a'];
$b = $_POST['b'];
}
if($_SESSION['primo']=3)
{
$a = $_POST['a'];
$b = $_POST['b'];
$c = $_POST['c'];
}
if($_SESSION['primo']=4)
{
$a = $_POST['a'];
$b = $_POST['b'];
$c = $_POST['c'];
$d = $_POST['d'];
}
if($_SESSION['primo']=5)
{
$a = $_POST['a'];
$b = $_POST['b'];
$c = $_POST['c'];
$d = $_POST['d'];
$e = $_POST['e'];
}
ECC ECC
|
Spero di essere stato chiaro , e grazie in anticipo. |
|
GN (Member)
Guru
Messaggi: 772
Iscritto: 30/04/2011
|
Se ho capito bene cosa intendi fare, io farei così (senza ricorrere alle sessioni):
pagina1.php:
Codice sorgente - presumibilmente Plain Text |
<form method="GET" action ="pagina2.php">
Numero:<input name="n" type="text">
<input type="submit" value="Avanti"></input>
</form>
|
pagina2.php:
Codice sorgente - presumibilmente Plain Text |
<form method="POST" action="pagina3.php">
<?php
for($i=0; $i < $_GET['n']; $i++){
echo '<input name="' + $i + '" type="text">';
}
?>
<input type="submit" value="Avanti"></input>
</form>
|
pagina3.php:
Codice sorgente - presumibilmente PHP |
<?php foreach($_POST as $i => $valore){ //qui puoi eseguire le operazioni, $valore è l'$i-esimo valore inserito. } ?>
|
|
|
alfredom15 (Normal User)
Newbie
Messaggi: 12
Iscritto: 01/03/2014
|
Il codice funziona bene, grazie mille.
Ora però ho un problema : Volendo moltiplicare i valori dentro le text ho fatto cosi'
Codice sorgente - presumibilmente PHP |
foreach($_POST as $i => $valore){ $ris=$ris*$valore; echo "<br>$ris"; //qui puoi eseguire le operazioni, $valore è l'$i-esimo valore inserito. }
|
(Ho messo l' echo per capire meglio l' errore)
Alla fine del calcolo mette sempre uno 0 finale , annullando l' operazione stessa.
Codice sorgente - presumibilmente Plain Text |
(es. 2
4
8
16
32
64
128
256
512
1024
0)
|
Come posso risolvere? grazie ancora per l' aiuto.
Se invece metto l' operatore "+" mi ripete l' ultimo numero
Codice sorgente - presumibilmente Plain Text |
(es.3
5
7
9
11
13
15
17
19
21
23
25
25)
|
Ultima modifica effettuata da alfredom15 il 03/03/2014 alle 12:10 |
|
Uno sciame di API (Member)
Pro
Messaggi: 66
Iscritto: 10/07/2012
|
Forse perché non assegni un valore a $ris (che quindi vale 0) quando moltiplichi la variabile $ris per $valore.
Prova, prima del ciclo foreach, a scrivere:
Codice sorgente - presumibilmente Plain Text |
Ciao
|
|
alfredom15 (Normal User)
Newbie
Messaggi: 12
Iscritto: 01/03/2014
|
No , purtroppo il problema me lo da con la variabile già settata a
$ris=1;
Grazie lo stesso
|
|
Qwertj (Dev Team)
Guru
Messaggi: 678
Iscritto: 30/05/2011
|
Stai iterando su $_POST, probabilmente c'è una chiave a cui corrisponde un valore non numerico che casta a 0 quando lo converti
Non iterare direttamente su $_POST.
Codice sorgente - presumibilmente Plain Text |
$i = 0;
while(isset($_POST[++$i])) {
//htmlspecialchars() filtra quei caratteri che potrebbero essere intepretati come HTML (<,>, &, ecc...)
echo "nella casella di testo $i hai scritto " . htmlspecialchars($_POST[$i]);
}
|
Una cosa più sensata sarebbe settare name negli <input> come se fossero elementi di un array
Codice sorgente - presumibilmente Plain Text |
<form method="POST" action="pagina3.php">
<?php
for($i=0; $i < $_GET['n']; $i++){
echo '<input name="textbox[' + $i + ']" type="text">';
}
?>
<input type="submit" value="Avanti"></input>
</form>
|
PHP interpreta automaticamente questa notazione e la converte in un array i cui elementi sono i valori dei <input>
Codice sorgente - presumibilmente Plain Text |
//primo elemento
$_POST["textbox"][0];
//secondo elemento
$_POST["textbox"][1];
//ecc..
|
Quindi il codice di sopra diventerebbe
Codice sorgente - presumibilmente Plain Text |
$i = 0;
while(isset($_POST["textbox"][++$i])) {
echo "nella casella di testo $i hai scritto " . htmlspecialchars($_POST["textbox"][$i]);
}
|
|
|
alfredom15 (Normal User)
Newbie
Messaggi: 12
Iscritto: 01/03/2014
|
Grazie per l' aiuto , ora è perfetto , ho fatto una semplice modifica dal tuo codice:
Così come l' hai scritto tu creava tante text quante scritte dall' utente ,però nel momento della stampa dei valori (dato che i=0) escludeva la prima textbox , allora ho risolto in questo modo .
DA
Codice sorgente - presumibilmente Plain Text |
for($i=0; $i < $_GET['n']; $i++){
|
A
Codice sorgente - presumibilmente Plain Text |
for($i=1; $i <= $_GET['primo']; $i++){
|
Grazie mille |
|
alfredom15 (Normal User)
Newbie
Messaggi: 12
Iscritto: 01/03/2014
|
Ora mi e' sorto un dubbio , se io all' inizio inserisco due text di acquisizione , in cui la prima mi genera una textbox , e il secondo , una coppia di textbox (es. alla prima l' utente scrive 5 , e alla seconda 3 , vengono create 5 textbox + 3 coppie (quindi 6) di textbox) , ho provato ad usare due indici per il ciclo con questa istruzione (inizia da "seconda acquisizione") però mi ripete due volte il comando.
Codice sorgente - presumibilmente Php |
//***************************************PRIMA ACQUISIZIONE *************************************** if ($_GET['primo'] > 0) { echo "<hr>"; for($i=1; $i <= $_GET['primo']; $i++){ echo "Inserisci il $i valore della fissa<br>"; echo '<input name="valorea['.$i.']" type="text" value="1.00"><br>'; } } elseif($_GET['primo'] ==0) {} else { echo "Inserisci un valore corretto.<br>"; } //**********************************SECONDA ACQUISIZIONE *************************************** if ($_GET['secondo'] > 0) { echo "<hr>"; for($j=1; $j<= $_GET['secondo']; $j++){ for($i=1; $i <= $_GET['secondo']; $i++){ echo "Inserisci i valori della $i doppia <br> "; echo '<input name="valoreb['.$i.']" type="text" value="2.00"><br>'; echo '<input name="valoreb['.$j.']" type="text" value="3.00"><br>'; } } } elseif($_GET['secondo'] ==0) { } else { echo "Inserisci un valore corretto.<br>"; }
|
Ad esempio se inserisco 2 alla prima text e 2 alla seconda mi esce quori questo :
Codice sorgente - presumibilmente Plain Text |
Inserisci il 1 valore della fissa
[textbox]
Inserisci il 2 valore della fissa
[textbox]
Inserisci i valori della 1 doppia
[textbox]
Inserisci i valori della 2 doppia
[textbox]
Inserisci i valori della 1 doppia
[textbox]
Inserisci i valori della 2 doppia
[textbox]
|
Come posso risolvere? Ultima modifica effettuata da alfredom15 il 04/03/2014 alle 13:02 |
|
Qwertj (Dev Team)
Guru
Messaggi: 678
Iscritto: 30/05/2011
|
Perchè parti da 1? In PHP (e circa in ogni linguaggio di programmazione), gli array sono 0-based
In quanto al secondo problema... Perchè iteri due volte su $_GET['secondo']? Così scrivi N^2 <input>!
Io avrei scritto molto semplicemente
Codice sorgente - presumibilmente Php |
//prima acquisizione if ($_GET['primo'] > 0) { echo "<hr>"; for($i = 0; $i <= (int)$_GET['primo']; ++$i) { echo "Inserisci il $i valore della fissa<br>", '<input name="valorea[', $i, ']" type="text" value="1.00"><br>'; } } elseif((int)$_GET['primo']) { //valuta a vero se != da zero echo "Inserisci un valore corretto.<br>"; } //seconda acquisizione if ((int)$_GET['secondo'] > 0) { echo "<hr>"; for($i = 0; $j <= (int)$_GET['secondo']; ++$j){ echo "Inserisci i valori della $i doppia <br> ", '<input name="valoreb[',$i,'][0]" type="text" value="2.00"><br>', '<input name="valoreb[',$i,'][1]" type="text" value="3.00"><br>'; } } elseif((int)$_GET['secondo']) { //valuta a vero se != da zero echo "Inserisci un valore corretto.<br>"; }
|
Gli <input> "doppi" sono a loro volta array, che puoi accedere poi come un array qualsiasi
Altrimenti vai a sovrascrivere altri valoreb[$i] e viene fuori un caos assurdo e grazie che non funziona nulla
(Hai fatto un corso per indentare il codice così? )
|
|