Newsgroup: it.comp.www.php
Titolo: Validazione Form - Redirigire $_POST in header(location: pippo.php)

salve ragazzi.
forse sto percorrendo la strada sbagliata e quindi mi sto creando un problema che non
esiste.
devo inserire dei dati un db e voglio che il form html venga validato prima di passare i
dati a mysql.
potrei usare js per validare il form, ma visto che non tutti hanno js, preferisco php.
così ho messo action="check.php" nel tag form
e nel check.php dopo tutti i contolli, se vengono tutti superati, c'è header(location:
inserimento.php)
inserimento.php è lo script che inserisce i dati nel db.
questo script legge con $_POST['nome_input_del_form'] i vari dati da infilare nel db e
funziona bene a patto che gli si diano le variabili di cui a bisogno.
e qui casca l'asino. header(location: url) non redirige l'insieme delle variabili
contenute in $_POST !
so che potrei fare qualcosa con GET mettendo nell'url di location le oppurtune
valorizzazioni delle variabili, ma mi pare alquanto bovino, oltre che limitato nel numero
di caratteri.
come si fa a passare $_POST tramite location (se è possibile)?
oppure, che strategia avrei dovuto usare per validare il form?
grazie a tutti
roberto
-------------------------------------------------------------
tutto ciò che ho scritto è sempre In My Humble Opinion (IMHO)
probabilmente l'ho scritto di fretta, quindi scusate se sono stato sbrigativo.

 come si fa a passare $_POST tramite location (se č possibile)?
Non si puo'.
Struttura in modo diverso l'applicazione, ad esempio inserisci la
validazione all'interno del file inserimento.php
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

validazione all'interno del file inserimento.php
cosě ho fatto!
avevo visto questo fatto del location in un tutorial, che evidentemente non era un granchč
...
buona notte
roberto
-------------------------------------------------------------
tutto ciň che ho scritto č sempre In My Humble Opinion (IMHO)


 roberto
ciao
Alesi_27

 non era un granchè ...
il tutorial non sbagliava, credo...
*dopo* aver fatto tutte le operazioni necessarie (validazione ed eventuale
accettazione dei dati) si fa un bel "salto" a un'altra pagina (magari
condizionale all'esito dell'operazione), soprattutto per impedire che
l'utente, "refreshando" la pagina, duplichi l'inserimento dei dati
-- 
<franco abitante>
# 
http://franco.abitante.name
# Jabber: 
conne...@jabber.linux.it
# ICQ: 41628503

 
Ops :), hai pienamente ragione...
Nella classe che sto implementando ciò non avviene perchè il forwarding
è simulato tramite redirect e variabile di sessione, quindi effettivamente
la pressione del tasto aggiorna non avviene sullo stesso url ma su quello
impostato nel redirect.
Ciao.

 
Se ho inteso bene il problema:
puoi sfruttare questa classe di pear
http://pear.php.net/manual/en/package.http.http-request.php
per inviare dati POST ad un nuovo script.
-- 
        C                     F
  per fortuna il mio razzismo non mi fa guardare
          C                        F
  quei programmi demenziali con tribune elettorali

 applicare alla lettera il pattern MVC.
Allora a cosa dovrebbe servire la variabile di sessione?


> Allora a cosa dovrebbe servire la variabile di sessione?
Per simulare il meccanismo di forwarding, visto che in php
non è supportato lo si può simulare tramite sessioni e redirect,
o meglio questa è l'idea che ho avuto io.

 basarti sull'HTTP, per questa tua scelta vedi il mio primo commento.
Per forwarding intendo la possibilità di "girare" una richiesta http
(e tutti le variabili passate via get o post) ad un'altro script
senza eseguire il redirect.
Chiaramente tale funzionalità non è offerta dal php mentre java invece
permette di fare ciò. La mia proposta quindi vuole rispondere alla domanda:
"Come simulare il meccanismo di forwarding in php?"
Ciao.

 nella variabile di sessione.
IMHO e' tanta fatica inutile.
Perche' centralizzare la verifica dell'input quando ci sono situaziokni
in cui il controllo va fatto in relazione a dati presenti in risorse di
vario genere (es. db o fs)? Rischi solamente di duplicare codice ed
appesantire il sistema.
A quel punto e' meglio creare un framework che gestisca tutto ma nella
stessa richiesta HTTP senza "forward" HTTP od altro.


 header(location: inserimento.php)
Non usare una pagina di "check", ma vai subito alla pagina di inserimento
dati nel db. In questa stessa pagina, prima che i dati vengano inseriti nel
db, vengono controllati. In presenza di errori, fai un header location alla
pagina del form indicando l'errore (passando l'argomento errore tramite
GET).
-- 
Ciao,
 Fabrizio
=== 
http://www.negusweb.it
 ===

 
Certo, ma concettualmente sono cose diverse un include che
genera la vista e un forward ad uno script che genera la vista.
Pensa alla pressione del tasto aggiorna: nel caso dell'include viene
di nuovo eseguita la logica di business contenuta nel controllore
e poi viene generata la vista, mentre nel caso del forward viene
solo eseguito il codice relativo alla generazione della vista.
Non è una critica è solo che il pattern MVC funziona in un
determinato modo e il php,o meglio i server web su cui esso poggia, non
hanno le caratteristiche utili per implementare tale pattern.
Da qui l'idea di implementare un workaround (in php) per gestire la cosa.
Ciao.

 solo eseguito il codice relativo alla generazione della vista.
Ne sei davvero sicuro? Se il forward viene fatto lato server, premendo
il tasto aggiorna viene eseguita una nuova richiesta HTTP da cui una
nuova invocazione del controller etc. etc.
-- 
I am what I am, I do what I can


 Chiaramente tale funzionalità non è offerta dal php 
Mai provato a fare un include?
-- 
I am what I am, I do what I can


 Struttura in modo diverso l'applicazione
Cosa ne pensate di questo:
- una classe per gestire i forward
- quando viene eseguito il forward gli array $_GET, $_POST e $_FILES
vengono memorizzati in una variabile di sessione.
- all'inizio di ogni script un semplice test per capire se si tratta
di forward o di richiesta diretta, nel caso di forward gli array
$_GET, $_POST, $_FILES vengono settati in base ai valori presenti nella
variabile di sessione.
Saluti.

 appesantire il sistema.
Sono d'accordo su quanti hai detto, però ci tengo a precisare che la mia
idea era nata per simulare quello che tradizionalmente
viene fatto in java ovvero il forwarding (cosa diversa dal redirect).
L'utilità di tale soluzione consiste principalmente nel poter applicare
alla lettera il pattern MVC.
Saluti.
Ciao.

 non è supportato lo si può simulare tramite sessioni e redirect,
Definisci "forwarding". Se usi le sessione ed il redirect allora vuoi
basarti sull'HTTP, per questa tua scelta vedi il mio primo commento.
In PHP l'implementazione piu' semplice del "forwarding" MVC-style e'
l'include/require.
-- 
I am what I am, I do what I can


l'utente, "refreshando" la pagina, duplichi l'inserimento dei dati
hai ragione! è una funzione molto utile! 
io invece avevo messo un link a mano verso la home.
immagino ci sia pure un timeout impostabile.
o al massimo faccio un while sul timestamp ... grazie della
precisazione, cmq nel tutorial, che era molto breve, non si faceva
accenno alla esecuzione di alcuna query di inserimento.
vabbe' ...

per inviare dati POST ad un nuovo script.
per ora ho risolto validando all'interno della pagina di inserimento
usando una "bovna" catena di if
la cosa non č un granchč perchč se aggiungo un campo devo aggiungere
un if ma per ora la controllo bene.
ho visto delle cose piů elaborate, ma in OO e qui maneggio poco la
teoria, quindi rimango al mio caro if then else e poi un giorno chi sa
... mi orienterň agli oggetti ...
grazie

GET).
interessante .
sembra qualcosa del tipo:
c'è un errore -> riempio una certa componente di un vettore errroi[ ]
e redirigo alla pagina di inserimento aggiungendo un GET nell'url.
la pagina di inserimento avrà dei controlli sul vettore di errori e
magari sceglie uno stile css differene per i nomi dei campi affetti da
errore ... (con un if messo ad hoc)
era forse questa la strategia che ho trovato nei tutorial
sull'argomento? (dove però non si capiva un h grazie a tanto bel
codice senza uno straccio di commento)
insomma mi chiedo se quello che ho descritto può essere un modo di
lavorare, e se si tratta di una soluzione abbastanza standard da
essere dexcritta nei tutorial ...
grazie

 errore ... (con un if messo ad hoc)
Io uso 2 metodi:
1) invio tramite GET direttamente la descrizione dell'errore
2) invio tramite GET il codice dell'errore.
Di solito preferisco la seconda perchè almeno non implica un indirizzo
troppo lungo. 
Mi basta un 
header("Location: /index.php?err=203");
per esempio.
Ovviamente nella pagina index.php ci sarà un array del tipo
$arr_errori=array("descrizione errore n.1",
    "descrizione errore n.2",
   ...
   ...
   );
