Newsgroup: it.comp.www.php
Titolo: Problemi con il passaggio delle variabili.

Sto studiando PHP e ho incontrato un problemino che non mi permette di
proseguire.
Probabilmente č una cosa semplic, ma la mia inesperienza non mi permette di
trovare la
soluzione.
Quindi ho creato un file HTML cosě composto :
----------------------------------------------------------------------------
------
<HTML>
<HEAD>
<TITLE>Modulo di calcolo</TITLE>
</HEAD>
<BODY>
<FORM METHOD="post" ACTION="calcolo.php">
<P>Valore n. 1: <INPUT TYPE="text" NAME="val1" SIZE=10></P>
<P>Valore n. 2: <INPUT TYPE="text" NAME="val2" SIZE=10></P>
<P>Calcolo:<br>
<INPUT TYPE="radio" NAME="calc" VALUE="addizione"> addizione<br>
<INPUT TYPE="radio" NAME="calc" VALUE="sottrazione"> sottrazione<br>
<INPUT TYPE="radio" NAME="calc" VALUE="moltiplicazione"> moltiplicazione<br>
<INPUT TYPE="radio" NAME="calc" VALUE="divisione"> divisione</P>
<P><INPUT TYPE="submit" NAME="invio" VALUE="Calcola"></P>
</FORM>
</BODY>
</HTML>
----------------------------------------------------------------------------
------
che richiama un file in PHP cosě composto :
----------------------------------------------------------------------------
------
<?
if (($val1 == "") || ($val2 == "") || ($calc =="")) {
        header("Location: 
http://localhost/calcolo_modulo.html
");
        exit;
}
if ($calc == "addizione") {
        $risultato = $val1 + $val2;
} else if ($calc == "sottrazione") {
        $risultato = $val1 - $val2;
} else if ($calc == "moltiplicazione") {
        $risultato = $val1 * $val2;
} else if ($calc == "divisione") {
        $risultato = $val1 / $val2;
}
?>
<HTML>
<HEAD>
<TITLE>Risultato del calcolo</TITLE>
</HEAD>
<BODY>
<P>Il risultato del calcolo č <? echo "$risultato"; ?></P>
</BODY>
</HTML>
----------------------------------------------------------------------------
------
Il problema č che dopo aver inserito i valori nelle casalle "val1" e "val2"
e aver selezionato
il radio buton, premo il tasto invio, ma non mi vengono dati i risultati e
si ripresenta dinuovo
il file calcolo_modulo.html.
Sembra che non venvano passate le variabili al file php.
Per quale motivo ?
Cosa devo fare per risolvere ?
Dove sto sbagliando ?
Ciao e grazie.
Enrico

Tutte le variabili "trasportate" fanno parte di un array.
Se il metodo č GET, l'array č
$_GET[""]
altrimenti
$_POST[""]
le tue variabili si chiameranno quindi
$_POST["val1"]
$_POST["val2"]
Ł_POST["calc"]
$_POST mi pare vada rigidamente maiuscolo
Ciao

Premetto che sono un novizio di PHP.
Comunque secondo il mio modesto parere, nel tuo file php.ini la 
variabile register_globals č impostata a Off, se la correggi cosě :
register_globals = On
dovrebbe funzionare tutto OK.
Ciao
Roberto

> Premetto che sono un novizio di PHP.
Per essere un novizio hai colpito nel segno, bravo e grazie.
Sono anchio in fase di studio e non avevo trovato nessun tutor che mi
dicesse di questa impostazione su php.ini.

 dicesse di questa impostazione su php.ini.
Ed era meglio non la mettessi.
Register Globals č default ad off per motivi di sicurezza.
Impostandola ad on, tutti quanti possono accedere a tutte le variabili,
il che non č sicuro.
Avresti potuto provare anche con la mia soluzione...
Ciao

 Avresti potuto provare anche con la mia soluzione...
Ok, grazie.
Ho fatto la cosa piů veloce, ma probabilmete non la migliore.
Proverň la tua soluzione e poi ti saprň dire.
Ciao

 Avresti potuto provare anche con la mia soluzione...
Devo dire che hai pienamente ragione.
Ho ripristinato il php.ini e ho adottato la tua soluzione.
Se nel file in php uso le variabili come mi hai indicato tu il tutto
funziona egregiamente.
Devo dire che la cosa mi lascia perplesso perchè ho preso l'esempio da un
libro
che ho comprato per imparare il PHP e tutti gli esempi sono fatti come li ho
postati sul
newsgroop.
E' un'errore del libro o mi sfugge qualcosa ?
Mi potresti dare delle delicidazioni sul metodo POST e GET ?
Ciao e grazie.

 
Devo dire che hai perfettamente ragione. Dopo un rapido studio 
sull'argomento trovo la tua soluzione decisamente piů sicura.
L'unica cosa che potrebbe impedire l'utilizzo della tua soluzione č la 
versione di PHP. Leggendo la documentazione ho scoperto che :
'The biggest change in PHP 4.2.0 concerns variable handling. External 
variables (from the environment, the HTTP request, cookies or the web 
server) are no longer registered in the global scope by default. The 
preferred method of accessing these external variables is by using the 
new Superglobal arrays, introduced in PHP 4.1.0.'
alla pagina
http://www.php.net/release_4_2_0.php
da questo posso desumere che se il mio server utilizza una versione 
precedente alla 4.1.0, questo sistema degli array globali non funziona?
Oppure esiste una via di uscita in modo che funzioni anche su versioni 
precedenti ?
Grazie.
Ciao
Roberto

 precedente alla 4.1.0, questo sistema degli array globali non
funziona?
Funziona ma si chiama diversamente
prima si chiamava $_HTTP_POST_VARS oppure $_HTTP_GET_VARS
ora si chama semplicemente $_GET o $_POST
La stessa cosa vale per molte altre variabili ($_SERVER, $_SESSION, ecc)
Ciao

Ovviamente se imposti Register Globals su on, gli esempi del libro
funzioneranno tutti.
Il problema è nella sicurezza, soprattutto quando cerchi di rendere un
sito più sicuro.
Nel caso di un sito amatoriale non fa differenza, ma pensa quando vuoi
proteggere un dato qualsiasi, sia anche l'email di un amico.
In genere quando entra in gioco la sicurezza, si usano le sessioni.
Le sessioni non sono altro che un codice identificativo di un client.
Ad ogni codice possono essere assegnate variabili.
Così puoi per esempio memorizzare il nome di un utente, dopo che egli lo
ha inserito in un campo.
Orbene, se tu attivi RegisterGlobals, chiunque avrà accesso a tutte le
variabili delle sessioni.
Non sto a spiegarti il perchè e percome, ma praticamente chiunque tu
sia, sei in grado di accedere a tutte le variabili.
Altro esempio classico è la sovrapposizione: se hai registerglobals, e
due utenti cercano di inserire il loro nome nel campo di prima, dato che
la variabile si chiama sempre allo stesso modo, ci sarà un conflitto.
Ovviamente l'uso del sistema globale facilita il compito, ma a scapito
della sicurezza.
In definitiva di consiglio di abituarti all'uso degli array.
Spero di essere stato abbastanza chiaro.
Ciao

Non ti ho detto cosa sono POST e GET.
Sono due metodi per "tramandare" informazioni da una pagina ad un'altra,
quando la seconda sia richiamata dalla prima.
Il metodo GET utilizza l'urlencoding, che praticamente significa
inserire i parametri nella url, cambiando i caratteri speciali (tipo lo
slash) in modo che non modifichino l'indirizzo.
Il metodo POST tecnicamente non so come funzioni, ma fa lo stesso del
GET senza usare l'url.
Per passare parametri senza che una pagina debba essere richiamata da
un'altra (quindi form) si usano le sessioni di cui ti parlavo nel
messaggio precedente.
Queste sono in grado di mantenere i valori delle variabili, fintanto che
esiste l'id di sessione, o fintanto che non scada il tempo massimo di
permanenza di una sessione.
Ciao

Ti ringrazio delle spiegazioni, mi saranno utili.
Ti vorrei chiedere, se hai un'idea, del perchè sul libro viene indicato un
metodo che non funziona.
E' un'errore del testo o sono io che sto sbaglaindo qualcosa ?
Ciao

 la variabile si chiama sempre allo stesso modo, ci sarà un conflitto.
Questo non è vero, in quanto ogni utente attiva una connessione HTTP 
differente con comunicazioni distinte tra client e server l'una dall'altra, 
indipendentemente dal fatto che si tratti di variabili di sessione o 
globali.

 metodo che non funziona.
Probabilmente perche' il libro e' stato scritto prima che venisse rilasciata
la versione 4.2.0 di php, la versione che (probabilmente) stai utilizzando.
Max
lucamax - lib...(ero) .it