PDA

View Full Version : [PHP] come realizzare ciò?


D4rkAng3l
29-11-2008, 13:45
Ciao,
qualcuno mi aiuta a chiarirmi un attimo le idee su questa cosa: devo realizzare ciò:
Ci sono 3 pagine web: A, B e C

La pagina A contiene un form, l'utente compila tale form e quando invia i dati essi vengono inviati ad una pagina B ma all'utente deve essere visualizzata la pagina C e non deve visualzzare la pagina B.

cosami invento? (Conosco pochissimo php)

Grazie
Andrea

vizzz
29-11-2008, 14:48
Ciao,
qualcuno mi aiuta a chiarirmi un attimo le idee su questa cosa: devo realizzare ciò:
Ci sono 3 pagine web: A, B e C

La pagina A contiene un form, l'utente compila tale form e quando invia i dati essi vengono inviati ad una pagina B ma all'utente deve essere visualizzata la pagina C e non deve visualzzare la pagina B.

cosami invento? (Conosco pochissimo php)

Grazie
Andrea

la pagina B quando finisce di fare quello che deve fare chiama la funzione "header".

header('Location: C.php')

codcata
29-11-2008, 15:01
ma header() e' diversa da include()? cioe', fa la stessa cosa?

cionci
29-11-2008, 15:04
ma header() e' diversa da include()? cioe', fa la stessa cosa?
No, assolutamente non c'entra niente. header aggiunge appunto un header alla risposta http, in questo caso invita il browser ad andare a caricare la pagina C.php

codcata
29-11-2008, 15:13
uh :doh:

D4rkAng3l
29-11-2008, 16:57
ragazzi, allora io ho realizzato queste 3 pagine:

paginaA che contiene il form ed invia i dati con POST a pagina B:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>

<form name="datiUtenti"action="paginaB.php" method="POST">

<label>Dato 1: <input type="text" name="dato1" value="tuo testo"></label><br /><br />
<label>Dato 2: <input type="text" name="dato2" value="tuo testo"></label><br /><br />
<label>Dato 3: <input type="text" name="dato3" value="tuo testo"></label><br /><br />

<button type="submit">Invia i dati</button>


</form>

</body>
</html>


Poi c'è PaginaB che riceve i dati da Pagina A e fà un'elaborazione (non conoscendo bene PHP ho usato la echo anche se non dovrebbe stampare nulla ma solo elaborare dei dati senza visualizzare nulla).
A questo punto all'utente non dovrebbe essere visualizzata PaginaB ma PaginaC...ho inserito l'header come mi era stato detto ma non funziona


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>
<?php
header('Location: paginaC.html');
echo "Il dato 1 vale: $_POST[dato1] <br>";
echo "Il dato 1 vale: $_POST[dato2] <br>";
echo "Il dato 1 vale: $_POST[dato3] <br>";


?>

</body>
</html>


e paginaC che dovrebbe essere aperta dopo che paginaB ha ricevuto ed elaborato i dati:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>

<H1>PAGINA C DOVE L'UTENTE VIENE RIMANDATO DOPO AVER COMPILATO IL FORM NELLA PAGINA A ED AVER INVIATO I DATI ALLA PAGINA DI ELABORAZIONE B</H1>
</body>
</html>


Dopo aver inviato i dati a paginaB mi viene dato questo output che è errato:


Warning: Cannot modify header information - headers already sent by (output started at c:\programmi\easyphp1-8\www\formtest\paginab.php:9) in c:\programmi\easyphp1-8\www\formtest\paginab.php on line 10
Il dato 1 vale: tuo testo
Il dato 1 vale: tuo testo
Il dato 1 vale: tuo testo

Cosa devo fare? come risolvo? please è urgente

Grazie
Andrea

cionci
29-11-2008, 17:06
Il motivo è che hai già fatto un output, header lo puoi usare solo prima di qualsiasi output (tutto l'html che hai stampato prima del tag di php).
La struttura della pagina deve essere:

<?php
/*elaborazione dati del form*/
...
...
...
header('Location: paginaC.html');
?>

D4rkAng3l
29-11-2008, 17:11
Il motivo è che hai già fatto un output, header lo puoi usare solo prima di qualsiasi output (tutto l'html che hai stampato prima del tag di php).
La struttura della pagina deve essere:

<?php
/*elaborazione dati del form*/
...
...
...
header('Location: paginaC.html');
?>


mmm ho fatto come dici te,ma mi dà il seguente warning e non và su paginaC.html

Warning: Cannot modify header information - headers already sent by (output started at c:\programmi\easyphp1-8\www\formtest\paginab.php:9) in c:\programmi\easyphp1-8\www\formtest\paginab.php on line 12

codice:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>
<?php
/* Elabrazione dei dati del form */

header('Location: paginaC.html');
?>

</body>
</html>


Come mai? da che dipende?

Grazie
Andrea

D4rkAng3l
29-11-2008, 17:14
doh sul mio server web su Aruba funziona, in locale con easyphp no...strano...why?

cionci
29-11-2008, 17:16
Non devi mettere questo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>


Quello è un output e non devi fare un output prima di header !!!

D4rkAng3l
29-11-2008, 17:18
Non devi mettere questo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>


Quello è un output e non devi fare un output prima di header !!!

capito...ma perchè su Aruba funziona lo stesso?

cionci
29-11-2008, 17:23
capito...ma perchè su Aruba funziona lo stesso?
Probabilmente avranno attivato qualche opzione che bufferizza l'output prima di spedirlo al client. Ad esempio su hosting Windows con IIS dovrebbe avvenire di default.

D4rkAng3l
29-11-2008, 17:31
ok c'è un problema...la persona che mi ha chiesto il favore di farlgi questo accrocchio mi ha appena detto che l'equivalente pratico di paginaB non può toccarla...quindi il sistema dell'header che rimanda a PaginaB non è usabile...
c'è una qualsiasi soluzione (anche javascript) che sia proprio PaginaA a mandare a PaginaC dopo aver inviato i dati a PaginaB?

c'è soluzione o non se ne esce?

Grazie
Andrea

cionci
29-11-2008, 17:40
Non che mi risulti...

Torav
30-11-2008, 00:47
puoi fare diverse cose "sporche" se proprio non puoi mettere header prima di qualsiasi output come diceva cionci:

1) Puoi dare un <body onload="window.location='paginaC.html'"> nella pagina B, in questo modo non appena avrà finito di fare la roba php e avrà caricato B ti rimanderà direttamente a C

2) Puoi mettere un <meta http-equiv="Refresh" content="5; url=paginaC.html">, che ti manderà a C dopo 5 secondi (puoi cambiare il 5 con qualsiasi numero tu voglia). Questo è MOLTO deprecato e non dovrebbe essere utilizzato se proprio non è necessario

cionci
30-11-2008, 08:43
Però la 2 non ti garantisce il completo caricamento della pagina. In ogni caso ha detto che non può modificare la pagina B, quindi è un problema ;)

CozzaAmara
30-11-2008, 10:59
Come non detto.

Torav
30-11-2008, 12:42
Però la 2 non ti garantisce il completo caricamento della pagina. In ogni caso ha detto che non può modificare la pagina B, quindi è un problema ;)

ah beh se B non si può toccare direi che, a meno di non utilizzare ajax in maniera astuta, sia difficile realizzare il tutto :stordita:

n0ise
30-11-2008, 16:57
ok c'è un problema...la persona che mi ha chiesto il favore di farlgi questo accrocchio mi ha appena detto che l'equivalente pratico di paginaB non può toccarla...quindi il sistema dell'header che rimanda a PaginaB non è usabile...
c'è una qualsiasi soluzione (anche javascript) che sia proprio PaginaA a mandare a PaginaC dopo aver inviato i dati a PaginaB?

c'è soluzione o non se ne esce?

Grazie
Andrea

hmm..nella paginaB potresti creare un iframe della paginac, e i valori della b metterli come hidden

D4rkAng3l
30-11-2008, 17:49
hmm..nella paginaB potresti creare un iframe della paginac, e i valori della b metterli come hidden

ragazzi lasciamo stare tanto non era neanche per me...la paginaB era su di un altro sito esterno che non posso toccare poichè non ho accesso

Hal2001
01-12-2008, 15:44
Warning: Cannot modify header information - headers already sent by (output started at c:\programmi\easyphp1-8\www\formtest\paginab.php:9) in c:\programmi\easyphp1-8\www\formtest\paginab.php on line 10
Il dato 1 vale: tuo testo
Il dato 1 vale: tuo testo
Il dato 1 vale: tuo testo

Cosa devo fare? come risolvo? please è urgente

Puoi utilizzare il buffer di output all'inizio del file:
ob_start();
e questo dopo header:
ob_end_flush();

D4rkAng3l
01-12-2008, 17:15
Puoi utilizzare il buffer di output all'inizio del file:
ob_start();
e questo dopo header:
ob_end_flush();

cioè? che intendi esattamente? Cosa dovrei fare?

Grazie
Andrea