PDA

View Full Version : Problema con PHP e form HTML


gabriele81
16-02-2004, 18:00
Ho una pagina html in cui c'è una form fatta così:

<form name="f4" action="prova.php" method=post>
<input type="submit" name="b" value="Visualizza">
<input type="hidden" name="tipo" value="numero">
<input type="text" name="num">
</form>

Visto che sono alle prime armi col php ho fatto una prova per vedere se funziona il passaggio dei parametri, quindi ho scritto un file prova.php stupidissimo che stampa a video quello che riceve:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Documento senza titolo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body><?php
if (isset($tipo)){
echo $tipo;
}
else {
echo "In tipo non c'è niente";
}
if (isset($num)){
echo $num;
}
else {
echo "In num non c'è niente";
}
?>
</body>
</html>

Se apro il file html che contiene la form, riempio il campo num e premo il bottone "visualizza" la pagina php parte correttamente, solo che non riesce a leggere i parametri, infatti va sempre nel ramo else (mi stampa nella pagina "In tipo non c'è nienteIn num non c'è niente"). Non legge nemmeno il campo hidden il cui valore l'ho impostato io.
Che ho sbagliato? Qual'è il giusto metodo per leggere i parametri? E' corretto creare nel file php delle variabili con lo stesso nome dei parametri della form?
Magari è un problema di configurazione del server? Ho installato Apache 1.3.29 e PHP 4.3.4, leggendo qualche guida in rete sono riuscito a configurare il tutto, infatti file php che non richiedono l'interazione con form girano benissimo, c'è qualcosa da impostare anche in questo caso?

zUmBo!
16-02-2004, 18:07
:O e semplicissimo ragazzo!

questo è il codice sche scrivi tu:

<form name="f4" action="prova.php" method=post>
<input type="submit" name="b" value="Visualizza">
<input type="hidden" name="tipo" value="numero">
<input type="text" name="num">
</form>

il problema sta nell'ordine delle cose:

tu devi porre prima:
<input type="text" name="num">

poi:
<input type="hidden" name="tipo" value="numero">

e poi...
<input type="submit" name="b" value="Visualizza">

altrimenti quelle variabili non te le beccherà maiiiiii!!!

ok?

il SUBMIT sempre alla fine del form prima di </form>

ciao

gabriele81
16-02-2004, 18:33
Nada...:muro:

Ho riordinato i parametri come mi avevi consigliato:

<form name="f4" action="prova.php" method=post>
<input type="text" name="num">
<input type="hidden" name="tipo" value="numero">
<input type="submit" name="b" value="Visualizza">
</form>

ma non cambia niente...sempre lo stesso problema...

zUmBo!
16-02-2004, 18:42
Originariamente inviato da gabriele81
Nada...:muro:

Ho riordinato i parametri come mi avevi consigliato:

<form name="f4" action="prova.php" method=post>
<input type="text" name="num">
<input type="hidden" name="tipo" value="numero">
<input type="submit" name="b" value="Visualizza">
</form>

ma non cambia niente...sempre lo stesso problema...

il form sembra corretto...

perchè non mi posti anche il codice di prova.php???

gabriele81
16-02-2004, 18:47
Originariamente inviato da zUmBo!
perchè non mi posti anche il codice di prova.php???

Già fatto...sta nel primo post ;)

khamel
16-02-2004, 19:26
un'idea forse stupida e un'altra meno :
1- prova a mettere tra "" anche post
es.
<form ..ecc.. method="post">
2- prova con questa sintassi :
prima di
if isset($tipo)
mettici una riga fatta cosi :
$tipo=$_REQUEST['tipo'];

Se per caso va il problema sta nel tuo file di configurazione del modulo php su apache (php.ini), ci dovrebbere essere una riga che dice una cosa simile a RAW_POST_DATA .. (scusa ma in questo pc non ho php installato e non posso postarti la riga giusta...), devi settare quel valore a true e riavviare apache, poi dovrebebe andare

gabriele81
16-02-2004, 20:13
Originariamente inviato da khamel
un'idea forse stupida e un'altra meno :
1- prova a mettere tra "" anche post
es.
<form ..ecc.. method="post">
2- prova con questa sintassi :
prima di
if isset($tipo)
mettici una riga fatta cosi :
$tipo=$_REQUEST['tipo'];

Se per caso va il problema sta nel tuo file di configurazione del modulo php su apache (php.ini), ci dovrebbere essere una riga che dice una cosa simile a RAW_POST_DATA .. (scusa ma in questo pc non ho php installato e non posso postarti la riga giusta...), devi settare quel valore a true e riavviare apache, poi dovrebebe andare

FUNZIONA CON LA SECONDA!!! Avevo già provato a mettere gli apicetti a post ma non era cambiato niente. Invece ho messo la riga che hai detto per entrambi i parametri e li ha letti tutti e due! Ora vado a spulciarmi il php.ini. Quindi devo cambiare il valore nell'ini e poi posso ritogliere le due righe che ho aggiunto, giusto?

gabriele81
16-02-2004, 20:50
Nel php.ini ho trovato questo:

; Always populate the $HTTP_RAW_POST_DATA variable.
; always_populate_raw_post_data = On

Ho tolto il ; alla seconda riga, quindi ora è così:

; Always populate the $HTTP_RAW_POST_DATA variable.
always_populate_raw_post_data = On

Ho chiuso e riavviato apache, ho pure riavviato il computer, ma non cambia nulla, se tolgo le righe $tipo=$_REQUEST['tipo']; e $num=$_REQUEST['num']; torna tutto come prima...

P.S. il php.ini sta nella directory c:\windows, va bene? penso di si altrimenti non funzionerebbe niente...

cionci
16-02-2004, 20:58
Originariamente inviato da gabriele81
Ho chiuso e riavviato apache, ho pure riavviato il computer, ma non cambia nulla, se tolgo le righe $tipo=$_REQUEST['tipo']; e $num=$_REQUEST['num']; torna tutto come prima...
Infatti quelle righe ci devono stare... I parametri passati tramite POST vanno a finire nel vettore associativo $_POST... Quelle passate con GET vanno a finire nel vettore associativo $_GET... Tutte le veriabili passate con GET e POST si trovano nel vettore associativo $_REQUEST...

Il modo che usi tu per leggere i parametri (cioè una variabile definita autoamaticamente con lo stesso nome del parametro) è OBSOLETO...

gabriele81
16-02-2004, 21:38
Originariamente inviato da cionci
Infatti quelle righe ci devono stare... I parametri passati tramite POST vanno a finire nel vettore associativo $_POST... Quelle passate con GET vanno a finire nel vettore associativo $_GET... Tutte le veriabili passate con GET e POST si trovano nel vettore associativo $_REQUEST...

Il modo che usi tu per leggere i parametri (cioè una variabile definita autoamaticamente con lo stesso nome del parametro) è OBSOLETO...

Ammazza, ho appena cominciato col php e già faccio cose obsolete!:p
Strano, in tutti gli esempi che ho visto non c'erano quelle righe, ma direttamente le variabili con il nome uguale a quello dei parametri...forse non ho cercato attentamente...

Grazie a tutti per l'aiuto!

cionci
16-02-2004, 21:42
Complimenti per la firma ;)
Io l'ho vista cantare dal vivo Journeyman :)

gabriele81
16-02-2004, 21:47
Originariamente inviato da cionci
Complimenti per la firma ;)
Io l'ho vista cantare dal vivo Journeyman :)

Invece la tua è il ritornello di "The Prisoner", giusto?;)


Tornando al php, ora che ci penso le righe tipo
$tipo=$_REQUEST['tipo'];
non sono la stessa identica cosa che
String tipo = (String) request.getParameter("tipo");
per le JSP? Infatti pur conoscendo un pò le JSP non riuscivo a capire bene il funzionamento del php...certo, mancava un pezzo!

cionci
16-02-2004, 22:06
Sì...è "The Prisoner" ;)

Comunque è la stessi indentica cosa del JSP...oppure del Request("tipo") di ASP...