PDA

View Full Version : Problema PHP



[Crilin]
5th October 2005, 13:11
Non riesco a venire a capo di questo problema... Premetto che tutto ciò mi serve per passare un valore tra due pagine (un ID di una determinata riga di tabella presa da un DB in SQL).
Nella pagina da cui devo estrapolare l'informazione da mandare all'altra pagina il codice è questo:



while ( $valori = mysql_fetch_array($result) )
{
if($cnt<5)
{
echo" <tr> ";
echo" <td bgcolor='#FFE991'><div align='center'><span class='style16'>$valori[data] <a href='mostra_evento.php?indice=$valori[0]' target='_self' class='aLink style17 style18'>$valori[titolo]</a></span></div></td> ";
echo" </tr> ";
echo" <tr> ";
echo" <td bgcolor='#FFFFFF'><div align='center'><font color='#FFFFFF'>.</font><span class='style16'></span></div></td> ";
echo" </tr> ";
$cnt++;
}
} }


Premetto che su questa pagina funziona tutto, infatti, quando vado con il mouse sul link, in basso a sinistra mi compare esattamente il link che dovrebbe apparire (es: 'mostra_evento.php?indice=2, o 'mostra_evento.php?indice=3).

Il problema si pone sull'altra pagina (mostra_evento.php) perchè, quando provo ad usare la variabile $indice non la riconosce, quando provo a stamparla non la stampa.
Quel valore mi serve per poter fare la query al DB:



$query = "SELECT * FROM eventi WHERE id='$indice'";


Probabilmente mi son spiegato male, spero che qualcuno capisca comunque e mi risponda, grazie in anticipo! :scratch:

Alkabar
5th October 2005, 13:50
']Non riesco a venire a capo di questo problema... Premetto che tutto ciò mi serve per passare un valore tra due pagine (un ID di una determinata riga di tabella presa da un DB in SQL).
Nella pagina da cui devo estrapolare l'informazione da mandare all'altra pagina il codice è questo:



while ( $valori = mysql_fetch_array($result) )
{
if($cnt<5)
{
echo" <tr> ";
echo" <td bgcolor='#FFE991'><div align='center'><span class='style16'>$valori[data] <a href='mostra_evento.php?indice=$valori[0]' target='_self' class='aLink style17 style18'>$valori[titolo]</a></span></div></td> ";
echo" </tr> ";
echo" <tr> ";
echo" <td bgcolor='#FFFFFF'><div align='center'><font color='#FFFFFF'>.</font><span class='style16'></span></div></td> ";
echo" </tr> ";
$cnt++;
}
} }


Premetto che su questa pagina funziona tutto, infatti, quando vado con il mouse sul link, in basso a sinistra mi compare esattamente il link che dovrebbe apparire (es: 'mostra_evento.php?indice=2, o 'mostra_evento.php?indice=3).

Il problema si pone sull'altra pagina (mostra_evento.php) perchè, quando provo ad usare la variabile $indice non la riconosce, quando provo a stamparla non la stampa.
Quel valore mi serve per poter fare la query al DB:



$query = "SELECT * FROM eventi WHERE id='$indice'";


Probabilmente mi son spiegato male, spero che qualcuno capisca comunque e mi risponda, grazie in anticipo! :scratch:


eh le variabili hanno il loro scope, fai conto che da una pagina all'altra sia tabula rasa ok ? Sempre. ora se ti vuoi passare una variabile da una pagina all'altra hai 3 modi :

Serializzi la variabile e fai una var di sessione, te la passi con post, te la passi con get.

nel primo caso devi poi settare accuratamente il php.ini perchè da quel che ricordo ci sono dei problemi, ad ogni modo lo fai con le variabili di session

(ora io sono un po' antiquato ma register globals non mi piace)

$HTTP_SESSION_VARS[];

oppure credo $_SESSION[] ...

nel secondo caso devi avere un form che gestisca l'evento post e usi

$HTTP_POST_VARS per riprendere il valore dai campi che ti interessano (i campi intendo quelli in html)

oppure $_POST

nel terzo la variabile la metti direttamente nel link all'altra pagina :

decifra da qui:

"<a href=VisualizzaSchedePerCategoria.php?numero=$coun ter&Pagine=$Pagine&NumeroCategoria=$NumeroCategoria>$VarVis</a>"


e poi recuperi quello che ti serve con

$SARCAZZILIQUEDACE = $HTTP_GET_VARS["numero"]

$SARCAZZILIQUEDACE = $HTTP_POST_VARS["numero"]

$SARCAZZILIQUEDACE = $HTTP_SESSION_VARS["numero"] .


Nel caso delle variabili di sessione, quando le setti li restano fino a che non ci riscrivi sopra :

$HTTP_SESSION_VARS['id]=$id;

poi ci puoi accedere da ogni pagina il valore rimane quello per tutta la sessione.

Direi che dovresti essere a posto.

EDIT: non si sa mai, ma preferisco specificare che questi tre affari ($HTTP_SESSION_VARS; $HTTP_POST_VARS .... ecc) sono dei vettori e dentro ai vettori ci metti quello che ti serve .

San Vegeta
5th October 2005, 14:24
esistono due metodi più semplici:
1 - crei una variabile statica (non ho mai provato ma mi pare che continui a esistere finchè non la si elimina esplicitamente)
(edit) no, non è vero, non funziona. Però sono sicuro di aver letto un metodo per creare variabili che restano nella memoria del webserver, senza appoggiarsi alla sessione.

2 - passi la variabile all'altro script tramite l'url, come si passano tutte le variabili..

[Crilin]
5th October 2005, 14:41
Grazie mille per le risposte, soprattutto ad Alkabar che si è lanciato in una spiegazione chilometrica!! Ho apprezzato :D

Cmq ho risolto. Praticamente ho lasciato tutto come stava, con la differenza che, nella seconda pagina (quella in cui mi serviva il dato della prima insomma), ho dovuto aggiungere:

$indice=$_GET['indice'];

che, da quanto ho capito, serve per recuperare la variabile. In realtà non ho capito bene come funziona... per ora mi basta sapere che funziona cmq! :)

Grazie ancora!! ;)

San Vegeta
5th October 2005, 16:51
$_GET è l'array di sistema che memorizza tutti i parametri passati col metodo GET

il metodo GET consiste nel passare parametri nell'url
esempio
pippo.php?nomevariabile1=valore1&nomevariabile2=valore2
in $_GET[nomevariable1] ci sarà valore1 e in $_GET[nomevariable2] ci sarà valore2

il metodo POST consiste nel passare dati tramite pacchetti separati, per cui nell'url non si vedrà nulla
similmente nell'array $_POST ci saranno i dati inviati, con leggere differenze nel caso si sia postato uno o più file.

$_GET e $_POST vengono resettati ad ogni esecuzione di uno script php, per cui la permanenza dei dati memorizzati in precedenza non è garantita a meno di passarli ad ogni esecuzione

[Crilin]
5th October 2005, 19:33
$_GET è l'array di sistema che memorizza tutti i parametri passati col metodo GET

il metodo GET consiste nel passare parametri nell'url
esempio
pippo.php?nomevariabile1=valore1&nomevariabile2=valore2
in $_GET[nomevariable1] ci sarà valore1 e in $_GET[nomevariable2] ci sarà valore2

il metodo POST consiste nel passare dati tramite pacchetti separati, per cui nell'url non si vedrà nulla
similmente nell'array $_POST ci saranno i dati inviati, con leggere differenze nel caso si sia postato uno o più file.

$_GET e $_POST vengono resettati ad ogni esecuzione di uno script php, per cui la permanenza dei dati memorizzati in precedenza non è garantita a meno di passarli ad ogni esecuzione

Ah, perfetto: molto chiaro!!
Grazie della spiegazione... ;)

Alkabar
5th October 2005, 20:30
esistono due metodi più semplici:
1 - crei una variabile statica (non ho mai provato ma mi pare che continui a esistere finchè non la si elimina esplicitamente)
(edit) no, non è vero, non funziona. Però sono sicuro di aver letto un metodo per creare variabili che restano nella memoria del webserver, senza appoggiarsi alla sessione.

2 - passi la variabile all'altro script tramite l'url, come si passano tutte le variabili..


1) Le variabili di sessione, l'ho scritto con $_SESSION o $HTTP_SESSION_VARS. Oppure register globals, ma è insicuro ed essendo tale non mi sono mai preoccupato di usarlo. Le var di sessione, oppure anche i cookie, sono simili a variabili globali.

2) $HTTP_GET_VARS serve per recuperare dall'url il valore della variabile.

$_GET e $_POST sono versioni più recenti di $HTTP_POST_VARS e $HTTP_GET_VARS .

$var = $_GET['NomeVar'] è relativamente insicuro

meglio $var = $_SESSION['NomeVar']

se vedono il nome delle tue variabili sei in potenziale pericolo, non è paranoia.

Ricorda inoltre, se gli utenti del tuo sito possono inserire dei dati, di utilizzare l'apposita funzione per impedire che i tag html vengano riconosciuti, la dove i contenuti cambiano dinamicamente.

Jarsil
6th October 2005, 15:11
Anche io come Alka prediligo la creazione di una $_SESSION e quindi l'utilizzo delle variabili legate alla sessione: prima di tutto perché sono persistenti, e quindi le utilizzi dove e quanto vuoi nel sito, secondo perché sono piu' sicure, essendo agganciate alla sessione, non c'è rischio che siano provenienti da pc diversi da quello che ha aperto la sessione stessa.

San Vegeta
6th October 2005, 18:20
Se vuoi porcheggiare con le variabili non devi per forza manovrare quelle del computer di un altro, basta aprire una sessione col sito