Newsgroup: it.comp.www.php
Titolo: form

ciao,
ho bisogno di aiuto!!!
ho creato una form che mi visualizza la classe di prodotti e la lista
dei prodotti di appartenenza alla classe con un ciclo while.
E fin qui tutto ok.
Per ogni proddotto ho un campo input per inserire la quantità che il
cliente deve comprare del proddotto.
A questo punto devo fare l'inserimento nel db ma non ci riesco.
Devo prendere TUTTI i prodotti la cui quantità <>0 ma mi prende solo
l'ultimo!!!
Per ogni proddotto esiste un id univoco.
Aiutatemi!!!!
GRAZIE

l'ultimo!!!
Ciao,
ci posti il sorgente HTML del form e il php che processa il form?
Grazie,
-- 
ff
www.fabiofidanza.com
 

IL PROBLEMA è che non mi prende tutte le quantità!!!
Io ho bisogno di fare l'inserimento di prodotti e relative quantità!!!
GRAZIE
questo è il codice per la form in cui visualizzo i prodotti:
$out .="<tr>
       <td align=\"justify\">
	<form action=\"catalogo2_pwd.php\" method=\"post\" >
		<table>
		   <tr>
		   <td class=\"testo\">descrizione prodotto</td>
		   <td class=\"testo\">quantità</td>
		</tr>
	<tr><td>&nbsp;</td></tr>";														$query=mysql_query ("SELECT
prodotto
				FROM classe_prodotti
				WHERE id_classe=1");												$row =
mysql_fetch_array($query);													$out .= "<tr><td
class=\"testo3\">$row[prodotto]</td></tr>";			$query=mysql_query
("SELECT id id_pr, nome
			FROM prodotti
		               WHERE id_classe=1");					while($row =
mysql_fetch_array($query))					  {$out .= "<tr>
		  	<td class=\"testo3a\">";
		//classe di appartenenza
		$out .= "<input type=\"hidden\" name=\"id_classe\" value=\"1\">";
		//id_prodotto e nome
		$out .= "<input type=\"hidden\" name=\"id_pr\"
value=\"$row[id_pr]\">$row[id_pr]--$row[nome]</td>";
																//quantita
            $out .= "<td>
<input type=\"text\" size=\"8\" class=\"testo3a\" maxlength=\"4\"
name=\"quantita\"></td>
		   </tr>";}
poi la pagine di destinazione è:
$out ="";
    $out.="<table width=\"748\" align=\"center\">
        		<tr>
			<td align=\"justify\">
			<form action=\"catalogo\">
		<table align=\"justify\">";
																	$id = $HTTP_GET_VARS["id"];
									$id_pr = $row["id_pr"];
									echo "prodotto: $id_pr<br>";
									$quantita = $row["quantita"];
									echo "quantita: $quantita<br>";
									$query = "INSERT INTO ordini
										(id_cliente,
										 nome,
										 quantita,
										 note)
									  VALUES (
										'$id',
										'$id_pr',
										'$quantita',
										'NULL')";
							//print($query);   //debug
if(!mysql_query($query,$db)){
								print("Attenzione, impossibile inserire il record");
print "mysql_errors($query)";
	print "mysql_errors($db)";
		}else{
								print "";
							}
Fabio Fidanza ha scritto:


$out .= "<input type=\"hidden\" name=\"id_pr\"
mi sembra che tu generi per ogni riga un input sempre con lo stesso nome 
'id_pr'.
Questo fa si che l'altra pagina non riceva tutti gli id (idem per le 
quantita).
Dovresti dare ad ogni input un nome che comprente il codice del prodotto:
$id_pr = $row['id_pr']
"<input type=\"hidden\" name=\"id_$id_pr\"
Idem per le quantità.
Nella pagina che elabora dovresti quindi ciclare l'array $_REQUEST
alla ricerca dei campi che iniziano per "id_", prelevarne il suffisso (che è
il codice del prodotto) e recuperare i campi "quantita_".suffisso che 
contengono
le quantità relative.
Spero di aver compreso il tuo problema, altrimenti delucidami meglio.
-- 
ff
www.fabiofidanza.com
 

HO FATTO:
$out .= "name=\id_pr$id_pr"...
name=\"quantita$qu"....
e va tutto ok
passo i valori come?
come faccio adesso a fare il ciclo con i suffissi? non sono molto
brava!! :(
GRAZIE SEI MOLTO GENTILE
Fabio Fidanza ha scritto:


come faccio adesso a fare il ciclo con i suffissi? non sono molto
ad occhio, quindi controlla la sintassi:
foreach ($_REQUEST as $nome => $valore) {
    if ( substr($nome,0,3) == 'id_pr') {
        $idProdotto = substr($nome,3);
        $quantita = $_REQUEST['quantita'.$idProdotto];
        // elaborazione dei dati
    }
}
--
ff
www.fabiofidanza.com
 

Allora:
ho scritto il tuo codice ma non mi valorizza nè l'id, nè la
quantità!!
gli id ad es. sono 1, 2, 3 perchè nella table è autoincrement
Fabio Fidanza ha scritto:


scusami.... dopo il foreach, non entra nell'if... va nell'else dove per
prova ho scritto 1 parola
Fabio Fidanza ha scritto:


 questo è il codice per la form in cui visualizzo i prodotti:
...
Prima cosa: usa var_dump. Nella pagina che deve inserire scrivi:
?><pre><?php var_dump( $_REQUEST ); ?></pre><?
ti aiutera a renderti conto di cosa viene passato.
Secondo:
$out .= "<input type=\"hidden\" name=\"id_pr\"
value=\"$row[id_pr]\">$row[id_pr]--$row[nome]</td>";
è errato, perchè ogni input successivo sovrascriverà il primo.
Cioè, se guardi il sorgente della pagina html troverai un
<input type="hidden" name="id_pr" value=".."> per ogni prodotto, vuol dire  
che avrai molti campi "id_pr" e come è semplice capire si sovrascriveranno  
a vicenda.
inserisci prima del ciclo:
$counter = 0;
inserisci all'inizio del ciclo:
$counter++;
cambia il name di tutti gli hidden relativi ai prodotti così:
$out .= "<input type=\"hidden\" name=\"prodotto[$counter][id_pr]\"
value=\"$row[id_pr]\">$row[id_pr]--$row[nome]</td>";
Nella pagina che legge il $_POST o il $_REQUEST arrivera una variabile  
$_REQUEST['prodotti'] che sarà, giustamente, un array. Cicla su di esso  
per inserire.
foreach ( $_REQUEST['prodotti'] as $prodotto )
{
      $query = "INSERT INTO nometabella set id_pr='$prodotto['id_pr']  
.......";
	//... resto del codice
}
Tac
-- 
Using Opera's revolutionary e-mail client: 
http://www.opera.com/mail/