Newsgroup: it.comp.www.php
Titolo: Redirect non funzionante...

ecco un'altra domanda...
nel file incluso del precedente posto ho questo:
if ($_REQUEST[password]=="test"):
   header("location: " . $_SERVER['PHP_SELF'] . "?action=OK>");
   exit;
else:
   echo "Password errata";
   echo "<form action='" . $_SERVER['PHP_SELF'] . "' method='post'>";
   echo "<input type='password' name='password' />";
   echo "<input type='submit' name='submit' value='Login' />";
   echo "</form>";
endif;
Naturalmente non funziona il redirect, mentre il resto è ok
questo l'errore:
Warning: Cannot modify header information - headers already sent by 
(output started at percorso\pagina.php:4)
La riga 4 è quella relativa all'header

 started at percorso\pagina.php:4)
La tua domanda è una FAQ.
La risposta te la dice già il warning dato da php: in pratica prima 
avrai lasciato qualche carattere (anche un semplice spazietto bianco).
Come dice il manuale alla voce "header": prima della chiamata alla 
funzione header, non ci deve essere nessun altro cazzo! nemmeno uno 
schifosissimo e invisibile spazietto bianco.
--
rob4you
www.outofmind.eu

 avrai lasciato qualche carattere (anche un semplice spazietto bianco).
Ho tolto la tabulazione utilizzata per indentare il codice...
niente da fare, ora è così
   if ($_REQUEST[password]=="test"):
header("location:".$_SERVER['PHP_SELF']."?action=edit>");
exit;
   else:

Scream ha scritto:

Ho avuto molti problemi anche io con header. Poi ho sostituito le virgolette " con l'apice '.

 Ho tolto la tabulazione utilizzata per indentare il codice...
Devi togliere eventuali caratteri presenti prima del tag di escape del 
php (che finisce quindi sull'output) ed eventuali output fatti da php 
(echo, print) prima della chiamata ad header. L'indentazione del codice 
php non viene mandata in output, per cui non disturba.

 qualsiasi output...
Non è molto chiaro...
il fatto di essere in un file incluso è importante?
Il file incluso ha questo codice
<?php
if ($_REQUEST[password]<>""):
  if ($_REQUEST[password]=="test"):
// redirect copiato dal manuale
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
header("Location: http://$host$uri?action=edit>");
// vecchio header non funzionante
//header("location:".$_SERVER['PHP_SELF']."?action=edit>");
exit;
  else:
   echo "Password errata";
   echo "<form action='" . $_SERVER['PHP_SELF'] . "' method='post'>";
   echo "<input type='password' name='password' />";
   echo "<input type='submit' name='submit' value='Login' />";
   echo "</form>";
  endif;
else:
  if ($_REQUEST[action]=="inspwd"):
   echo "<form action='" . $_SERVER['PHP_SELF'] . "' method='post'>";
   echo "<input type='password' name='password' />";
   echo "<input type='submit' name='submit' value='Login' />";
   echo "</form>";
  else:
   echo "<a href='".$_SERVER['PHP_SELF']."?action=inspwd'>Login</a>";
  endif;
endif;
?>
-- 
Scream - SORRIDI! :) Domani sarà peggio...

> Non è molto chiaro...
Se leggessi il manuale alla voce HEADER forse capiresti di più.
- Regola numero 1:
Prima del tag <?php non devi battere alcun carattere, nemmeno uno 
spazio, nemmeno un a capo, nemmeno un respiro.
- Regola numero 2:
All'interno del tag <?php invece, non devi scrivere nemmeno una volta 
la parola "echo", oppure la parola "print", oppure qualsiasi altra cosa 
che ti fa stampare qualcosa sullo schermo.
Queste due regole le devi osservare SCRIPOLOSAMENTE ogni volta in cu 
usi la funzione "header": prima di questa funzione, attieniti alle 
regole.
Dopo header, fai quel che ti pare. ;-)
--
rob4you

 ti fa stampare qualcosa sullo schermo.
Quindi l'if che c'è prima non posso farlo?
Il comando exit non lo fa uscire da tutto il resto?
Devo solamente dare l'istruzione
verifica password <> ""
   se vero -> verifica password == "test"
     se vero -> redirect a pagina.php
     se falso -> password errata ricompila form
   se falso -> verifica richiesta login
     se vero -> mostra form
     se falso -> mostra link login
fine
In asp non sarebbe un problema (visto che lo conosco meglio), ma vorrei 
tradurre il tutto in php.
Se è l'approccio che è sbagliato ditemi come fare a sistemare (<iframe> 
anziché include?)


 contenuto di pippo.php il problema?
Se prima di includere login.php il file pippo.php invia al browser un
qualunque output, sì.
-- 
Federico

 qualunque output, sì.
Ovviamente perché il file pippo.php è quello che contiene menù ecc...
Mmmmm quindi come posso risolvere?

 Mmmmm quindi come posso risolvere?
Se proprio non puoi farne a meno di mandare output prima dell'"header", 
prova ob_start();
--
rob4you

 if ($_REQUEST[password]<>""):
oltre quel che ti hanno detto, devi usare $_REQUEST['password'].
altrimenti, su server configurati bene, ti dà dei warning.
inoltre, probabilmente faresti meglio a controllare se è settato,
invece di controllare se non è equivalente ad una stringa vuota:
	if ( !isset($_REQUEST['password'] )
infine, dato che stampi lo stesso form in due occasioni diverse,
potresti crearti una funzione:
	function stampa_form() { include ('mioform.html'); }
inserendo il codice html del form nel file html.
Ciao
Tristan