Oppure

Loading
01/03/14 9:32
alfredom15
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 :

<?php
session_start();
$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


<?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.
aaa
01/03/14 13:05
GN
Se ho capito bene cosa intendi fare, io farei così (senza ricorrere alle sessioni):
pagina1.php:
<form method="GET" action ="pagina2.php">
  Numero:<input name="n" type="text">
  <input type="submit" value="Avanti"></input>
</form>

pagina2.php:
<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:
<?php
foreach($_POST as $i => $valore){
  //qui puoi eseguire le operazioni, $valore è l'$i-esimo valore inserito.
}
?>
aaa
03/03/14 10:54
alfredom15
Il codice funziona bene, grazie mille.

Ora però ho un problema : Volendo moltiplicare i valori dentro le text ho fatto cosi'
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.

(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

(es.3
5
7
9
11
13
15
17
19
21
23
25
25) 
Ultima modifica effettuata da alfredom15 03/03/14 11:10
aaa
03/03/14 12:42
Uno sciame di API
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:
$ris=1;

Ciao :)
aaa
03/03/14 15:17
alfredom15
No , purtroppo il problema me lo da con la variabile già settata a
$ris=1;

Grazie lo stesso :)
aaa
03/03/14 16:20
Qwertj
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. :nono:
$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
<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>
//primo elemento
$_POST["textbox"][0];
//secondo elemento
$_POST["textbox"][1];
//ecc..

Quindi il codice di sopra diventerebbe
$i = 0;
while(isset($_POST["textbox"][++$i])) {
    echo "nella casella di testo $i hai scritto " . htmlspecialchars($_POST["textbox"][$i]);
}
aaa
03/03/14 19:17
alfredom15
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

  for($i=0; $i < $_GET['n']; $i++){

A
 for($i=1; $i <= $_GET['primo']; $i++){


Grazie mille :k:
aaa
04/03/14 12:01
alfredom15
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.

  //***************************************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 :

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 04/03/14 12:02
aaa