PDA

View Full Version : PHP e register_globals


stef78g
08-08-2003, 11:31
Apro questa discussione per cercare di capire una cosa che fin'ora mi ha fatto dannare!

SCUSATE SE IL POST E' LUNGO, VOLEVO CERCARE DI SPIEGARMI, CERCATE DI LEGGERLO PER INTERO NON E' DI DIFFICILE COMPRENSIONE

Sto cercando di muovere i primi passi in php, sto utilizzando il libro PHP4 Guida per lo sviluppatore (http://www.hoepli.it/editore/home_editrice.asp?categoria=vh) , (cliccate e cercate il titolo fra Linguaggi e programmazione) qualcuno lo conosce o lo usa o lo ha usato in passato?

Se qualcuno ha due minuti di tempo da dedicarmi provi per cortesia a lanciare il seguente programma:

<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD=GET ACTION="text.php">
Scrivi qualcosa qui:
<INPUT NAME="author" TYPE="TEXT">
<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>

salvato come text.html
e poi il seguente:

<HTML>
<HEAD></HEAD>
<BODY>
Il testo scritto è:
<?php
echo $author;
?>
</BODY>
</HTML>

salvato come text.php

Questo programma è banalissimo ma non funziona, almeno non sul mio pc! Prima di consigliarmi di seguire le istruzioni per installare un webserver sul mio pc o di seguire passo passo quello scritto in questo o quell'altro sito, vorrei che provaste a far girare sul vostro pc questo codice che ho postato!

Nel file .php uso una variabile "author" della quale ne voglio il valore $author. Tale file .php viene aperto quando si clicca sul pulsante submit grazie alla seguente riga messa nel primo file text.html:

<FORM METHOD=GET ACTION="text.php">

il metodo usato è GET ed effettivamente in coda all'indirizzo del secondo file (.php) si legge ?author="testo immesso nella casella di testo del primo file", la variabile viene cioè attaccata correttamente alla coda dell'indirizzo della pagina aperta, ma non viene però poi visualizzata nella finestra aperta! Compare infatti la scritta:

Il testo scritto è:

senza quindi il valore della variabile author!

In sostanza il secondo file (.php) utilizza una variabile (variabile author) il cui valore viene assegnato nel primo file (.html). Da quello che ho capito in questi giorni, per poter far funzionare questo esempio bisogna settare su on il register_globals:

register_globals=on

nel file php.ini che solitamente si trova nella directory c:\windows. Questo è anche scritto all'ultima pagina del primo capitolo nel mio libro, potete trovare il formato pdf cliccando qui (http://www.hoepli.it/editore/hoepli_file/download_pub/88-203-2919-0_PHP%20Cap%2001.pdf). Vorrei precisare che nel mio caso è stata segiuta l'installazione di Internet Information Server seguendo pari pari i passi presenti su questo capitolo (io uso Windows XP e ho seguito i passi presenti per Windows 2000 che comunque credo siano corretti perchè infatti non ho problemi con il webserver ma con l'installazione php).
Il fatto è che questo registro io l'ho settato proprio su on, ma ugualmente il programma non funziona!! Ho provato ad installare varie versioni di php: 4.0.2, 4.2.3, 4.3.2 ma non ho ottenuto risultati utili!!

Volevo che qualcuno provasse a farlo girare per vedere se è un problema della mia installazione! O se qualcuno mi sapesse dire qualcosa in più sul parametro register_globals!

Ho scaricato i codici sorgente di tutti gli esempi presenti nel mio libro e ho provato ad eseguirne due o tre. La maggior parte degli esempi usa proprio queste variabili globali e quindi la maggior parte di questi esempi non funziona!!!

Aprendo il file php.ini ho poi in un secondo momento letto questa cosa:

; - register_globals = Off [Security, Performance]
; Global variables are no longer registered for input data (POST, GET, cookies,
; environment and other server variables). Instead of using $foo, you must use
; you can use $_REQUEST["foo"] (includes any variable that arrives through the
; request, namely, POST, GET and cookie variables), or use one of the specific
; $_GET["foo"], $_POST["foo"], $_COOKIE["foo"] or $_FILES["foo"], depending
; on where the input originates. Also, you can look at the
; import_request_variables() function.
; Note that register_globals is going to be depracated (i.e., turned off by
; default) in the next version of PHP, because it often leads to security bugs.
; Read http://php.net/manual/en/security.registerglobals.php for further
; information.

In sostanza se ho capito bene si dice che questo registro è meglio settarlo su off per questioni di sicurezza e che nelle prossime versioni di php tale registro non esisterà più proprio per migliorare la sicurezza del linguaggio!! MA ALLORA IO STO STUDIANDO SU UN LIBRO CHE FA DEGLI ESEMPI SCORRETTI E IN UN PROSSIMO FUTURO NON UTILIZZABILI oppure sono solo un po' in paranoia? :muro: :muro:

AIUTATEMI PLEASEEEEEEEEEEEEEEEE!! :cry: :cry: :( :cry: :cry:

stef78g
08-08-2003, 22:03
UPPETE!! :)

cisc
09-08-2003, 15:20
In sostanza se ho capito bene si dice che questo registro è meglio settarlo su off per questioni di sicurezza e che nelle prossime versioni di php tale registro non esisterà più proprio per migliorare la sicurezza del linguaggio!! MA ALLORA IO STO STUDIANDO SU UN LIBRO CHE FA DEGLI ESEMPI SCORRETTI E IN UN PROSSIMO FUTURO NON UTILIZZABILI



esatto!!!!!!!!!!!!!
al posto di $author usa $_GET['author'], infatti dalle nuove versioni di php dovresti usare gli array $_GET, $_POST ecc.

stef78g
09-08-2003, 17:05
Grazie della risposta prima di tutto!!

Ho provato ad usare la funzione che mi hai detto tu, il codice del secondo esempio ora è il seguente:

<HTML>
<HEAD></HEAD>
<BODY>
Il testo scritto è:
<?php
$_GET["author"];
?>
</BODY>
</HTML>

ma lanciando il primo file non ci sono variazioni rispetto al comportamento avuto in precedenza! Non funziona, ho provato anche le virgolette singole all'intenro della parentesi, ma non ho risolto nulla!

Forse ho sbagliato ad utilizzare la funzione GET (che non conosco)!?!

stef78g
09-08-2003, 17:12
Ho provato anche così:

<HTML>
<HEAD></HEAD>
<BODY>
Il testo scritto è:
<?php
echo $_GET['author'];
?>
</BODY>
</HTML>

ma non riesco a farlo funzionare!!!!! :muro: :muro: :muro:

Apofis
09-08-2003, 22:45
devi scrivere

echo $_GET["author"];

doppie apici nn singole! ;)

stef78g
10-08-2003, 21:03
Ho provato anche con le virgolette aperte e chiuse: ""!

Ma non funziona ugualmente!! :muro: :muro:

Eppure in coda all'indirizzo del secondo file c'è la variabile con il valore corretto!! Non capisco dove sia il problema!! Dovrebbe funzionare!!

:cry: :cry:

cisc
11-08-2003, 13:57
<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD=GET ACTION="text.php">
Scrivi qualcosa qui:
<INPUT NAME="author" TYPE="TEXT">
<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>



devi scrivere method="get"

stef78g
11-08-2003, 20:35
Niente, non funziona!!!

Ma a voi funziona, vorrei sapere questo!! :)

cisc
13-08-2003, 17:10
devi scrivere anche <input type="submit">

stef78g
13-08-2003, 18:10
Allora per non fare confuzione posto il codice così come è adesso!

Primo file:
<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD="get" ACTION="text.php">
Scrivi qualcosa qui:
<INPUT NAME="author" TYPE="TEXT">
<BR>
<BR>
<INPUT TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>

Secondo file:
<HTML>
<HEAD></HEAD>
<BODY>
Il testo scritto è:
<?php
echo $_GET["author"];
?>
</BODY>
</HTML>

Così come è scritto a me non funziona!! C'è qualcuno a cui funziona? Se sì, allora significa che evidentemente il mio problema è nell'installazione di php sul mio pc!

A qualcuno funziona scritto così come è?

stef78g
14-08-2003, 21:18
UPP!!
:)

VICIUS
15-08-2003, 22:28
ho fatto un copia e incolla del codice in due file e tutto funziona perfettamente.

ciao ;)

stef78g
16-08-2003, 09:39
Grazie mille .. volevo sentire proprio questo!!

Significa che la procedura di installzione che ho fatto seguendo le istruzioni del libro non va bene, almeno per la versione di php che ho scaricato io e per il sistema operativo che utilzzo!! Proverò a fare una nuova installazione!!

Grazie a tutti!!! :)

stef78g
18-08-2003, 20:43
Per mancanza di tempo non ho potuto ancora provare ad installare nuovamente PHP sul mio pc, intanto volevo chiedere a qualcuno un consiglio per un buon manuale!

:) :)