Aggiornamento di una variabile da un form

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Buongiorno,
la situazione è la seguente:
Ho una pagina generata dinamicamente che riporta un calendario di lezioni, ciascuna con relativo costo di partecipazione, pagabile con un bottone "paga subito" personalizzato di PayPal.
Ora devo aggiungere la possibilità di acquistare la lezione per più persone (attualmente si dava per scontato che ognuno acquistasse per sè).
Ho quindi aggiunto un campo al form del bottone che visualizza una casella modificabile dall'utente (che ha come valore predefinito 1) inmodo da permettere l'inserimento della quantità richiesta dal cliente finale, che cos' acquista (per esempio per sè e la fidanzata) il corso di cucina con un'unica transazione.
La pagina su cui sto lavorando è questa: www.teatro7.com/corsi_test.php, per visualizzare ciò che voglio.
Il codice del form è questo:
PHP:
<tr>
          <td width="15%">Cod. lezione: <strong><? echo $id; ?></strong></td>
          <td align="center"><strong><? echo "$weekday, $giorno"; ?></strong></td>
          <td align="center">&nbsp;</td>
          <td align="right">

            <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
              <b>Quanti posti vuoi prenotare? <input type="text" name="prenotazione" value="<?php echo $prenotazione; ?>" size="3"></b>

              <?php 
              $posti_prenotati = $prenotazione;
              $totale = ($euro * $prenotazione); 
              $dati = '{"id": ' . $id . ',"prenotazione":"' . $posti_prenotati . '"}';

              ?>
       
          </td>
          <td align="center">&nbsp;</td>
          </tr>


        <tr>
          <td>&nbsp;</td>
          <td colspan="2" class="rosso"><? echo $t7invita; ?></td>
          <td align="right">

            
               <input type="hidden" name="cmd" value="_xclick">
               <input type="hidden" name="currency_code" value="EUR" />
               <input type="hidden" name="lc" value="IT" />
               <input type="hidden" name="item_name" value="Corso <?php echo $titolo; ?> a teatro7 | Lab" />
               <input type="hidden" name="amount" value="<?php echo $totale; ?>" />
               <input type="hidden" name="business" value="xxxxxxxxxxxxxx@gmail.com" />
               <input type="hidden" name="custom" value="<? echo $dati; ?>" />
               
                <input class="rosso" type="submit" value="ACQUISTA LA LEZIONE" />
            </form>
          </td>
          <td>&nbsp;</td>
          </tr>
Il codice è distribuito su due righe della tabella che contiene i dati e dopo il campo modificabile dall'utente ho attribuito il valore inserito dall'utente a una nuova variabile $posti_prenotati, poi calcolo il totale della transazione con una semplice moltiplicazione euro * posti prenotati...
Almeno questo è il ragionamento.
Però il valore di $posti_prenotati resta sempre 1 e non si aggiorna dopo che ho scritto il nuovo valore nel form.
Dove sbaglio?
Perchè la variabile non mi si aggiorna?
Grazie
 
Secondo me dovresti fare una cosa, creare il form ed una seconda pagina a parte contenente una classe che processa i dati e invia i risultati. Non credo che php sia capace di valutare in questo modo ( "live" se così possiamo dire ) il numero indicato dall'utente nel form.

In più vedo anche che quando la pagina viene caricata, il form ha già un value che è "1". Quindi php ha già valorizzato la variabile.

Prima di adottare la soluzione indicata puoi ancora provare a fare una cosa..
Quando crei il form di inserimento lascia il value vuoto da far riempire all'utente oppure gli inserisci una cosa del genere
HTML:
<input type="number" name="points" min="0" max="100" step="1" value="1">

Dove max e min indicano il minimo e il massimo ordinabile.. step sono gli aumenti progressivi che puoi dare ovvero in questo caso una unità per volta e value è il valore di partenza assegnato a value ( che verrà modificato in base alla selezione )..

Per il funzionamento puoi dare un'occhiata qui : http://www.w3schools.com/html/tryit.asp?filename=tryhtml_input_number_step

Se devi proprio inserire un dato visibile all'interno del campo form usa il placeholder, anche qui eccoti un esempio del suo utilizzo:
http://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_input_placeholder
In questo modo al click il dato scompare e non va a impostare il value ad 1.

Ma credo che anche in questo caso comunque ci vuole una classe o una funzione che processi il tutto e poi spedisca i risultati.


Ecco qui nel tuo codice vedo questo:
PHP:
<b>Quanti posti vuoi prenotare? <input type="text" name="prenotazione" value="<?php echo $prenotazione; ?>" size="3"></b>

Dove value è assegnato.. Perchè?
 
Ultima modifica:
beh, avevo impostato value a 1 per evitare che qualcuno cliccasse sul pulsante acquista con un valore di 0... cosa che in effetti potrei fare testando il form con js prima di inviarlo...
Per il resto che mi hai suggerito, provo ad applicarlo e poi ti aggiorno.
Intanto grazie
 
Ma se usi questo ottieni lo stesso risultato con la variante che il value viene comunque impostato al momento dell'invio dei dati, non toccando nulla rimane sempre 1:

PHP:
<input type="number" name="points" min="0" max="100" step="1" value="1">

Sicuramente un controllo sul campo devi sempre farlo sia sul tipo valore numerico "intero" che sul valore >= 1, che sulla stessa presenza o meno del dato.
Saluti.

G.G.
 
Ultima modifica:
ok, con il metodo suggerito non devo pre-impostare a 1 la variabile dei posti prenotati.
Però quando eseguo
PHP:
$totale = ($euro * $posti_prenotati);
evidentemente non esegue nessuna moltiplicazione, visto che sulla pagina di pagamento di PayPal arrivo con un valore = 0.
Per recuperare il valore inserito nel form, faccio così:
PHP:
$posti_prenotati = $_GET['prenotazione'];
$totale = ($euro * $posti_prenotati);
ma credo che non sia giusto, visto il risultato...
E siccome non posso inviare a PayPal una variabile non standard, devo poi utilizzare la variabile "custom" che ho popolato con la riga successiva (devo inviare sia l'id della lezione prenotata che i posti prenotati):
PHP:
$dati = '{"id": ' . $id . ',"prenotazione":"' . $posti_prenotati . '"}';
Come mai non esegue la moltiplicazione?
 
Il motivo è lo stesso per cui prima ti leggeva il il value come 1, ed è molto semplice, php è un linguaggio server. La soluzione migliore è quella di creare un form che invia i dati ad una seconda pagina, che li processa, ( ricevendo i dati in post, metodo più sicuro ), fa le moltiplicazioni e calcolati tutti i valori invia il tutto.
Quello che cerchi di fare al momento è recuperare il valore di get nella stessa pagina, che peró riassegna a value 1 o in questo caso 0. Teoricamente c'è anche un modo per farlo eseguire nella stessa pagina. E se vuoi te lo indico pure ma non lo condivido e non lo consiglio assolutamente.


Saluti.
G.G.
 
Beh si è risolto tutto per il meglio...
Applico il tuo suggerimento per l'inserimento della quantità, con name="quantity" (che è una variabile che posso utilizzare all'interno di un bottone di PayPal) e questo mi evita di dover fare qualunque calcolo - che viene fatto sulla pagina di ingresso di PayPal - e di dover registrare più valori nella variabile "custom".
Quindi così è perfetto:
PHP:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
              <b>Quanti posti vuoi prenotare? <input type="number" name="quantity" min="0" max="100" step="1" value="1" size="3"></b>

       
          </td>
          <td align="center"><?php echo "$posti_prenotati"; ?></td>
          </tr>


        <tr>
          <td>&nbsp;</td>
          <td colspan="2" class="rosso"><? echo $t7invita; ?></td>
          <td align="right">

            
               <input type="hidden" name="cmd" value="_xclick">
               <input type="hidden" name="currency_code" value="EUR" />
               <input type="hidden" name="lc" value="IT" />
               <input type="hidden" name="item_name" value="Corso <?php echo $titolo; ?> a teatro7 | Lab" />
               <input type="hidden" name="amount" value="<?php echo $euro; ?>" />

               <input type="hidden" name="business" value="xxxxxxxxx@gmail.com" />
               <input type="hidden" name="custom" value="<? echo $id; ?>" />
               
                <input class="rosso" type="submit" value="ACQUISTA LA LEZIONE" />
            </form>

Grazie per il suggerimento che mi ha schiodato da un loop incasinato di ragionamento...
 

Discussioni simili