Integrazione php - html

  • Creatore Discussione Creatore Discussione idkfa46
  • Data di inizio Data di inizio

idkfa46

Utente Attivo
17 Ott 2010
40
0
0
Buongiorno a tutti,
anche oggi sono qui a sottoporvi un piccolo problema...

In questi giorni ho creato un piccolo form in html+css dove l'utente può compilare svariati campi...
I valori inseriti vengono estrapolati e rimaneggiati da un file php che li utilizza per fare una serie di calcoli dai quali ottiene l'importo totale da pagare. Alla fine del php ho impostato un bottone "Paga ora" di paypal al quale viene passata la variabile $totale e inizia la procedura di pagamento...

Il tutto sembra funzionare correttamente ed ora, vorrei fare implementarlo ulteriormente!
In particolare vorrei fare in modo che al completamento del form l'utente non fosse reindirizzato sulla pagina php
ma vorrei inserire un riepilogo nella stessa pagina htlm...
Mi piacerebbe avere la pagina impostata su 2 colonne... a sinistra il form da completare e a destra il riepilogo dell'importo con il pulsante "paga ora".

Come posso ottenere un risultato simile facendo si che al completamento del form venga caricata solo la colonna destra del riepilogo?
come posso importare le variabili del php della pagina html?

Spero di essere stato sufficientemente esplicativo... se la discussione si anima poi posto il codice per entrare meglio nei particolari.

Grazie
M
 
ciao
innanzi tutto ti conviene che anche la pag che contiene il form sia php, schematicamente

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento senza titolo</title>
<!-- css -->
</head>
<body>
<?php
if(isset($_POST['Submit'])){
//raccogli i valori dei campi !!previo controlli sulla loro validità
$campo_1=$_POST['campo_1'];
//ecc....
echo "<div id=\"posto_a_Dx\">";
echo "scelto: $campo_1<br>";
//ecc...
//e qui puoi mettere la scelta
echo "confermi? SI NO";//se si mandi ad una pagina che elabora se no ritorni al form pulito, non ho messo i link
echo "</div>";
//ecc...
}
?>
<div id="posto_a_Sx">
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post">
<!-- i campi di input che ti servono -->
</form>
</div>
<!-- ... -->
</body>
</html>
per trasmettere i dati in caso di conferma forse ti conviene passarli in sessione
 
Scusa l'ignoranza ma non ho ben afferrato il concetto.

ti allego la mia situazione attuale, probabilmente lavorando sui miei file mi viene più facile...

index.html
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/layout.css">
<title>Prova Form</title>
</head>
<body>
	<h1>...</h1>
	<p>
	<form name="form" method="post" action="functions/conto.php">


	<fieldset>
	<legend>Informazioni personali </legend>

	<div>
            <label for="user">Nome <b>*</b></label>
            <input id="user" name="user">
        </div>
        <div>
            <label for="address">Email <b>*</b></label>
            <input id="address" name="address">
        </div>
	<div>
	    <label for="nazione">Nazionalità <b>*</b></label>
		<select size="1" name="nazione" >
			<option selected value="1, Italia">Italia</option>
			<option value="0, Estero">Estero</option>
		</select> 
        </div>
        <div>
            <label for="city">Città <b>*</b></label>
            <input id="city" name="city">
        </div>
        <div>
	     <label for="professione">Professione <b>*</b></label>								<select size="1" name="professione" >
			<option selected value="0.04, Azienda, 0">Azienda</option>
			<option value="0, Ingegnere, 0">Ingegnere</option>
			<option value="0, Architetto, 0">Architetto</option>
			<option value="0.04, Studente, 1">Studente</option>
			<option value="0.04, Privato, 1">Privato</option>
		</select>
        </div>

	Quantità
        <div>
	     <label for="licenze">N°Licenze <b>*</b></label>										<select size="1" name="licenze">
			<option selected>1</option>
			<option> 2</option>
			<option> 3</option>
			<option> 4</option>
			<option> 5</option>
			<option> 6</option>
			<option> 7</option>
			<option> 8</option>
 			<option> 9</option>
 			<option> 10</option>
		</select>
        </div>

        <div>
	<input type="submit" id="go" value="Conferma" />
	<p>I campi contrassegnati con <b>*</b> sono obbligatori</p>
        </div>

</form>
</body>
</html>

conto.php

PHP:
<?php

list($value, $professione, $riten) = explode(', ', $_POST['professione']);		// formato (%cnpaia; professione; 0
list($tax, $nazione) = explode(', ', $_POST['nazione']);
$n = $_POST['licenze'];

$a = 0.21;					// Imposta valore dell'IVA
$b = 0.20;					// Imposta valore della ritenuta
$prezzo1 = 350;					// Imposta prezzo base licenza
$prezzo2 = 250;					// Imposta prezzo scontato
$nsconto = 5;					// imposta numero min licenze per prezzo scontato

    if ($n >= $nsconto)
	  	{$prezzo = $prezzo2;
    }else{ 
		$prezzo = $prezzo1;}

$x		= $prezzo * $n;			// calcolo del prezzo

    if ($tax == 0)
	  	{$valuex = 0.04;
    }else{ 
		$valuex = $value;}

$cnpaia 	= $x * $valuex;			// calcolo del contributo CNPAIA

    if ($tax == 0)
	  	{$ivax = 0; $ritenutax = 0;
    }elseif ($riten == 1)
		{$ivax = $a; $ritenutax = 0; 
    }else 	{$ivax = $a; $ritenutax = $b;
		}

$iva 		= ($x+ $cnpaia) * $ivax;

$ritenuta 	= $x * $ritenutax;

$totale 	= $x + $cnpaia + $iva - $ritenuta ;

echo "Nazionalità: = $nazione <br />";
echo "Professione: = $professione <br />";
echo "Quantità: = $n <br />";
echo "Prezzo: = $x Euro<br /><br />"; 

echo "CNPAIA: = $cnpaia Euro<br />";
echo "IVA: = $iva Euro<br />";
echo "Ritenuta: = $ritenuta Euro<br />";
echo "TOTALE: = $totale Euro<br /><br />";

?> 

<form action="https://www.paypal.com/it/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="...mail...">
<input type="hidden" name="item_name" value="Nome dell'oggetto">
<input type="hidden" name="currency_code" value="EUR">
<input type="hidden" name="amount" value="<?php echo $totale; ?>">
<input type="image" src="https://www.paypalobjects.com/it_IT/IT/i/btn/btn_paynow_LG.gif" border="0" name="submit" alt="PayPal - Il sistema di pagamento online più facile e sicuro!">
</form>

concettualmente non sarebbe più facile creare un index "contenitore" di 2 colonne e includere nella colonna di sinistra il form e in quella di destra li riepilogo ?
 
Ovviamente questo presuppone che effettui la validazione dei dati nella stessa pagina del form.
Inoltre è meglio controllare il metodo della richiesta:
PHP:
if ($_SERVER['REQUEST_METHOD'] == 'POST')
Invece di:
PHP:
if (isset($_POST['Submit']))
 
ciao
a parte quello che giustamente dice alex, se vuoi che i dati che l'utente inserisce nel form appaiano come riassunto sulla destra della stessa pagina in modo che l'utente possa confermarli e annullare
per prima cosa la pagina non puo chiamarsi index.html ma deve essere index.php
ho indicato schematicamente le due colonne una con <div id="posto_a_Sx"> e una con <div id=\"posto_a_Dx\">, poi come posizioanarli devi lavorare sui css.
in quella di sx metterai il form in quella di dx ti appariranno i dati che l'utente ha scritto nel form.
considerato che i dati del form devono apparire sulla sua stessa pagina ho sostituoto l'action="functions/conto.php" con
action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" in modo che se cambi nome alla pagina (es da index.php a pag_form.php) non devi preuccuparti di modificare l'action
quindi per la parte del form (che a prima vista mi sembra ok) non devi fare altro che copiarlo (copy/paste) tra i tag form che ti avevo postato, poi per la parte php (nel div a destra) un po' di pazienza
 
grazie ad entrambi per l'aiuto...

sono riuscito a includere il form seguendo il vostro consiglio con il seguente codice:

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
		<title>Documento senza titolo</title>
		<link rel="stylesheet" type="text/css" href="css/layout.css">
	</head>
   <body>

	<?php
		if(isset($_POST['Submit'])){
				//raccogli i valori dei campi !!previo controlli sulla loro validità
		$campo_1=$_POST['campo_1'];
				//ecc....
		echo "<div id=\"posto_a_Dx\">";
		echo "scelto: $campo_1<br>";
				//ecc...
				//e qui puoi mettere la scelta
		echo "confermi? SI NO";//se si mandi ad una pagina che elabora se no ritorni al form pulito, non ho messo i link
		echo "</div>";
				//ecc...
		}
	?>


	<!-- COLONNA SINISTRA: FORM -->
	<div id="split2">
	<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post">
	<!--<form name="form" method="post" action="functions/conto.php">-->

	<fieldset>
	<legend>Informazioni personali </legend>
	<div>
            <label for="user">Nome <b>*</b></label>
            <input id="user" name="user">
        </div>
        <div>
            <label for="address">Email <b>*</b></label>
            <input id="address" name="address">
        </div>
	<div>
	    <label for="nazione">Nazionalità <b>*</b></label>
		<select size="1" name="nazione" >
			<option selected value="1, Italia">Italia</option>
			<option value="0, Estero">Estero</option>
		</select> 
        </div>
        <div>
            <label for="city">Città <b>*</b></label>
            <input id="city" name="city">
        </div>
        <div>
	     <label for="professione">Professione <b>*</b></label>								
		<select size="1" name="professione" >
			<option selected value="0.04, Azienda, 0">Azienda</option>
			<option value="0, Ingegnere, 0">Ingegnere</option>
			<option value="0, Architetto, 0">Architetto</option>
			<option value="0.04, Studente, 1">Studente</option>
			<option value="0.04, Privato, 1">Privato</option>
		</select>
        </div>
	<legend2>Quantità</legend2>
        <div>
	     <label for="licenze">N°Licenze <b>*</b></label>										
		<select size="1" name="licenze">
			<option selected>1</option>
			<option> 2</option>
			<option> 3</option>
			<option> 4</option>
			<option> 5</option>
			<option> 6</option>
			<option> 7</option>
			<option> 8</option>
 			<option> 9</option>
 			<option> 10</option>
		</select>
        </div>
        <div>
	<input type="submit" id="go" value="Conferma" />
	<p>I campi contrassegnati con <b>*</b> sono obbligatori</p>
        </div>

	</form>
	</div>

   </body>
</html>

per la parte derivante dal php, non si può procedere includendo il file che ho gia creato? come?

Grazie ancora!
 
ho fatto qualche esperimento anche con i css...
ho creato un il seguente div

div.colonna {
width: 220px;
padding: 0px 5px;
float: left;
margin: 0px;
text-align:left;
}

ho fatto un pò di prove ma... se sostituisco
echo "<div id=\"posto_a_Dx\">";
con
echo "<div class="colonna">";

ricevo sempre il seguente errore:
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in

:(
 
ho fatto un pò di prove ma... se sostituisco
echo "<div id=\"posto_a_Dx\">";
con
echo "<div class="colonna">";

mancano le \

PHP:
echo "<div class="colonna">";
echo "<div class=\"colonna\">";
nota come vengono scritte diverse
 
;) infatti come dici tu funziona...

ho provato a semplificare un attimo la parte in php per vedere come impostare l'impaginazione su 2 colonne.

riporto il codice:

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
		<title>Documento senza titolo</title>
		<link rel="stylesheet" type="text/css" href="css/layout.css">
	</head>
   <body>

	<!-- COLONNA SINISTRA: FORM -->
	<div class="colonna">
	<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post">
	<!--<form name="form" method="post" action="functions/conto.php">-->

	<fieldset>
	<legend>Informazioni personali </legend>
	<div>
            <label for="user">Nome <b>*</b></label>
            <input id="user" name="user">
        </div>
        <div>
            <label for="address">Email <b>*</b></label>
            <input id="address" name="address">
        </div>
	<div>
	    <label for="nazione">Nazionalità <b>*</b></label>
		<select size="1" name="nazione" >
			<option selected value="1, Italia">Italia</option>
			<option value="0, Estero">Estero</option>
		</select> 
        </div>
        <div>
            <label for="city">Città <b>*</b></label>
            <input id="city" name="city">
        </div>
        <div>
	     <label for="professione">Professione <b>*</b></label>								
		<select size="1" name="professione" >
			<option selected value="0.04, Azienda, 0">Azienda</option>
			<option value="0, Ingegnere, 0">Ingegnere</option>
			<option value="0, Architetto, 0">Architetto</option>
			<option value="0.04, Studente, 1">Studente</option>
			<option value="0.04, Privato, 1">Privato</option>
		</select>
        </div>
	<legend2>Quantità</legend2>
        <div>
	     <label for="licenze">N°Licenze <b>*</b></label>										
		<select size="1" name="licenze">
			<option selected>1</option>
			<option> 2</option>
			<option> 3</option>
			<option> 4</option>
			<option> 5</option>
			<option> 6</option>
			<option> 7</option>
			<option> 8</option>
 			<option> 9</option>
 			<option> 10</option>
		</select>
        </div>
        <div>
	<input type="submit" id="go" value="Conferma" />
	<p>I campi contrassegnati con <b>*</b> sono obbligatori</p>
        </div>

	</form>
	</div>


	<?php
//		if(isset($_POST['Submit'])){
		//raccogli i valori dei campi !!previo controlli sulla loro validità
		
		echo "<div class=\"colonna\">";
		
		include("functions/conto.php");

		echo "</div>";
//		}
	?>

   </body>
</html>

praticamente... come si può vedere nella parte php, commentando if(isset($_POST['Submit'])){
ottengo vedo a schermo il risultato del riepilogo prodotto da conto.php (che ho incluso)
... viceversa ottengo solo un rifresh della pagina senza nessun riepilogo :(

dove sbaglio questa volta ?

Grazie
M
 
ciao
intanto una piccola cosa
da quello che vedo stampi sulla stessa colonna
metti il form dentro il <div class="colonna">
poi quello che stampi
echo "<div class=\"colonna\">";
dovresti distinguere
per il form <div class="colonna_SX">
e quello che stampi
echo "<div class=\"colonna_DX\">";
altrimenti i due div si sovrappongono
grosso modo:

Codice:
div.colonna_SX {
width: 220px;
padding: 0px 5px;
float: left; /*questa deve stare a sinistra*/
margin: 0px;
text-align:left;
}

div.colonna_DX {
width: 220px;
padding: 0px 5px;
float: rigth;/*mentre questa deve stare a destra*/
margin: 0px;
text-align:left;
}
poi ti conviene dargli il dysplay: block; e le posizioni top e left e per vedere meglio come si posizionano, mentre provi, un background-color diverso

poi i $_POST sono nel file conto.php?
 
Eccomi ancora qua... il mio form comincia a fare progressi, potete vederlo a questo indirizzo:
www.matteomosconi.com/timber/

ho cercato di separare il codice per renderlo più semplice ed ecco cosa ho ottenuto:

index.php
in questa pagina ho deciso di separe le due colonne DX e SX
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
		<title>Documento senza titolo</title>
		<link rel="stylesheet" type="text/css" href="css/layout.css">
	</head>
   <body>

   <!-- COLONNA SINISTRA: FORM -->

	<?php
	include("form.php");
	?>

   <!-- COLONNA DESTRA: RIEPILOGO -->

	<?php
	include("riepilogo.php");
	?>

   </body>
</html>

form.php
in questa pagina ho inserito il codige che va a generare il form vero e proprio (colonna SX)
PHP:
<div class="colonna_SX">

   <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post">
   <!--<form name="form" method="post" action="functions/conto.php">-->

   <fieldset>
	<legend>Informazioni personali </legend>
	<div>
            <label for="user">Nome <b>*</b></label>
            <input id="user" name="user">
        </div>
        <div>
            <label for="address">Email <b>*</b></label>
            <input id="address" name="address">
        </div>
	<div>
	    <label for="nazione">Nazionalità <b>*</b></label>
		<select size="1" name="nazione" >
			<option selected value="1, Italia">Italia</option>
			<option value="0, Estero">Estero</option>
		</select> 
        </div>
        <div>
            <label for="city">Città <b>*</b></label>
            <input id="city" name="city">
        </div>
        <div>
	     <label for="professione">Professione <b>*</b></label>					
		<select size="1" name="professione" >
			<option selected value="0.04, Azienda, 0">Azienda</option>
			<option value="0, Ingegnere, 0">Ingegnere</option>
			<option value="0, Architetto, 0">Architetto</option>
			<option value="0.04, Studente, 1">Studente</option>
			<option value="0.04, Privato, 1">Privato</option>
		</select>
        </div>
	<legend2>Quantità</legend2>
        <div>
	     <label for="licenze">N° Licenze <b>*</b></label>						
		<select size="1" name="licenze">
			<option selected>1</option>
			<option> 2</option>
			<option> 3</option>
			<option> 4</option>
			<option> 5</option>
			<option> 6</option>
			<option> 7</option>
			<option> 8</option>
 			<option> 9</option>
 			<option> 10</option>
		</select>
        </div>
        <div>
	<input type="submit" id="go" value="Conferma" />
	<p>I campi contrassegnati con <b>*</b> sono obbligatori</p>
        </div>
   </fieldset>
   </form>
</div>

riepilogo.php
in questa pagina ho inserito il riepilogo dei dati (colonna DX) e al suo interno richiamo la funzione conto.php

PHP:
<div class="colonna_DX">

	<fieldset>
	<legend>Riepilogo </legend><div>

	<?php
//		if(isset($_POST['Submit'])){
		include("functions/conto.php");
//	}
	?>

	<div>
            <label for="user">Nome <b>:</b></label><?php echo $user; ?>
	</div>
	<div>
            <label for="address">Email <b>:</b></label><?php echo $email; ?>
	</div>
	<div>
	    <label for="nazione">Nazionalità <b>:</b></label><?php echo $nazione; ?>
	</div>
	<div>
            <label for="city">Città <b>:</b></label><?php echo $city; ?>
	</div>
	<div>
	    <label for="professione">Professione <b>:</b></label><?php echo $professione; ?>
	</div>
	<div>		        
	    <label for="licenze">N° Licenze <b>:</b></label><?php echo $licenze; ?>			        
	</div>


	<div>		        
	    <label for="licenze">Costo licenze <b>:</b></label><?php echo $x; ?>			        
	</div>
	<div>		        
	    <label for="licenze">Iva <b>:</b></label><?php echo $iva; ?>			        
	</div>
	<div>		        
	    <label for="licenze">Ritenuta <b>:</b></label><?php echo $ritenuta; ?>			        
	</div>
	<div>		        
	    <label for="licenze">TOTALE <b>:</b></label><?php echo $totale; ?>			        
	</div>


	<form action="https://www.paypal.com/it/cgi-bin/webscr" method="post">
	<input type="hidden" name="cmd" value="_xclick">
	<input type="hidden" name="business" value="mydangerousmind84@hotmail.com">
	<input type="hidden" name="item_name" value="Nome dell'oggetto">
	<input type="hidden" name="currency_code" value="EUR">
	<input type="hidden" name="amount" value="<?php echo $totale; ?>">
	<input type="image" src="https://www.paypalobjects.com/it_IT/IT/i/btn/btn_paynow_LG.gif" border="0" name="submit" >
	</form>

	</fieldset>
</div>

e per concludere allego conto.php dove vengono effettivamente effettuati i calcoli che servono per generare il riepilogo

PHP:
<?php

error_reporting (E_ALL & ~E_NOTICE);

list($value, $professione, $riten) = explode(', ', $_POST['professione']);		// formato (%cnpaia; professione; 0
list($tax, $nazione) = explode(', ', $_POST['nazione']);
$n = $_POST['licenze'];

$a = 0.21;					// Imposta valore dell'IVA
$b = 0.20;					// Imposta valore della ritenuta
$prezzo1 = 350;					// Imposta prezzo base licenza
$prezzo2 = 250;					// Imposta prezzo scontato
$nsconto = 5;					// imposta numero min licenze per prezzo scontato

    if ($n >= $nsconto)
	  	{$prezzo = $prezzo2;
    }else{ 
		$prezzo = $prezzo1;}

$x		= $prezzo * $n;			// calcolo del prezzo

    if ($tax == 0)
	  	{$valuex = 0.04;
    }else{ 
		$valuex = $value;}

$cnpaia 	= $x * $valuex;			// calcolo del contributo CNPAIA

    if ($tax == 0)
	  	{$ivax = 0; $ritenutax = 0;
    }elseif ($riten == 1)
		{$ivax = $a; $ritenutax = 0; 
    }else 	{$ivax = $a; $ritenutax = $b;
		}

$iva 		= ($x+ $cnpaia) * $ivax;

$ritenuta 	= $x * $ritenutax;

$totale 	= $x + $cnpaia + $iva - $ritenuta ;

?>

La prima cosa che mi chiedevo è... un codice impostato in questo modo si può considerare ammissibile?
come è possibile migliorarlo?

Vorrei inoltre implementarlo ulteriormente, eliminare il bottone "conferma" e far si che il riepilogo si compili automaticamente man mano che l'utente completi il form... leggendo in rete credo che la soluzione a questo problema avvenga mediante ajax + jquery ma... non sono sicuro e non saprei da che parte iniziare per implementarlo...

cosa ne dite? è fattibile?

Grazie
M
 
ciao
un paio di cose:
con IE non si vede a Sx e Dx ma sopra sotto, con firefox invece Sx e Dx: riguarda i css
metti alcuni campi come obbligatori, ma non mettendo sul tuo form il nome e/o l'email il riepilogo si vede comunque
ultimo intanto sugli input tipo text devi mettere dei filtri (non so dove vanno a finire i dati, emeil o db) ma in questo modo un utente str...o potrebbe inviarti tutte le porcherie che vuole (e a tuo danno)
 
Grazie per i consigli...
provvederò sicuramente a sistemarli... non mi sono ancora dedicato a inserire limintazioni e cambi obbligatori
in quando volevo prima far funzionare in modo corretto i dati che vanno a modificare il calcolo dell'importo e successivo pagamento.

Per quanto riguarda la compilazione del form in modo dinamico eliminando conseguentemente il bottone "conferma"
è possibile? quello che ho letto a proposito di ajax e jquery non è opportuno a risolvere questo problema?

Grazie,
M
 

Discussioni simili