Newsgroup: it.comp.www.php
Titolo: Somma variabili da form

Ciao a tutti,
vi dico qual'è il problema che non riesco a risolvere:
Una pagina php mi genera una lista di righe in una tabella con delle voci,
ognuna delle quali ha un campo di tipo checkbox che contiene il prezzo.
Il checkbox ha come id l'id del record e come valore quello assegnato in
fase di inserimento del record.
Quello che vorrei è che il valore dei checkbox selezionati vengano sommati
per darmi il totale, magari inviando le variabili ad un'altra pagina php.
Come fare?
Grazie per ogni eventuale suggerimento.
Ciao.
Francesco.

 Come fare?
nella pagina del form
<form action=calcola.php method=post>
<input type=checkbox name=listaspesa[] value='40,23'>
<input type=checkbox name=listaspesa[] value='51.25'>
<input type=checkbox name=listaspesa[] value='9.69'>
<input type=checkbox name=listaspesa[] value='8.43'>
</form>
una riga per ogni prezzo da selezionare
nella pagina seguente
<?
$listaspesa = HTTP_POST_VARS[$listaspesa];
foreach ($listaspesa as $oggetto) {
    $somma = $somma + $oggetto;
}
print "In totale hai speso $somma";
?>
Bada però che questa soluzione non trasporta alcuna informazioni su quali
siano gli oggetti da acquistare.
Il mio consiglio è quello di trasmettere alla pagina il codice del prodotto
da acquistare e di fare estrarre il prezzo dal database nella pagina che
compie il calcolo.
Considera anche che se metti i prezzi nell'html tutti quelli un po' scafati
potranno mettere trasmettere ordini per 0,01 ? semplicemente trasmettendo
alla tua pagina di calcolo un post con i prezzi scelti a piacere.

     $somma = $somma + $oggetto;
forse č meglio cosě:
array_sum($_POST['listaspesa'])
stefano

 alla tua pagina di calcolo un post con i prezzi scelti a piacere.
Scusa Asso, ma come è possibile? Non che voglia conoscere il "trucco",
anzi, se sei certo che esista ti prego di non farne accenno, credo sia
proprio meglio. 
La mia domanda è un'altra e attiene - casomai - alla possibilità di
stare tranquilli qualora si presenti un'esigenza analoga a quella di
Tastaglione. 
Se nell'html ho il checkbox col suo valore, il method è post, nella
pag.php che elabora i dati metto un bel REQUEST_METHOD == 'POST'
(intendo prima di eleborarli, ed eventualmente per rifiutarne
l'elaborazione), sei sicuro che lo scafato di turno riesca ad aggirare
l'ostacolo?
Vorrei solo lavorare serena :)
-- 
Nicoletta

 ha scritto nel messaggio
news:EWUGc.5106$tj3.2...@news3.tin.it...


 come var visualizzare solo gli id selezionati? 
Non capisco bene il problema.
<form action="<?php print ($_SERVER['PHP_SELF']); ?>" method="post">
<input name="id[1]" type="checkbox" value="1" />
<input name="id[2]" type="checkbox" value="1" />
<input name="id[3]" type="checkbox" value="1" />
<input name="id[4]" type="checkbox" value="1" />
<input name="id[5]" type="checkbox" value="1" />
<input type="submit" value="Invia" />
</form>
<pre>
<?php 
	print_r ($_POST); 
	if (isset ($_POST['id'])) {
		foreach ($_POST['id'] as $key => $value) {
			print ("Chiave $key, valore $value \r\n");
		}
	}
?></pre>
oppure
<form action="<?php print ($_SERVER['PHP_SELF']); ?>" method="post">
<input name="id[]" type="checkbox" value="1" />
<input name="id[]" type="checkbox" value="2" />
<input name="id[]" type="checkbox" value="3" />
<input name="id[]" type="checkbox" value="4" />
<input name="id[]" type="checkbox" value="5" />
<input type="submit" value="Invia" />
</form>
<pre>
<?php 
	print_r ($_POST); 
	if (isset ($_POST['id'])) {
		foreach ($_POST['id'] as $key => $value) {
			print ("Chiave $key, valore $value \r\n");
		}
	}
?></pre>
a seconda se hai la necessita' di passare 2 valori per ogni checkbox.
P.S.
Please 
http://wiki.news.nic.it/QuotarBene
-- 
I am what I am, I do what I can
L'uomo, conscio di sbagliare, persevera.

 l'ostacolo?
Quello che dico è che non ci si può fidare di ricevere i prezzi dal form, in
quanto il metodo di trasmissione è ben visibile nel codice sorgente della
pagina.
Facciamo conto che tu mi devi spedire un Renoir e che il prezzo te lo fai
inviare da un form così.
<form action="acquista.php" method="post">
<input type=hidden name=prezzo value=1000000>
<input type=submit value=acquista>
Il codice html del tuo form è perfettamente visibile facendo
Visualizza->HTML dal browser. Quindi ora so come tu ricevi le informazioni
sul prezzo della merce da spedire.
Cosa mi impedisce di scrivere un form identico al tuo e di azionarlo dal mio
desktop, sostituendo il valore di un milione con 10 euro?
Questo discorso vale per un sacco di altri esempi. I dati segreti o quelli
che non vogliamo siano modificabili dall'utente non devono essere messi
dentro ai form.

 desktop, sostituendo il valore di un milione con 10 euro?
Io sapevo che i dati di un form (con method post) non vengono accettati
se la pagina d'invio non è sullo stesso dominio di quella ricevente.
Ecco perché non capivo. Del resto non ho mai fatto esperimenti in
merito, mi fidavo di un'informazione letta su qualche manuale e presa
per buona. Evidentemente era poco buona :)
E di una protezione di questo tipo che ne pensi?
$url_R="form.htm";
$url_A="http://". $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF'])
. "/" . $urlR;
if ($_SERVER['HTTP_REFERER'] == $url_A) { 
// lavoro, altrimenti no
Non badare a possibili errori sintattici, parlo di sostanza. Ritieni che
il furbacchione sappia far fronte anche a questo? (La domanda è rivolta
a tutti, naturalmente). Se mi dite di sì mi metto a piangere ;-)
-- 
Nicoletta

 Ritieni che il furbacchione sappia far fronte anche a questo? 
Si, e comunque:
[quoto 
http://www.php.net/manual/en/reserved.variables.php
]
'HTTP_REFERER'
The address of the page (if any) which referred the user agent to the
current page. This is set by the user agent. Not all user agents will
set this, and some provide the ability to modify HTTP_REFERER as a
feature. In short, it cannot really be trusted.
[/quoto]


 Si, e comunque:
Maremma! Non c'è verso di stare tranquilli. L'unica sembra davvero
quella suggerita da Asso: usare i dati dell'html solo per mostrarli
all'utente, per il resto servirsi di un database.
Alla prossima :)
-- 
Nicoletta

 a tutti, naturalmente). Se mi dite di sě mi metto a piangere ;-)
Quella del REFERER č una informazione che il browser invia assieme alla
richiesta HTTP. Come tale puň essere emulata.
Cioč con un semplice header() di php posso far credere al tuo server che la
pagina sia stata caricata da un'altra pagina del tuo sito.
La morale č: non fidarti mai di ciň che ti arriva via HTTP, anche se ce
l'hai messo tu pochi attimi prima.